Windows VHD Boot Plugin

Ventoy use this plugin to boot VHD(x) files with Windows 7+ in it.
Both Legacy BIOS and UEFI are supported. Both fixed and dynamic VHD(x) are supported.

  • How to use

Download ventoy_vhdboot.img file from
Put the file under ventoy directory in the ventoy partition of the USB stick, that is /ventoy/ventoy_vhdboot.img and that's all.

  • Attention

  1. There is some compatibility problem in bootmgr, so I provide different versions ventoy_vhdboot.img for you to test.
  2. Put the file in ventoy partition which hold the ISO files, don't put it in the 32MB VTOYEFI partition.
  3. You need to create the ventoy directory manually, because there is no such directory by default.
  4. For Windows 10 v1803 and previous versions, the partition storing VHD(X) files must be formatted as NTFS file system.
  5. For Windows 10 v1809+, in addition to NTFS, VHD(X) files can also be stored in the exFAT partition.
    You can refer to: or:
    Generally, the hard disk is recommended to use NTFS format, the USB drive is recommended to use exFAT format.
  6. Better to use traditional method to confirm that the VHD(x) file can be booted normally before use Ventoy to boot it.
  7. In UEFI mode, only 64 bit Windows is supported, 32 bit is NOT supported.

  • Why not out-of-box support

This feature was not integrated by Ventoy. The main considerations are:
1. bootmgr, ... These files in ventoy_vhdboot.img are NOT open source, they are directly extracted from Windows ISO file.
2. Easy to update ventoy_vhdboot.img separately
3. Easy to customize ventoy_vhdboot.img

  • Boot Windows VHD(x) at local disk by Ventoy

The manual above is for copy the VHD(x) file to the USB drive and boot with Ventoy. You can also boot a VHD(x) file in local disk by Ventoy.

Method 1
Please refer Boot Image Files In Local Disk

Method 2
You can also use a custom boot menu to boot the VHD(x) file at local disk by Ventoy.
Please refer Menu Extension Plugin for details about the custom boot menu.

Add a menu like follows to ventoy_grub.cfg, only need to change my_vhd_path to the absolute path of the actual file (from the root of that partition).

menuentry "Boot My Windows VHD" {    
    set my_vhd_path="/VhdDir/Win10.vhd"
    if search -n -s vdiskhd -f "$my_vhd_path"; then
        vhdboot_common_func "($vdiskhd)$my_vhd_path"
        echo "$my_vhd_path not found"

In this example, my_vhd_path is set to /VhdDir/Win10.vhd you can change it to your customized path (e.g. set my_vhd_path="/images/Win10H2.vhdx").
You don't need to specify which HD the file is on. It will use search command to enumerate all the HDs to find the file.
Attention that the following formats are INVALID:
set my_vhd_path="(hd1,1)/VhdDir/Win10.vhd"
set my_vhd_path="E:\VhdDir\Win10.vhd"
set my_vhd_path="\VhdDir\Win10.vhd"