Category Archives: Windows

Expanding The Size of a Hyper-V Virtual Disk

Introduction

There are tasks that we all do, but rarely. It’s helpful to have a reference to go back to.

Expanding the size of a Virtual Hard Disk, or VHDX file, is one of those. I use Hyper-V quite a bit to create virtual machines for testing, development, and the like. Every so often though I’ll underestimate the amount of space I’ll need for a machine.

As it turns out expanding the drive size isn’t terribly difficult, but there’s quite a few steps involved. This post will server as a reminder to myself, and hopefully guide others, in expanding the size of a VM drive.

I’ll break this into two parts. In the first half, we’ll see how to expand the drive within Hyper-V. This will expand the VHDX file to a new larger size.

In the second half, we’ll go into the Windows running in the VM to tell it to use the newly expanded space.

Expanding the Drive in Hyper-V

Begin by opening Hyper-V. In the Hyper-V manager, click on Edit Disk in the Actions.

This will open the Edit Virtual Hard Disk Wizard.

If this is the first time you’ve run the wizard, you’ll see a welcoming screen. If you see this, I’d suggest clicking on “Do not show this page again” and clicking Next.

Now use the Browse… button to locate the VHDX file you wish to modify. Once you’ve done that, click Next.

Now we’ll select the action, in this case we’ll pick the Expand option and click Next.

Now we’ll enter a new size for the drive. It shows the current size as 250 GB, so I’ve entered 500 so I can double the size. Obviously you’ll enter a size appropriate to your needs.

Once done, click Next.

On the final page of the wizard it shows what is about to happen. It lists the name of the VHDX file we’re working on, what the action is (Expand), and what the size will be of the new drive.

Just click Finish and the VHDX file will be updated.

Accessing The Expanded Space in Windows

In this example we’ll be using Windows 10 inside our Virtual Machine. Go ahead and start, then connect to your Windows 10 Virtual Machine.

If you go into File Explorer you’ll see something interesting.

Even though we expanded the VHDX to 500 GB, our virtual machine still thinks the C drive is 249 GB.

What we need to do is expand the already existing drive into the newly allocated space.

In the Windows 10 menu, go down to Windows Administrative Tools, then pick Computer Management.

The Computer Management window has a tree on the left. If the Storage tree is not expanded, do so and click on the Disk Management branch.

In the screen capture above, you can see the orange arrow is pointing to the existing C drive area. To the right of that a green arrow points to the newly added but still unallocated space.

Right click in the C: drive area, and in the menu that appears select Extend Volume…

The Extend Volume Wizard now appears, just click Next to proceed past the welcome screen.

By default the wizard will put the only unallocated partition in the selected area, but if you have more than one unallocated partition you can select a different one.

At the bottom, the “Total volume size will” show the total amount of space on the new drive, once the unallocated space has been added.

The next line shows the maximum space in the unallocated partition.

The final line allows you to select the total amount of space to pull from the unallocated area. By default it is set to the max space in the unallocated area, but if for some reason you want to save some of that you can lower the amount.

In this case I’ll take the default options and click Next.

You’ve now reached the final screen of the wizard, just click Finish to have it do its work.

The Computer Management window now shows the expanded C drive. You can now close the Computer Management window.

If you go back to the File Explorer and refresh it, your C drive will now show the new size.

Conclusion

In this article, we expanded the size of a Hyper-V virtual hard disk (VHDX) that hosted a Windows 10 installation. As you saw, it was pretty simple to do, but did require a few steps.

Hopefully you’ll find this useful in working with your Hyper-V machines.

Formatting A Drive as exFAT on Windows, macOS and Linux

Introduction

In my previous blog post, Sharing a Drive Between Windows, macOS and Linux, I described how to setup the three operating systems to read a drive that had been formatted as exFAT. The exFAT format is readable by all three, and making it easy to share files between different operating systems.

A natural question that follows is, “how do I format a drive as exFAT?”

In this article I’ll show how to format an external drive as exFAT. I’ll be using an 8gb thumb drive, but I’ve used this technique with both thumb drives as well as the larger external multi-terabyte hard drives.

Windows

Windows is the easiest of the three to format a drive for exFAT. First, insert the drive into a USB port. This will typically open the Windows File Explorer, but if not, open it.

Now right click on the drive letter for the USB drive, and click on Format. The format dialog will appear.

In the second drop down you can pick the file system. Use it to select exFAT. You can also enter a new volume label if you want. Simply click the Start button to kick off the format process.

You will of course get a warning that all the data on the drive will be lost, simply click on OK to proceed.

Once done Windows will let you know. Just click OK and your drive is ready to use.

Apple macOS

There’s a few more steps to formatting a drive to exFAT in macOS, but it’s still pretty simple. Start by opening Finder, then go to the Applications. In Applications, open the Utilities folder.

Inside the Utilities, launch the Disk Utility. If you’ve not done so, connect the USB drive you want to format as exFAT.

On the left side of the Disk Utility is a list of drives, click on the USB drive in the list.

Above the drive info area are a series of command buttons. Click on the Erase button. Note you need to click on the icon, not the Erase label.

In the dialog that appears, you can change the label if you wish. The important box is the Format one. You can use the blue arrow to bring up the list, and change it to exFAT.

Once exFAT is selected, you can click the Erase button on the lower right.

Once done, macOS will let you know. Just click Done, and the drive will be ready for you to use.

I’ve used this technique with macOS versions from High Sierra onward.

Linux

For this section, I’m using screen shots from my Kubuntu 20.10 computer. The techniques will work with most Ubuntu/Debian based installs. To make it more portable to other versions, we’ll do most of it using the command line.

Note, these instructions assume you’ve already followed the instructions in my previous blog post, and installed the exFAT utilities.

Start by opening up a terminal window, and entering the following command:

df

Your output will look something like this:

Filesystem     1K-blocks     Used Available Use% Mounted on
tmpfs             805596     1752    803844   1% /run
/dev/sda2      244568380 18388480 213686844   8% /
tmpfs            4027972      128   4027844   1% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs               4096        0      4096   0% /sys/fs/cgroup
/dev/sda1         523248     7984    515264   2% /boot/efi
tmpfs             805592      108    805484   1% /run/user/1000
/dev/sdb1        7815648       96   7815552   1% /media/arcanecode/4ECB-E340

For this exercise, I’ll be using the /dev/sdb1 drive which is my 8gb thumb drive.

