Install VHD System
Installing a VHD System
VHD, short for Virtual Hard Disk, is a virtual technology developed by Microsoft. Its primary purpose is for use with Microsoft’s Hyper-V virtual machine, serving as the virtual machine file for installing virtual machines.
You might be wondering: Aren’t virtual machines only about VMWare? Where did Hyper-V suddenly come from?
In reality, VMWare is just one player in the virtual machine market; it’s simply so outstanding that it overshadows other virtual machine solutions. Hyper-V is a virtual machine software developed by Microsoft with functionality similar to VMWare. For Windows 10 Professional systems, this virtual machine comes built-in. However, Windows 10 Home edition does not have this feature.
We don’t actually need to use the Hyper-V virtual machine software, because VHD has a much more important feature: As a physical file, VHD can be used to boot a real physical machine.
Now you might ask: Why can’t the virtual machine files created by VMWare boot a physical machine?
The reason is simple: VMWare wasn’t developed by Microsoft, but VHD was! :)
Features of VHD
As a virtual machine file, VHD has the following characteristics:
1. Single-file format: Unlike VM virtual machines, a VHD file is a single file. That is, one VHD file contains an entire Windows system, various software, hardware, and so on. In contrast, a VM-created virtual machine resides in a folder, and running it requires numerous files within that folder.
2. Differencing capability: This is a crucial feature of VHD systems and one of the main reasons we introduce them. For a VHD file with a system already installed, we can create its differencing child file. This child file is also a VHD file and can boot a virtual machine. It can be thought of as the “child” of the first VHD system. Initially, all files in this child are identical to those in its parent.
However, it’s important to emphasize that this child does not fully copy all the parent’s files (which is evident from the instant creation speed of the differencing file—it’s impossible to instantly copy a file as large as a system). Instead, it uses a method similar to “referencing.” When you check the properties of the child, you’ll see it’s only a few MB at first, but double-clicking to open it reveals all the files inside the parent.
A metaphor can help better understand this parent-child relationship. The parent VHD is a piece of paper completely filled with writing (the writing represents files). The child VHD is a piece of glass placed on top of this paper. Through the glass, we can see all the files in the parent VHD. We can also write on the glass, which corresponds to performing various operations in the child VHD system.
Clearly, writing on the glass (running the child VHD system) has no impact on the parent VHD system (the paper). If we accidentally write a virus on the glass, causing the child VHD system to crash, we can simply discard that piece of glass and replace it with a new one, giving us a fresh system identical to the parent VHD!
This special property leads to the third major feature of VHD systems:
3. Instant backup, instant restore.
Instant backup: For a properly functioning parent VHD system, we can create its differencing child VHD system. From then on, we only use the child and “enshrine” the parent. This is called instant backup.
Instant restore: If the child dies, we delete it and create a new child, effectively restoring the parent VHD system to its original state. However, any files we personally added to the dead child will also be deleted along with it. This is a common drawback of system backups.
4. Creating a differencing system tree: In fact, we can give the parent VHD many children, then create differencing files for the child VHD to form grandchild VHDs, and so on, building a vast VHD family tree. Since each differencing file is just a layer of glass, they initially occupy very little disk space. Leveraging this property, we can create countless differenced systems on our physical machine, as if our computer had countless systems installed.
Many people use this feature to give each family member their own system, all of which are actually differenced subsystems.
However, for safety, I still recommend installing the VHD system inside a VM virtual machine and creating its differencing files there, even if it seems strange—installing a virtual machine inside a virtual machine (Russian nesting dolls) :)
Understanding VHD Systems
At its core, VHD is a file with the extension .vhd or .vhdx. Among these, .vhdx is more advanced, and it’s recommended to use the .vhdx format.
A .vhdx file is essentially a compressed archive that contains all the necessary files for a system. When we open a VHD file, a new partition appears in File Explorer, typically with the drive letter Z:. This means the operating system has attached the VHD file and is treating it as a virtual disk. At this point, opening Disk Management reveals a new disk, which is the VHD virtual disk. We can perform various operations on this virtual disk just like a regular disk. When installing a system, we can directly choose to install the system files onto the VHD virtual disk.
Initial Installation of a VHD System
In VMWare, create a new virtual machine. The steps are the same as before, but instead of directly selecting the system ISO disc, choose to install the operating system later. After creation, edit the virtual machine’s hardware and add the MicroPE ISO image so the new virtual machine can boot from the PE system.
Once inside the PE system, edit the virtual machine settings again and add the Windows 10 ISO image. This completes the initial configuration of the virtual machine.
Installing the VHD System Using WinNTSetup
A key step in installing a VHD system is creating the VHD file. Once the VHD file is successfully configured and mounted as a virtual disk, the remaining steps for installing the operating system are largely similar to the traditional method. First, use DiskGenius to initialize the VM’s virtual disk, allocating an EFI partition and a C: drive partition.
1 | |
Dynamic expansion: Uses only as much space as needed (the virtual disk only grows, never shrinks; deleting files on the virtual disk does not free up space on the physical disk).
Fixed size: Directly occupies 25GB of space.

