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 https://github.com/ventoy/vhdiso/releases
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 exFAT partition in theory (NTFS is still recommended).
    You can refer to: http://bbs.c3.wuyou.net/forum.php?mod=viewthread&tid=414354&mobile=no
  6. Better to use traditional method to confirm that the VHD(x) file can be booted normally before use Ventoy to boot it.

  • Why not out-of-box support

This feature was not integrated by Ventoy. The main considerations are:
1. bootmgr, etfsboot.com ... 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 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"
    else
        echo "$my_vhd_path not found"
    fi
}

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"