Before we can proceed, we’ll have to unmount the drive. The command is simple.

sudo umount /dev/sdb1

Now that the drive has been unmounted, we can format it using the mkfs utility.

sudo mkfs.exfat /dev/sdb1

Once formatting is complete, we can check its status using the fsck command.

sudo fsck /dev/sdb1

Your output will vary depending on the drive you formatted, but it will resemble something like this:

fsck from util-linux 2.36
exfatfsck 1.3.0
Checking file system on /dev/sdb1.
File system version           1.0
Sector size                 512 bytes
Cluster size                 32 KB
Volume size                7633 MB
Used space                 3041 KB
Available space            7631 MB
Totally 1 directories and 3 files.
File system checking finished. No errors found.

A benefit of using fsck is that will also remount the drive for you, making it ready to use.

You can verify it again using your systems file explorer. Here I’m using Dolphin, the explorer built into Kubuntu.

Navigate to the drive, right click on it, and pick Properties.

In the properties window it will show you the file system. As you can see, it has been formatted to exFAT.

Conclusion

In this post we saw how to format a drive for exFAT on three operating systems. You can now format a drive using any of the OS’s, and be able to use it across all of them.

Sharing a Drive Between Windows, macOS and Linux

I have a lot of computers, on which I use a variety of operating systems. Some run Windows 10, my Apple macBooks all run macOS, and on others I have a variety of Linux distros, primarily Ubuntu based.

I would like the ability to share external drives, such as thumb drives or external SSD drives, between them. To get that compatibility across OS’s, I need to format those drives in a file format called exFAT.

exFAT is a replacement for the older FAT32, but has the benefits of other file systems such as NTFS. I can have long file names, and store files bigger than four gigabytes in size to name a few.

Windows and macOS both support exFAT out of the box. I can just plug in an exFAT drive into them, and both will let me read and write to them. (Note that not all drives come formatted as exFAT, you may need to reformat them to the exFAT system). Linux, however is another story.

To allow Linux to read an exFAT drive you need to install the exfat-utils utility. On Ubuntu based distros it’s pretty easy, just open up a terminal and enter the following command, all on one line.

sudo apt-get install exfat-fuse exfat-utils

For other distros you can use their native installer, such as yum, to install the exfat-utils. After that you can simply plug an exFAT thumb drive or SSD into your Linux box and it will know how to read and write to the drive.

Having Multiple Entries for the Same PC in Microsoft Remote Desktop Application on Apple macOS

Introduction

In a previous blog post, Using the Microsoft Remote Desktop Application on Apple macOS, I showed how easy it was to remote control a Windows computer from your Mac.

One question I get asked is “Can I have multiple entries for the same computer?” The answer is yes!

This, of course, leads to another question, “Why would you want to?”

Reasons for Multiple Entries

There are a number of valid reasons for wanting multiple entries in Remote Desktop to the same computer. Let’s cover a couple by using examples.

First, let’s say you have a Windows 10 computer in the family room where your child plays games and does school work. Wisely you have setup their account as a “standard user”.

You have an account as well, as an administrator, to handle administrative tasks such as installing software, making sure updates are being processed and the like.

You could setup entries in Microsoft Remote Desktop, one for each user that logs into the computer. This allows you to have one entry to login as yourself, and a second to login using your offspring’s ID.

Now when your child comes to ask you to install the latest updates to Minecraft on the family computer, you can simply remote to it from your Mac using their ID, and install the updates providing your admin user ID and password. You’ll also have the entry to login as yourself, so you can apply updates and do maintenance.

For the second reason, you may wish to access your remote PC with different sets of option. In the blog post I mentioned earlier, I set it up to use all the monitors on my Mac.

Every so often though, I want to have my remote Windows computer running in a window. This allows me to see something on my remote machine, while still having my macOS desktop available.

One example, in my previous post I showed how to configure Windows to allow for remote access. I did so by having the Windows machine in a window on my Mac on one monitor, while creating the post in Safari on my macBook on a second monitor. This let me have them side by side, making it easy to create the instructions.

Rather than having to change the settings each time, I have two entries for my main Windows computer. The first, which you saw created in the first blog post in this series, opens the Windows machine using all monitors. The second opens it up in just a window.

Those are just two reasons, I’m sure you’ll be able to come up with many more.

Adding a Second Entry for the Windows PC

First, I’m going to assume you’ve already read my first article, Using the Microsoft Remote Desktop Application on Apple macOS. If you haven’t, please take a moment now to do so.

With Microsoft Remote Desktop open on your Mac, click the + button at the top, then pick Add PC in the drop down.

Note that for security reasons, in the screen shots I’ve replaced with the actual name of my computer with <name>.

Start with the name of the computer in the PC name, and pick the user account to login in as, or leave it as “Ask when required“.

Now we want to use the Friendly name to indicate not just the computer name, but also how this is used. For this example I’m going to have my remote machine display in a window, so I’ve entered <name> in a Window.

Next we’ll need to configure it to show up in a window, so click on the Display tab.

Here I will uncheck the default of Start session in a full screen, then check on Fit session to window.

Then, at the bottom I checked on Update the session resolution on resize. This way when I resize the window on my Mac, it will resize the computer I’m remoting into so the desktop will fit the window.

You can change the Devices & Audio and Folders if you wish. Since I’ve already covered those in the first article I’ll just click on the Add button.

Update the Existing Connection

Before we open the new connection, we should update the friendly name of the existing one to make it clear what the difference is. To do so, click on the pencil icon in the upper right of the connection created in the first article.

Go to the Friendly name field, and enter the name of the computer followed by (for this situation) All Monitors, then click Save.

Below you can see it now reads <name> All Monitors, and beside it the new entry we just added for <name> in a Window.

It’s now very easy to tell the difference in the two connections.

Launching the New Connection

Let’s now launch the new connection by double clicking on it.

Here you can see a new window appears on my Mac, showing my Windows desktop. (Note that you can see a bigger version of any of the images in my blog posts by double clicking on it).

You can see the window with the full Windows 10 desktop, including the Windows task bar. You can also see the macOS toolbar across the bottom, as well as the Mac menu bar at the top.

You can also resize the window. If you checked the Update the session resolution on resize option, the resizing the window will also resize the Windows desktop as you see below.

You can see my Windows 10 desktop now fits nicely into my resized window.