1 | |
Think about it: Why can’t we choose the EFI partition of the VHD virtual disk as the boot partition?
If we did, our goal would be for the UEFI firmware to scan and recognize this EFI partition. But where is this EFI partition actually located?
That’s right—it’s inside the .vhdx file!
Can we really expect the UEFI firmware to first recognize the .vhdx file, then mount the EFI partition inside it, and then recognize that partition?
UEFI currently does not have this capability.
So, how does a VHD system boot?
This is thanks to the Windows Boot Manager.
Although UEFI cannot read .vhdx files, the Windows Boot Manager can. The essence of this capability is that bootmgfw.efi can read .vhdx files. Through this EFI program, we can achieve VHD booting.
Creating a VHD Differencing Subsystem
Now that the parent VHD system is installed, it’s time to create its descendants!
Many tools can create VHD differencing subsystems. Here, we recommend the lightweight, powerful tool BOOTICE.
Differencing systems must be created within a PE system!
1 | |
A new .vhdx file will appear in the directory you selected. The author named it win10son1.vhdx.

At this point, a child VHD has been successfully created.
Adding a BCD Boot Menu for the Child VHD
Although the child VHD has been created, it lacks a BCD menu to boot it. Therefore, we need to manually create its boot menu.
Steps:
1 | |

This completes the BCD boot file for the child VHD. Now you can restart the virtual machine and check if the Windows Boot Manager menu shows two options.

It’s important to note that after differencing, the parent VHD becomes unusable. That is, we cannot boot the parent VHD system. It’s not that it’s impossible to boot, but if you do, the link between it and its child will break, causing the child to fail to boot normally. Therefore, for safety, we typically remove the parent VHD’s entry from the BCD menu to prevent accidentally booting it and rendering its differencing subsystem invalid.
Similarly, if a child VHD system has its own differencing subsystems, it effectively becomes a “parent” and should not be booted either. Doing so would prevent the grandchild VHD from running.
VHD subsystem files are copyable. So, after obtaining one child VHD using BOOTICE, you can create many copies of it, each of which is a valid child VHD. You can then add a BCD entry for each copy (though this can be tedious). The author once created 10 child VHDs at once, all of which ran perfectly in a VM virtual machine.

Booting into a VHD System
Based on the nature of VHD systems, we can infer some of their characteristics.
1. The .vhdx file of the running VHD system should be read-only within that system.

2. The size of this .vhdx file should display as the maximum size of the VHD virtual hard disk, since it has been virtualized as the system drive. The author’s is 25GB.

3. The parent file of a child VHD should also be read-only within the child VHD system.
Common VHD Issues
Sometimes, due to various reasons, a VHD system may fail to boot properly. Here are some common problems:
1. Scenario: I created one parent VHD and several child VHDs, but some VHD systems boot while others don’t. My BCD file is correct. The error code shows: VHD BOOT HOST VOLUME NOT ENOUGH SPACE.

Cause analysis: This is likely due to improperly shutting down the virtual machine.
During testing, it’s easy to make the mistake of shutting down immediately after seeing the VHD system boot successfully, to proceed with the next test. When shutting down immediately, we often use the “Shut Down Guest” option from the dropdown menu. This action is equivalent to “pulling the plug” on the virtual machine—a forced power-off. This causes a serious problem: the VHD virtual disk is not properly unmounted. As a result, the 25GB .vhdx file seen inside the VHD system actually “becomes” 25GB in size. If shut down normally, the VHD virtual disk is properly unmounted, and the .vhdx file reverts to its actual size (typically a few hundred MB initially, growing with use).
So, if your disk is only 60GB and you always perform a “forced power-off,” after booting two VHD systems, the VM’s disk will already be using 50GB. Booting a third new VHD system still requires 25GB, but only 10GB remains, which is insufficient. Therefore, you need to manually “release” these unmounted VHD virtual disks. The specific method is to boot into a working system or PE system, double-click to open the unmounted VHD virtual disk, and then close it. This completes the unmounting process.
2. Scenario: The VHD subsystem fails to boot.
Analysis: Recall whether you booted the parent system after creating the subsystem. If you did, the subsystem will fail to boot because this breaks the differencing chain.