跳转至主要内容

晴雨技术笔记

Windows 从 VHD 启动

杏川铭心 杏川铭心
最后编辑于 2026年2月8日

好吧这最后一篇文章也是拖了十分长的时间

熟悉 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 的大小、类型、以及属性。注意类型一定要选择“固定大小”,以前玩过虚拟机的更要注意,不要出于习惯选择“动态扩展”。因为在启动系统的时候动态扩展的 VHD 会自动膨胀到最大大小,不但不能节省空间,还会降低效率和成功率。

老一点的系统对格式没有要求,如果希望在这上面启动 Windows 10 及以上的系统则必须使用 VHDX。

选择 VHD 的属性。

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

新创建的 VHD 还没有初始化。

初始化 VHD 以用于安装操作系统。

最后创建一个和 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 拷到你要操作的设备上再继续。

在磁盘管理中分离 VHD。

使用 diskpart 的话则可以这样操作:

select vdisk file=E:\os.vhdx
detach vdisk

创建启动文件

在当前设备上操作

和标准的 Windows 启动文件创建的流程是一样的,就一行命令:

V:\Windows\System32\bcdboot.exe V:\Windows

注意这个命令运行之后会把 VHD 里的系统设置为第一启动项,如果仍希望默认启动本地系统别忘了改回来:

bcdboot C:\Windows

重启就可以看见启动项了。

从 VHD 中启动系统。

在新设备上操作

如果是新设备的话需要看情况,如果是没那么新的,已经装了 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 也删掉就可以了。

删完不要忘记勾选“使所有引导设置成为永久设置”。

删除 VHD 的启动项。

  • 特别提醒:

    评论看到就会回,但是不保证速度,有的时候站长忘记看的话就会出现审核好几天也没有动静的情况……

    如果等不及的话,可以加QQ,同样看到就会通过!

杏川铭心
杏川铭心

QQ: 3146654817,欢迎友好交流 :P 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

Previous Post

SideStore 刷新不了 NSCocoaErrorDomain 

Next Post

No newer posts

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注