Please note you can only have one connection to a computer active at a time. If I am in the windowed version of my connection, then go back to the Microsoft Remote Desktop connection window and double click on the <name> All Monitors, it will disconnect the <name> in a Window session then launch the all monitors version.

Any time you launch a connection, it will disconnect any existing connection, if there is one, in favor of the newly launched one.

Conclusion

In this article we showed how to create multiple connections to the same computer in the Microsoft Remote Desktop application on macOS. This works with Big Sur as well as previous versions of macOS.

We also covered various reasons why you might wish to create multiple connections within Remote Desktop.

Armed with this information you can now create multiple connections to the same computer to fit the ways in which you want to use the remote computer.

Supressing “The certificate Couldn’t Be Verified” message Using the Microsoft Remote Desktop Application on Apple macOS

Introduction

In my previous blog post, Using the Microsoft Remote Desktop Application on Apple MacOS, I showed how easy it is to connect to one of your Windows computers from your Mac.

I frequently use the Microsoft Remote Desktop application on my Apple MacBook Pro to connect to one of my Windows computers. It presents a nice interface that’s easy to use and setup.

Once you’ve added your computer to the Microsoft Remote Desktop application (you’ll find the instructions in my previous post), all you have to do is double click on it to access your remote computer.

Here is the launching point, note that for security reasons in all of the images in this article I’ve blurred out the name of my computer and replaced it with <name>.

There is one irritating behavior. When connecting to a computer it frequently displays the following message: “You are connecting to the RDP host <name>. The certificate couldn’t be verified back to a root certificate. Your connection may not be secure. Do you want to continue?

Having to stop every time and click Continue is really annoying. Especially if you are on your home network, connecting to a computer you own and trust. There’s an easy fix though!

Suppressing the Warning Message

Simply click the Show Certificate button to display the certificate information.

Once you review, simply put a check mark in the “Always trust...” checkbox (pointed to by the arrow) then click Continue.

Since you are changing the trust certificates for your MacBook (or other Apple Mac computer, like the Mac Mini), macOS will prompt you to enter your admin password. Do so, then continue.

From here on out, all you need to do to connect to your remote computer is double click on it, and (if you’ve not saved it within the remote desktop program) enter your credentials. No more having to click to continue past the “certificate couldn’t be verified” message.

Conclusion

I’ll wrap this up with two quick notes. First, this works on the last several versions of macOS including Big Sur.

Second, while I’ve used Windows as the example, this will work with any OS (such as various Linux distros) that support RDP (Remote Desktop Protocol). Sadly, macOS does not support RDP so you cannot connect to another Mac from the Microsoft Remote Desktop application.

Using the Microsoft Remote Desktop Application on Apple macOS

Introduction

I use many computers in my daily life, including Windows, Apple Mac’s, and Linux computers running a variety of distros. It’s very convenient for me to be able to remote into another computer from whichever computer I happen to be on.

On my MacBook (although this would work on any Apple machine running macOS, such as a Mac Mini), the Microsoft Remote Desktop application is a fantastic program for remoting to another computer.

While primarily designed for accessing a Windows machine, it will work with most computers that support the RDP (Remote Desktop Protocol) such as many Linux distros.

Note that it will not let you connect to another Apple Mac, as macOS does not support the Remote Desktop Protocol. You can go from a Mac to Windows (or some Linux) computers using the Remote Desktop application, but not to another Mac.

Microsoft Remote Desktop is free, and in the Apple App Store. Just do a search for Microsoft Remote Desktop, get and install it. But don’t open it quite yet, as we have to configure the computer you are going to connect to.

Configure Your Windows Computer

I’m going to assume you are connecting to a Windows 10 Pro computer. Click on the Start button, the pick Settings. In the Windows Settings, pick System.

On the System page, scroll down in the menu on the left and click on Remote Desktop. (You can click on the image below, or any of the ones in this article, to see them in their full resolution).

You’ll first need to toggle on the Enable Remote Desktop setting, as I’ve done here.

Next, look under “How to connect to this PC”. This has the name you need to enter into the Microsoft Remote Desktop app. In this image it shows <name>, but for you it will show the name of the computer. Note that for security reasons, I’ve replaced the actual name of my computers with simply <name> in the screen captures.

Finally, at the bottom look at the User accounts section. By default, if you are an administer on the computer, you are automatically able to remote to the computer.

If you want a standard user, in other words a non-admin user, to be able to remote in you’ll need to add them using the “Select users that can remotely access this PC” link.

At this point you’ve now setup your Windows computer to be remoted into. Note you only have to do this once on this computer, after that it can be remoted to from other computers.

Adding a PC to Microsoft Remote Desktop on your Mac

Now return to your Mac. Assuming you’ve installed the Microsoft Remote Desktop application, open it.

The first time in, you’ll see the big “Add PC” button right in the middle. After you’ve added the first machine, using the instructions here, you can add more computers using the plus button (pointed at by the big red arrow) and pick “Add PC” in the menu.

You’ll then be shown the Add PC window. Start by entering the name of the computer you want to connect to.

After entering the computers name, you’ll see the User account line, which by default is set to Ask when required. In this mode you will be prompted for your login credentials every time.

As an alternative, you can save your credentials by picking Add User Account… in the User account drop down. You’ll then be prompted for your Username and Password. You can also create a “friendly name” for the account.

For example, if you were setting up a connection to your wife’s computer, you’d have to give her full user name, perhaps it’s her e-mail address. In the friendly name could just enter “She who must be obeyed’s computer”.

One nice thing Microsoft Remote Desktop does is save your credentials. Then when you add more computers that use these same credentials you can just pick it from the User account drop down and not have to recreate them every time. This is especially nice for when you use your same Microsoft credential to login to multiple Windows computer.

Once you add the user account, or leave it at the default to ask each time, you’re ready to look at some of the options in Remote Desktop. It’s worth your time to understand these, as it will affect your experience when working with remote computers.

Friendly name can be helpful if the computer has a cryptic name. Often when a PC is purchased the default name is something like WINRPXM457JB. Most home users don’t realize they can rename their computer and leave it at the default. Using the friendly name you can enter “She who must be obeyed’s computer” and know what machine it is.

I find this even more helpful in work environments where they use naming conventions like “HR-PC-001”, “HR-PC-002”, etc. You could instead use meaningful names like “Anna’s computer”, “Jack’s computer”, or “The nice lady who brings us donuts computer”.

