It is possible to convert a dynamic virtual hard disk (VHD) to a fixed size VHD. I found myself doing this when I needed to migrate a machine from an R&D environment to production. Note that the VM (if the disk is attached to a VM) must be powered off to do this.
If you use Hyper-V without Virtual Machine Manager 2008 then you can do this using the Hyper-V console. Edit the virtual machine in question (if applicable), select the disk and click on <EDIT>. Choose to convert the disk. You’ll then be asked where to place the new disk. Be wary here if you use dedicated volumes for each VM, e.g. in a Windows 2008 cluster. There may not be enough disk space in the existing disks volume for the new fixed sized disk that will be created – that’s correct; it doesn’t convert the disk, it creates a new one. Choose a suitable temporary location and name. For example, my VHD might be called Disk0.VHD and I’d convert to Disk0Full.vhd. When finished, I’d rename them, e.g. Disk0.VHD -> DiskDyn.VHD and Disk0Full.VHD -> Disk0.VHD. Swap the files and then restart the VM.
It’s both easier and more complex using VMM. You can select the VM in question and select the disk. Tick the box for "Convert to Fixed Type Virtual Hard Disk" and apply the changes. A new job will start. This creates a new VHD in the same volume as the existing VM. That’s a bit nasty. You tend to limit the size of the LUN in question to avoid wastage when using a cluster. So odds are, this will fail unless you’ve plenty of spare space in the LUN – remember the LUN will contain both the original dynamic disk and the converted fixed size disk for at least a short period of time. Temporarily increasing and decreasing the volume size should not be done, even if your SAN can do it … my testing phase showed that it corrupts the contents of the volume. The nice bit of this process is that all the file renaming and swapping is done for you. I just wish you could pick a temporary location for the file conversion process. That might be possible using PowerShell.