
Windows 从 VHD 启动
好吧这最后一篇文章也是拖了十分长的时间
熟悉 Hyper-V 的小伙伴应该对 VHD/VHDX 这种文件格式不陌生,它是 Hyper-V 虚拟机所使用的虚拟硬盘格式。但 VHD/VHDX 并不仅仅是虚拟机的硬盘,微软官方给 VHD(后面我就只写 VHD 了哦,太累了)的定位其实是虚拟硬盘。对,就是差了一个“机”字,也就是说 VHD 其实是有虚拟机以外的用处的。
在这些用处当中,有一条就是用来启动系统。当然不是启动虚拟机,是在真实的硬件上,直接从 VHD 启动 Windows 系统,全程不需要任何虚拟机监控程序或者是宿主 OS。
这种方式的好处在于可以像管理虚拟机一样管理真实的系统,如果要对系统进行备份、分发等等操作,只需要把 VHD 拷走,不用费时费力生成 Windows 或全盘镜像。此外,由于创建 VHD 不需要修改实际的分区结构,用来做无痛双系统也是可以的。
目录
准备 VHD
第一个问题很快就横在我们面前了:电脑上根本没有 Hyper-V 角色怎么办?
当然了如果你真的理解了上面那段话的话那么你大概也能猜到 VHD 的管理根本不依赖于 Hyper-V 角色,我们这里打开磁盘管理(diskmgmt.msc)。
接下来点击“操作”,然后点击“创建 VHD”。

接下来选择 VHD 的大小、类型、以及属性。注意类型一定要选择“固定大小”,以前玩过虚拟机的更要注意,不要出于习惯选择“动态扩展”。因为在启动系统的时候动态扩展的 VHD 会自动膨胀到最大大小,不但不能节省空间,还会降低效率和成功率。
老一点的系统对格式没有要求,如果希望在这上面启动 Windows 10 及以上的系统则必须使用 VHDX。

创建好的 VHD 会自动附加到系统上。新创建的 VHD 是没有分区表的,需要先初始化,一般初始化为 GUID 分区表(GPT)格式就行。(注意这个 GPT 和聊天机器人没有关系。)


最后创建一个和 VHD 一样大的分区,格式化一下,VHD 就算准备好了。
另外如果你喜欢命令行,那么下面是使用 diskpart 的操作:
create vdisk file=E:\os.vhdx maximum=40960 type=fixed
attach vdisk
convert gpt
create partition primary
format fs=ntfs quick
assign letter=V注意最后一行,我们这里把 VHD 的盘符设置为 V(取 Virtual 之意),后续操作中我们会假设虚拟磁盘就是这个盘符。
另外 VHD 启动和你已有的系统是共用 EFI 分区的,VHD 中无需创建 EFI 分区。
释放 Windows 映像
首先我们需要准备一个 Windows 映像。为什么是映像而不是镜像呢,因为我们只需要 install.wim 就可以了,虽然相比于完整的 ISO 省不了多少空间(。・ω・。)
有了映像之后就可以直接释放到 VHD 里面(注意要以管理员身份运行命令提示符):
dism /Apply-Image /ImageFile:E:\install.wim /Index:3 /ApplyDir:V:\上面的例子里使用的是官方的 Windows 11 25H2 镜像,其中 3 号分卷是专业版。(资源下载 里面有 Windows 11 的 ISO 文件。)
释放完之后,如果你要做 VHD 启动的就是本地设备,那么直接往下做就行。如果不是,那么请先把 VHD 分离,然后把 VHD 拷到你要操作的设备上再继续。

使用 diskpart 的话则可以这样操作:
select vdisk file=E:\os.vhdx
detach vdisk创建启动文件
在当前设备上操作
和标准的 Windows 启动文件创建的流程是一样的,就一行命令:
V:\Windows\System32\bcdboot.exe V:\Windows注意这个命令运行之后会把 VHD 里的系统设置为第一启动项,如果仍希望默认启动本地系统别忘了改回来:
bcdboot C:\Windows重启就可以看见启动项了。

在新设备上操作
如果是新设备的话需要看情况,如果是没那么新的,已经装了 Windows 的,那么和直接在自己设备上操作是一样的。
如果是非常非常新的设备,没有安装过系统,那么需要先启动到 Windows PE,然后再进行下面的操作:
这里我们假设你用的是那个微软官方只有一个 CMD 的 PE,第三方 PE 可能会有更简便的操作,这里不讨论。
首先准备本地的硬盘:
select disk 0
clean
convert gpt创建 EFI 和系统分区:
create partition efi size=300
format fs=fat32 quick
assign letter=E
rem == 下面的是微软保留分区,在 Windows 11 时代用处已经很小,可以不创建 ==
create partition msr size=100
create partition primary
format fs=ntfs quick
assign letter=S
exit接下来把我们的 VHD 拷到系统分区里,也就是 S 盘。怎么拷请随意,微软的方法是用了 SMB 共享,用个 U 盘啥的也是可以的。
后续的流程就和普通的系统一样了,附加 VHD(不要手贱把 VHD 格式化了就行),分配盘符,最后用 bcdboot 创建启动文件。
注意创建启动文件的时候,因为不是从本地而是从 PE U 盘启动的,需要指定 EFI 分区,不然会把启动文件复制到你的 PE U 盘里面。
V:\Windows\System32\bcdboot.exe V:\Windows /s E: /f UEFI常见问题
其实也没什么常见问题的说……
能不能从嵌套的 VHD 里启动
不能,但这里的不能指的是对于目前系统而言的嵌套,如果你是虚拟机里面有一个 VHD 是不受影响的。此时的 VHD 对于虚拟机来说就是物理硬盘,没有嵌套的问题。
启动不了
除了刚刚的嵌套问题外,如果你选择了动态扩展的 VHD,那请确保你存放 VHD 的硬盘有足够的空间。如果分区空间小于 VHD 的最大大小是会启动失败的。(这也是为什么推荐用固定大小)
不想用了怎么办
直接去 msconfig.exe 里把启动项删除,然后把 VHD 也删掉就可以了。
删完不要忘记勾选“使所有引导设置成为永久设置”。