If you have a lot of computers you connect to, you may want to group them. By default, there’s one group “Saved PCs”. You may want to create groups such as “My computers”, “Wife’s computers”, “Kid’s computers” and so on. This is totally optional, but the more computers you need to work with the more useful it will become.

The Gateway option is used in corporate environments that have setup Remote Desktop Gateway servers. Since this article is geared toward home users, it shouldn’t affect you. If you are in a corporate environment and need to remote in, your friendly neighborhood system administrator will be able to tell you if you need a gateway, and if so what do you need to enter here.

The other options are pretty straight forward, so let’s click on the Display tab.

Display Options

Here you have some choices on how the remote machine is displayed on your Mac. One notable one is “Use all monitors“. If your Mac has multiple monitors connected to it, you may want to have the remote computer displayed on all of them. To do so, check this box. If you do some of the other options become disabled.

Alternatively, you may want the remote computer only on one monitor so you can still access your Apple computer on the other monitors. Leaving this unchecked allows this.

If you don’t select Use all monitors, you then have the choice to start the remote session in full screen, or show it in a window.

Next up are quality settings, such as the color depth or optimizing for Retina displays. Note that the higher settings you pick, the more bandwidth and processing power it will take.

In my selection, shown above, I chose to use all monitors at a high quality. Make your own selections then click on the Devices & Audio tab.

Devices & Audio Options

This tab controls what gets shared between the host computer, your Mac, and the remote computer (typically a Windows computer).

If, for example, you started a video playing on your remote computer, the “Play sound” option controls where you hear the audio. The default, On this computer simply means the Mac running Microsoft Remote Desktop.

I generally go with the default options, shown here, then go to the Folders tab.

Folder Options

Using the folders tab, you gain the ability to transfer files between your Mac and the computer you are remote controlling.

Start by checking the “Redirect folders” option. Then in the lower left click the + button. In the dialog that pops up, select one of the folders on your Mac. After you’ve connected to your remote computer, this will show up as a folder in your remote computer. Here’s what it looks like on Windows, after you have remoted in.

You’ll see the name of the folder you picked, in this example the Documents folder, the text on my, then the name of your Mac, in this case represented by <my mac>.

From here you can double click to open the Mac’s folder in File Explorer, and begin copying files back and forth. Do note there is a “Read Only” checkbox in the Add PC dialog’s folder options. If you check it, on the Windows computer you connect to will be able to read and copy files from the Mac, but will not be able to copy files to the Mac.

Using redirect folders is optional, and only needed if you wish to move files between the two computers. To be honest, I seldom use this option as I’m a heavy user of Microsoft OneDrive.

If I need something, I simply save it into my OneDrive on the remote computer, then I can open it in my OneDrive folder on my Mac, and vice versa. If you aren’t a user of OneDrive or a similar service then this will be a useful tool for you, should you need to share files.

OK, you’re all done, just click the Add button. This computer will now be added to your Microsoft Remote Desktop window.

Connect To a Remote PC

You can connect by simply double clicking on the block with the computer’s name (in this example represented by <name>).

Note the two icons in the upper right of the computer box. The pencil icon can be used to edit the settings we just saw. The trashcan can be used to remove this computer from your remote desktop application.

When you double click on the computer, you may be shown a message “You are connecting to the RDP host <name>. The certificate couldn’t be verified back to a root certificate. Your connection may not be secure. Do you want to continue?

If you are connecting to your own computer, that you trust, likely on your home network, then you can click the Continue button. In a future post we’ll show you how to resolve this so it will skip this dialog.

Once you have connected, you’ll see the remote computer, probably full screen (unless you changed the property back in the Display options).

Exiting a Remote Desktop Session

I will say, it’s not at all intuitive how to switch back to your Apple macOS desktop, or how to exit a remote desktop session once you are in it. Since I’ve shown you how to get into a remote desktop session, I should take a moment and show you how to get out of it.

To switch back to your macOS machine, simply use the CTRL key, plus the left arrow to swap to the previous desktop. Using CTRL plus right arrow will go back to the Remote Desktop session.

If you are using the virtual desktops feature in macOS, you can use CTRL and the left or right arrows to move past the remote desktop session to other macOS virtual desktops, then go back to the remote desktop.

To exit a remote desktop session, while you are looking at your remote computer simply drag your cursor to the very top of the screen and let it sit there a few seconds.

The Apple menu bar will pop up. You can then use the Window menu, and click Close. Alternatively you can click the Red X button in the Remote Desktop window to close the session.

Also note it’s possible to connect to multiple computers at the same time. You can use either the CTRL and left/right arrow to swap between them, or in the Window menu pick a different remote desktop to connect to.

Network Connectivity

Please note that both the Apple Mac and the computer you are remoting to must be on the same network. Typically this will be your home network, or perhaps a work network.

By default, Remote Desktop won’t work if, for example, you go to a coffee shop with your Mac and your Windows computer is still at home.

It is possible to work around this by setting up a VPN connection back to your home network. Setting that up, however, is beyond the scope of this already long blog post.

Summary

In this post, you saw how to install and configure Microsoft Remote Desktop on Apple’s macOS and connect to a Windows Computer. The screen captures were from macOS Big Sur and Windows 10, but I’ve also tested it with Catalina and Mojave.

Opening Port 80 in Windows Firewall to Support Calling SSRS From Another Computer

Recently I was working on another article for RedGate’s SimpleTalk site. As part of it, I had SSRS installed on a Windows 10 computer, and needed to connect to it from another computer. I was having a lot of issues connecting, until I remembered SSRS connects using Port 80, and by default Windows 10 (and previous versions) block Port 80 for incoming traffic.

The solution was to, obviously, open Port 80 on the Windows 10 computer. Doing so was not difficult, but did require quite a few steps, and of course administrator rights on the computer.

First, open the Windows 10 Settings. Then, click on Network & Internet.

image

On the Status window, click on Windows Firewall.

image

From here, click on Advanced settings.

image

If prompted confirm you do wish to make changes. When the Windows Defender Firewall dialog appears, click on Inbound Rules.

SNAGHTMLef395d1

Now click on New Rule

image

In the New Inbound Rule Wizard window, change the type of rule to be Port. Then click next.

image

On the next window, leave the rule applying to the default of TCP. For the port, assuming you are using the default setup, enter 80 for the port number. If you setup SSRS on a different port then obviously use that port number instead.

image

On the action page we tell Windows what we want to do if it finds incoming traffic on this port. For this development environment we will take the default of Allow the connection. If you had setup https service on your report server, then you could take the second option of allow if secure.

