A: In a VDI implementation, you have many client virtual machines (VMs) running Windows 7 (today) that are typically pooled together. You typically have a very lean environment, with no productivity or business applications installed—normally they're just the OS configured for a VDI environment with a few agent components, such as the Microsoft Application Virtualization (App-V) client. Users connect to this VM and roaming profiles (or other user virtualization tools, such as AppSense) are used to bring down the user's settings. Folder redirection is used for data, and applications are delivered through application virtualization technology, such as App-V.

With App-V 4.6, the cache of the virtualized applications can be on a UNC path, so no cache file is needed on the client OS. This and the factors I discussed earlier mean that the client OS is very basic (meaning easy to manage). If you have 100 client VMs, most of the content will be exactly the same between the VMs, with the only differences being those related to domain membership, machine name, and some general "chatter" change made by Windows 7.

The question, therefore, becomes, "Why can't I create 1 master Windows 7 VHD file and then create 100 differencing disks from it, reducing my disk space needs?" This is completely possible, and if done correctly, a good idea. Basically, all of the main reads for the VMs created with a differencing disk come from the master VHD, while any changes (writes) are written to the differencing disk. The differencing disk will remain fairly small, because the amount of change should be minimal. You're probably looking at around a couple of GBs per differencing disk.


061311-vdi-with-diff-disk-small_0


It's critical that whatever storage holds the master VHD has enough IOPS to support all the VMs that will be performing reads on it. Ideally, it would be on a SAN that would cache the VHD content in memory.

The process would look like the following:

  1. Manage your master VHD, which would be Windows 7, contain approved updates, App-V client and core IT services, have automatic updating disabled, VDI ready configurations made, etc.
  2. Periodically patch the master VHD and perform any other maintenance, then shut it down and copy this master VHD away somewhere (for the next time you need to update it), such as a library.
  3. SYSPREP the original version of the master VHD and place any unattended answer files, making it ready for duplication.
  4. At this point, create lots of child VHDs from this master that would be linked to your VDI VMs. Turn on the child VMs, join the domain, and little else.
  5. Once the VDI VMs are joined to the domain, create a new RDV_Rollback for each client VM. At this point, you're two layers deep in differencing disk: the master -> the child AVHD -> the snapshot AVHD—this setup still gives good performance. Any changes to the VM post the child creation, and SYSPREP would be wiped away at each user logoff by the RDV_Rollback process. Again, this helps keep the differencing disks small.