image

Next, we need to specify what network type the rule should apply to. For the scenario, I am on a small network, such as you might have at home, and that network was setup as private. Thus I am leaving Private checked on, and unchecking Domain and Public.

Unchecking public is especially important if you plan to take your laptop out to a coffee shop, you don’t want someone trying to hack into your machine via port 80. When done just click next.

image

On the last screen we’ll give the firewall rule a name, and a description. When done, click finish.

image

As you can see, the new rule now appears in our Inbound Rules area.

SNAGHTMLf01e748

Once you have completed working with your SSRS server, I’d suggest you return here, right click on the rule, and either disable it, or if you know it will no longer be needed, delete it.

And with that you should now be able to connect to the computer running SSRS from another computer on your network.

Windows 10 Icons Not Showing, Preview Not Working

I had a weird issue with Windows 10 today. All of a sudden, my icons weren’t displaying correctly. When I had the Preview Pane on, nothing was displayed. Even more bizarre, The Layout area of the View pane in Windows Explorer, had all the icons disabled.

Turned out I had a corrupted icon cache. To fix this for yourself, first open up a copy of Windows Explorer (or My Computer or whatever you wish to call it).

Go to the View tab, and make sure the Hidden Items is checked on.

SNAGHTML17f6c4

Now navigate to C:\Users\(User Name)\AppData\Local, where of course (User Name) is replaced with your user name.

Find the file IconCache.db, right click and delete it. Yes, that’s right, delete it. It’s OK, it won’t hurt.

To be really thorough, you could now head to the Recycle Bin, and clean it out, or at least open the Recycle Bin and remove the IconCache.db file. However you could skip this step if your the nervous type.

OK, that done, restart your computer.

When you return to the folder, such as your Pictures folder, Windows will start rebuilding the icon cache automatically, and you should now see your icons working again, and the preview pane should also now be functional.

Standard disclaimer, no warranty or guarantees provided, this is what worked to me (and to be honest I’m making it a blog post to remind me should it happen again). This may or may not work for you, but as the icon cache will automatically build itself it’s pretty safe to try.  Good luck!

SQL Server Data Tools in Visual Studio 2012–Publish Database Profile

One of the new features in SSDT, and what I consider to be my favorite, is the Publish Database Profiles. With database projects you could set a multitude of settings, everything from ANSI NULLS to whether to drop and create the database with each build. The only issue was these settings applied to the entire project; you had to change them each time you wanted to deploy to a different server, or to change the rules (overwrite vs. incremental for example).

New with SSDT are Publish profiles. They allow you to establish a set of rules and save them for reuse. To start with, right click on the project name and pick Publish from the menu.

image

You’ll now see a blank publish page.

SNAGHTML360f9789

Let’s start by tweaking some database settings. Click the Advanced button on the lower right.

SNAGHTML36114075

Here you can get to all of the options you can use to fine tune your database deployment. The most common appear at the top, the less changed ones appear in the list below. In this image I’ve checked on the option to Always re-create the database. This option will wipe out the existing database and recreate it from scratch.

Use this particular option with caution, especially if you are doing it to a database you are sharing with your co-workers (or even worse, production!). When your rebuild the database you’ll also lose any data and have to reload. Sometimes this is a good option, especially in the early stages of development when you’ve made massive changes to the database, or perhaps have gone into the database and made a lot of changes outside the scope of SSDT.

There may be other options you need to change, based on your environment or DBA requirements. Once you’ve changed your options click OK to return to the previous screen.

Back on the Publish Database settings dialog I’ll set the target database connection, and the name I want to use for the database. I can also set the output script name if I wish.

 

SNAGHTML36153d0b

Next, I want to be able to save this profile so I can reuse it later. Check on the “Add profile to project” option in the lower left, then click the Save Profile As… button.

SNAGHTML36195ad8

I gave it a good name, and made sure to include the most important options such as RecreateDB to indicate a database recreate was one of the options.

As I write this however, there is a bug with SSDT. When you click the “Add Profile to project” button it immediately adds a profile with the original default name. Then when you click the Save button in the dialog above, it adds the profile again, totally ignoring the name you give it. Instead it uses the default name again, only this time with an _1.

I’ve been assured that this bug is already known and has been fixed, and will be released with the next update to SSDT in VS2012. So depending on when you read this, it may or may not be an issue. Regardless, the fix is very easy, just rename the new .publish.xml file to reflect what you wanted it to be.

Once saved come back and hit Publish. The database will now be deployed to the server and the profile will be added to the solution. Here it is, after I’ve renamed the publish profile.

image

Note that I’ve given it a naming convention that specifies the database name, the target server, and any critical options. Here I’ve added “Overwrite” to indicate what will happen when I run it.

To run it, just double click on it. First, Visual Studio will do a build of the SSDT project. If there are any errors the process will be halted and you’ll need to fix them. If not, you’ll be presented with the publish dialog, this time with everything filled out.

SNAGHTML98453db

All you have to do is click Publish and the database will be created/updated using the options you’d picked previously, to the server which you had previously indicated.

Now for the real fun. Repeat the above steps only this time do NOT check the overwrite database option. Now, (after renaming the new profile) you have two publish profiles to pick from.

image

Take this even further. In my current project I have 8 profiles. An incremental and overwrite option for my local computer, the development server, the user acceptance testing server, and the production server. (In my case it’s a one man project, I’m the developer and the DBA all in one.) No longer do I have to juggle the server name, or even worse do a publish but forget to change the server from production back to local.

By far I think this is my favorite feature in SSDT.

Duqu Worm Security Issue with Windows True Type Font Engine

Last week Microsoft revealed there is a serious security vulnerability with the true type fond rendering code built into the Windows kernel. By simply visiting an infected website the Duqu worm can get administrative level privileges to your system, thereby installing viruses / worms on  your system.  Malformed MS Word documents can also be an entry vector for Duqu.

While a more permanent patch is expected to be available within the next month, Microsoft has implemented a “Fix it” workaround you can access via this url:

http://support.microsoft.com/kb/2639658

To enable the fix, scroll down and click the fix it button under “Enable”.

Please note: There is one drawback to this fix, once you enable it you will no longer be able to do a “Save As…” to PDF format from any Office app. You can restore this capability by disabling the Fix It by clicking the appropriate button under the “Disable” option in the above url.

I have successfully tested the fix enable / disable and was able to restore the ability to save as to PDF. For the time being I will be running with the fix enabled. If I need to export to PDF I can visit the site, disable the fix, and save to pdf, then re-enable. While disabled I would not be going to any websites. 

This is a fairly serious issue that is already being exploited to infect machines. To protect yourself, along with your business and / or clients, you should consider using this fix until a permanent solution is provided by Microsoft.

Also note that this week’s “patch Tuesday” updates included some critical security fixes. If you do not have your box setup to automatically apply updates, you should go to Windows Update and get the latest patches.

A big thanks to Steve Gibson (@sggrc) and his Security Now podcast on the TWIT.TV network, where I heard about this. If you aren’t listening to the Security Now podcast, you should. I’ve long held it should be required listening for any IT Professional.

A Week of Windows 7

Since my last post the only thing I have installed is the Visual Studio 2008 and SQL Server 2008 Development tools. Since then I have worked with the various apps and can report these items so far.

First, no problems as of yet with the development tools, although so far I’ve only been using SQL Server Management Studio.

WinAmp works OK for playing music, but when I rip a CD the Media Library doesn’t always refresh correctly. I have to exit WinAmp and restart. Note this only happened about 50% of the time, the other half it flickered, but recognized that I’d inserted a new disk.

The NVidia graphics drivers seem to crash fairly often, about one to two times a day. They usually restart and everything is OK EXCEPT the Zune software. The UI on it goes blank. It still works, it happened today while I was playing some music and the music kept on playing, you just can’t interact with it. So far I’ve used task manager to shut down the Zune software and then I can restart it. It will work fine after that (at least until the next time the graphics drivers crash).

Every so often everything just freezes. Mouse doesn’t work, no keyboard input, no screen updates. I’m guessing it’s a graphics issue, but not really sure.

When launching a Virtual PC, they seem to take a long time to connect to the network. They will eventually connect (5 minutes is about average). Just be patient.

The installer for the SQL Server 2000 Northwind database sample crashed while I was trying to install. Fortunately i was able to install by extracting the SQL scripts from the zip file and using them to create the pubs and Northwind databases. (I need these for some code samples).

Everything else I’ve used seems to work OK. So at this point I seem to have all my software installed, so now I’m going to settle in and let my focus return to Data Warehousing and Analysis Services.

Don’t forget the Alabama Code Camp coming up at the end of January. So far we’ve had no entries for Speaker Idol, so as of now your chances of winning that 1 year MSDN Subscription seem quite good!

Wonderful Wednesdays With Windows 7

I attended a great user group meeting tonight, where fellow MVP Jeff Barnes presented on Windows Azure. I learned quite a bit. I didn’t have much time to work with my Windows 7 install, but do have some link love to pass along. First off though, the apps.

WinAmp – First off was my old standby for ripping CDs (yes, that I legally own) and playing music files is WinAmp. I installed version 5.54 tonight, they player seems to work fine. The only problem I had was getting it to install skins. First, there was no file association setup for them. Easy to fix, first I had to download the skins to another drive, then set the file association for the .wal file to winamp.exe. But even then it did not install. I figured out it’s a permissions issue, by default Windows 7 requires elevated rights in order to write to the program files folder. I figured this out when I was copying the files from my download drive to the WinAmp Skins folder. It prompted me for permission to continue.

After copying the files, I was able to find the skins in the WinAmp Menu. I’m guessing the only thing I would have to do is run WinAmp as admin when I want to install new skins, or fiddle with the folder permissions for winamp.exe. Frankly I’m glad Windows 7 is restricting rights to the program files folder, although apps that write files (like Winamp with it’s skins) to the same folder as the application may run into issues. For me though it’s not a big deal, I generally only use 1 skin (MMD3) so I’m set.

Pismo File Mount – The second tool I installed was a freeware ISO mounter named Pismo File Mounter. One of my Twitter friends (@cfrandall) kindly pointed it out to me. It’s pretty simple, just right click on an ISO and click Mount from the menu and there it is. Seems to work fine, I was able to browse files and what not. Tomorrow I will start installing some applications from ISO and let you know how well it works.

Now for a little link love.

Windows 7 Beta Home – The official Microsoft Windows 7 home page, has links to the beta program so you can get your own copy of Windows 7 and be one of the cool kids. Also has links to the Windows 7 blog, desktop themes, and more.

Tim Senath’s Musings – Tim is a client platform guy form Microsoft. His blog has a great bumper crop of Windows 7 secrets. I picked up several valuable tips that I’m already using. I love the one of double clicking on the upper or lower border of a window and it maximizes the window height wise, but leaves the width alone. Using WIN+SHIFT+LEFTARROW and WIN+SHIFT+RIGHTARROW to move a window back and forth between monitors is also becoming a favorite. Check out his blog post for a lot of other great tips and tricks, some of which even work under Vista.

Marlon Ribunal’s Blog – Marlon has a good post with links to Windows 7 Beta Reviews and other articles.

Windows SDK for Windows 7 and .Net Framework 3.5 SP1 Beta – If you are doing development specifically for the Windows 7 platform, you will likely want this SDK for Windows 7 and .Net 3.5 SP1. Like Windows 7, this SDK is also in Beta.

And finally, if you are tired of answering the “well what’s new in Windows 7?” question from all your friends, family, and co-workers, point them at Paul Thurrott’s SuperSite for Windows. He has a Windows 7 FAQ that answers all sorts of questions and has a nice list of all the new features.

Tuesdays are Terrific with Windows 7

It’s Tuesday, and the march to install software in my Windows 7 install goes on. Good news for today, everything was favorable although I did get slowed down downloading the latest VMWare. Speaking of which, we’ll let it start the list.

VMWare Workstation 6.5 – Installed with no problems, everything seems to be working fine. It recognized my USB devices, network, etc.

Camtasia Studio 5 – Installed and works no problems.

SnatIt SnagIt 9 – Had a hic-cup installing the first time, just seemed to install. In retrospect I may not have given it long enough. I rebooted, and to be safe started the install in Admin mode, it installed and works just fine.

Bayden SlickRun – works great, no problems.

TrueCrypt 6.1 – Works fine, mounted the drive OK.

Live Mesh – Works fine, I loaded it on my Windows 7 machine and was able to login to the website on another computer and remote control my Windows 7 box with no problems.

Corporate VPC – My companies VPC software installed and ran just fine with Windows 7. I can’t say much else about the software since it’s something proprietary but my co-workers will be pleased to know it works.

And that’s it for today. All in all I have been very pleased with my Windows 7 experience. I have been taking it slow, installing my software one at a time, testing, and verifying basic functionality. Tuesday night I have a Bug.Net meeting on my calendar, so it may be Thursday before I get a chance to do more software installs.

One follow up from yesterday, I was told Virtual Clone Drive will work under Windows 7, but causes the Windows 7 shutdown to hang. Haven’t tried it yet, if anyone knows a free ISO reader that works under Windows 7 please leave a comment.

A Weekend with Windows 7

In-between other household duties I spent most of this weekend with the new Windows 7 Beta 1. While I probably would have been more sensible to install it in a Virtual PC, I really wanted to experience it, and the best way to do that is by using it. Thus I installed it on my HP Pavilion DV-8000 laptop.

The first pass I did Friday night, when I installed Windows 7 as an upgrade to my installed Vista SP1. Now, let me say Microsoft has clearly stated you should only install the Beta as a clean install, not as an upgrade. However I figured since it was going to get wiped anyway, I might as well see what the experience was like. The upgrade took about 2 hours and afterward things were not overly stable. Some things worked fine, but other things did not. For example, Virtual PC’s built in network drivers quit working, although I could still use Shared NAT. My Zune software also started acting odd, it would no longer connect to my Zune. The PC knew the Zune was connected, the message just didn’t get to the Zune software.

Saturday morning I played with it a bit more, and being unable to resolve my Zune issue decided to take the plunge, reinserted my Windows 7 DVD, and reformatted my C drive so I could do a clean install. The install went very quickly, around half an hour not counting the formatting. Since then I have been slowly restoring my various applications, and wanted to share a run down on what I’ve done so far.

Before I go any further though, one very critical item. One of my Twitter friends @devhammer alerted us to a bug for Windows Media Player in Windows 7. It is Support Article 961367, and it fixes an issue with Media Player corrupting MP3 files. The first thing you should do install it!

Next, after the Windows 7 install I found my resolution stuck at 800×600. Yuck! So I ran Windows Update, and it found a driver for my NVidia chipset and installed. (Hooray for Windows Update!) After the reboot I was returned to 1400×900 on my laptop display and 1600×1200 on my external monitor. But not all was well with the world, there is one odd bug. By default the wallpaper is this bluish looking fish. Not being a fish person I switched to the Landscape theme. Windows 7 has this cool feature where you can pick multiple desktop wallpapers, and it will rotate through them at a frequency you can set,  the default being every 30 minutes. This though seemed to cause an issue with the Zune software, every time the wallpaper changed, my Zune software went completely blank and never came back. It was still working, my Zune player was showing data being synced, but the display went blank. I used task manager to shut it down then could simply launch the Zune software again with no problems.

The moral of the story, if you have NVidia graphics, set the rotating wallpaper on, and have display issues, simply pick ONE wallpaper and disable the rotation. Once I did all was well with the world. Now onto my software installs. 

Norton Anti-Virus, Corporate Edition – Seems to work OK, but I get an error message about the End Point process being shut down for compatibility issues. Since I hear Norton has discontinued this product, I will likely move to either Windows Defender or purchase the full blown Norton closer to the Windows 7 release date.

FireFox 3 – Works great, no issues.

UltraEdit 14 – Also works great, no issues.

TouchCursor 1.6 – After I installed I had to reboot to get it to take effect, but once I did it’s worked great. (If you don’t know what TouchCursor is, go to http://touchcursor.com, great utility!)

Zune – Software installed fine, but of course switching to what appeared to the Zune as a new PC caused me to need to reset my Zune so I didn’t wind up with a big blob of “unreachable” disk space. I had backed up all my Podcasts, and copied them back over and the Zune software recognized them all, but I still had to go to each one, right click, pick Subscribe. Fortunately I have a second PC in my office where I played some videos on http://www.jumpstarttv.com/ while clicked endlessly. (I subscribe to a LOT of podcasts.)

Office 2007 Enterprise – Installed just fine with no problems. Well no software issues, my backup of my main PST was corrupt so I lost most of what was in it (drat). Good lesson here kids, with something really important, make TWO copies on different drives during back up!

Microsoft Virtual PC 2007 SP1 – The only issue I had was with the built in firewall, I had to create a new rule for ANY to allow things other than UDP and TCP to work. Go to Start, Control Panel, System and Security, Windows Firewall, Advanced Settings (over on the left), Inbound Rules (in the new dialog that appears), then I copied one of the existing rules for Virtual PC 2007 SP 1 (there should be 2, one for UDP the other for TCP). In the copy, open it, go to the Protocols and Ports and pick Any. You’ll get an error that says “Edge traversal can’t be set to ‘Defer to User’”, so go to the Advanced tab and pick either “Allow” or “Block”. I picked Allow because I’m very cautious about where I go in my VPCs.

Live Writer – I went to the http://windows.live.com and downloaded the LiveWriter tool, which I’m composing this post in.

Notable mention: I had to copy a little over 3 gig of files, it was fast in Windows 7, took under 3 minutes.

A few things I’ve heard about, but haven’t yet experienced:

I’m told there’s a copy / paste issue between Word 2007 and Live Writer. Haven’t tried it.

I’m told Virtual Clone Drive, which I used in Vista to mount ISOs as virtual drives, won’t work in Windows 7. Instead I had PowerISO recommended to me.

That’s my progress for now, I will update you as time goes by. Remember if you decide to install and use Windows 7, it IS a beta, so your stability may be different depending on the state of your machine’s drivers. I also haven’t decided how long I will run Windows 7. If it’s stable, and some critical pieces of software work (like my VPN software for work) then I may keep it a long time. However if stabiltiy becomes an issue or key software doesn’t run I may have to return to Vista, I will just have to see how it all shakes out. I would like to keep it around for a bit though so I can give it a good shake and let our friends in Redmond know of any issues so they can fix now and perhaps save someone else headaches when it goes to production.

I have also been Twittering my progress using the #win7 tag, if you want to follow me there.

Differencing Disks in Virtual PC 2007

Yesterday I mentioned I was going to get SQL Server 2008 installed in a Virtual PC (VPC). Now, I could have setup a virtual machine from scratch, or copied an existing one. But there’s a better way: differencing disks. Differencing disks allow you to create a virtual machine, then use it as a base for new machines. Much like you would create a base class and then let new classes inherit from your base.

My first step was to create a brand new virtual PC. I chose Windows Server 2003, using the one from my MSDN license. I could also have gone with XP, or the advanced versions of Vista licenses you to install up to four virtual machines in addition to itself as the host. So I get my VPC setup with Windows Server 2003, and make sure all of the windows updates have been applied, service packs, etc. In addition, if there are any additional tools / utilities I’d like to have available for every machine I’ll be wanting create from it I’ll install those as well. I’m thinking of things like UltraEdit / Notepad++, IE7, AllSnap, etc. I finally conclude by shutting down the machine.

Exit Virtual PC, and go to the folder where your virtual PC’s reside. First delete the VMC file (the small one) of your Virtual PC. You won’t need it any more, as you’ll never open this VPC directly. If you did, you would break all the machines that inherit from it. Again, not unlike changing the signature of a base class.

Next, mark the VHD, the hard drive as Read Only. Again this is for your protection, to keep you from doing something accidental to the base. At this point we have our base machine created, and can now make new machines from it.

Launch Virtual PC again. Click on File, Virtual Disk Wizard. You are given a simple dialog that lets you know you’re in the Virtual Disk Wizard. Click Next to move along.

[Picture 1 - Welcome to Virtual Disk Wizard]

Next it asks if we want to create a new disk or edit an existing one. We’ll want to create a new one, so just click Next.

[Picture 2 - Create a new virtual disk]

Now it wants to know what kind of disk to create. We’re doing a hard disk, so just take the default of virtual hard disk and click next.

[Picture 3 - Disk Type]

Now it asks where you want to put your virtual hard disk. I keep mine on my D drive, and use a naming convention. I start with the OS, then the main software I am using. I then use either the word Working, to indicate it’s alright to launch and work in it, or Base, to show the vhd should only be used to inherit from and not be launched. In this case I will be using this as a working area for my SQL Server 2008 CTP6, so I used Working. You are free of course to name it whatever you want, use a name like “Hanselman is cool.vhd” if you like I just prefer something a bit more logical.

[Picture 4 - Disk Location]

OK, this is where you need to pay attention, as this is the first time you’ll need to change a default. Here you are asked what type of virtual hard drive to create. The default is dynamically expanding, and it’s what you’d want to use if you are installing an OS from scratch or are creating a second hard drive for your virtual machine. Fixed size would be used if you are creating a disk for something like a USB drive and want to make sure it won’t get too big. Again, this would be used when you need an empty drive.

In our case we want the third option, Differencing. What this does is tell the Virtual PC application to base the new hard drive on an existing one. From here on out, only the changes you make to the virtual drive will be recorded. This has a lot of benefits. First it saves you disk space, in that you can use the same base with multiple virtual machines. Second, it lets you install the base OS only once, and not have to keep recreating it over and over. Finally, you can create multiple generations of disks. For example, I could create a base of Windows 2003, then another base with Visual Studio added. I could then use that base to inherit from, and create two drives. One could be used with SQL Server 2008, the other with SQL Server 2005. In our case we’re keeping it simple, so pick Differencing and click next.

[Picture 5 - Hard Disk Options]

Next we need to pick the virtual hard drive we want to base our new machine on. In this case I am selecting my Windows Server 2003 core base, and clicking next.

[Picture 6 - Pick Base Hard Drive]

Next we are told it has all the info it needs. All we have to do is click Finish and we’ll have our new Virtual Hard Disk.

[Picture 7 - Complete Disk Creation]

Virtual PC thoughtfully tells us it was successful.

[Picture 8 - Confirmation Message]

OK, we have a new disk, but now we need to tell Virtual PC we want to use it. Back on the Virtual PC Console, Select File, New Virtual Machine Wizard OR click the New… button on the console. Virtual PC has a need to tell us what we just picked, so just click Next.

[Picture 9 - Create Machine Wizard]

This time we are creating a new virtual machine, which will be based on the virtual hard drive we just created, so take the default and click next.

[Picture 10 - Create a machine]

Next we need to give our machine a name. I usually give it the same name as the hard drive, except for the vmc extension. Name yours and click next.

[Picture 11 - Macine name and location]

Now it asks what OS we’ll be using. Note it has automatically detected that I’m using Windows Server 2003, so all I have to do is click next.

[Picture 12 - Confirm Operating System]

Now it asks what my default RAM size will be. I figure 256 MB is a bit small, since I have the ram I upped it to 768 MB. Set yours according to the free space you can spare and click next.

[Picture 13 - Select default amount of memory]

Now we’re asked if we want to use an existing disk or create a new one. Obviously we want to use the differencing one we just created, so click next.

[Picture 14 - Existing Disk or New Disk - We want existing]

Next it asks where our existing drive is, pick it out using the Browse… button or type it in.

[Picture 15 - Pick name of existing disk]

Let me call your attention to the Check Box, “Enable undo disks”. If you leave this unchecked, your virtual machine will behave like a normal computer. Any changes you make are applied and saved. If you check the undo option on, then during your session any changes are written to a temporary file. When you exit the VPC, you are asked if you want to save any changes you made. If you say yes, they will be permanently applied to the virtual machine. If you say no, they are discarded, lost forever. Undo disks are ideal for test situations where you want to run the same changes over and over but not save them. Testing software installs, for example, or in a classroom where you want the students to do labs but not save them.

While Undo Disks can be very helpful, in this situation I don’t really need them as I want to keep all my changes so I will leave this unchecked and click next.

[Picture 16 - Complete Machine Wizard]

OK, we’re at the finish line. All we have to do is click Finish to complete the creation of our new virtual machine.

Let me call your attention to the file sizes of our new machine. Take a look at them in explorer…

[Picture 17 - Explorer snapsho showing small size of vhd]

Note how tiny the vhd file is right now. That’s because it’s based on another drive, where all the OS bits are. As we open it and apply changes (such as installing SQL Server 2008) it will grow in size, but we’ll always be able to save the disk space of the OS as it’s coming from another file.

The down side to differencing disks is speed, because they are in multiple files the performance won’t be as great. Additionally you can’t update the base machine without breaking its descendants. However, differencing disks offer several advantages as well. They save you time, in that you can create a base OS once and use it over and over. As you can see above they can also save you disk space, in that the core OS only takes up space once on your drive and not over and over.

Consider Differencing Disks, and whether they might be appropriate to your development environment.