经常用 VMware 运行虚拟机,一方面是因为有对于其他环境的需求,另一方面是因为虚拟机相对来说较为安全(虽然也有利用漏洞从虚拟机中逃逸的案例,例如前不久的 Pwn2Own 2017),并且快照的功能十分方便。然而,虚拟机在性能、硬件支持等方面也有其弊端。
最近了解到一个在 Windows 中潜藏已久的功能,即创建 VHD 虚拟硬盘。同时 VirtualBox 也支持创建管理 VHD 硬盘,因此便萌生了使用 VirtualBox 在 VHD 中安装系统,并在实体机的启动引导中添加 VHD 的启动项。如此一来便可以用 Windows 原生的启动程序来选择进入的系统了,并且该系统仅存在于 VHD 中,添加方便,删除不留痕迹,还能用 VirtualBox 的快照随时还原,岂不美哉。
0x00 VHD 概述
VHD 是 Microsoft Virtual Hard Disk format(微软虚拟磁盘文件)的简称。就是能够把一个 VHD 文件虚拟成一个硬盘的技术,在其中可以如在真实硬盘中一样操作:读取、写入、创建分区、格式化。实际测量之后会发现,虚拟硬盘的读取速度和实体硬盘的一模一样。
0x01 安装过程
主要有两种方式:
- 通过 VirtualBox 创建使用 VHD 硬盘的虚拟机并安装系统
- 手动创建 VHD 硬盘并使用 ImageX 将系统从镜像中写入 VHD(仅支持 Windows)
使用第一种方式的好处在于可以利用 VirtualBox 的快照功能进行还原。
使用 VirtualBox
打开 VirtualBox。点击 新建 > 专家模式
,设置好名称、内存等选项。
在虚拟硬盘处选择 现在创建虚拟硬盘 > 创建
,设置合适的文件大小:
动态分配
VHD 所占空间会根据所写入的数据量动态伸缩,有利于节省空间固定大小
创建 VHD 文件时将分配所有容量,使用效率相对来说会高一些
创建完毕后,点击 设置 > 存储
,在光驱处选择系统镜像文件并保存,然后点击 启动
。
在 VirtualBox 安装系统,待系统安装完毕将其关闭。
右键 此电脑 > 管理 > 存储
,右键 磁盘管理 > 附加 VHD
,选择刚才在 VirtualBox 中创建的 VHD 文件:
确定后下方会出现我们刚才附加的 VHD 虚拟硬盘,此处的 F 盘即为系统的所在位置:
接下来以管理员身份运行 cmd
,输入以下命令将系统添加至启动项即可:
bcdboot F:\windows
说明:
F 为 VHD 中系统所在分区的驱动器号
最后,在 msconfig
中可以确认该系统已成功添加为启动项:
使用 ImageX
右键 此电脑 > 管理 > 存储
,右键 磁盘管理 > 创建 VHD
:
此时会显示创建的磁盘还未初始化:
右键该磁盘,点击 初始化该磁盘
,确定即可(分区形式取决于所装系统是否支持):
接下来需要对该磁盘进行分区。右键单击空白处,点击 新建简单卷
,然后一直 下一步
即可。
挂载或解压系统镜像。可以用 DAEMON Tools 挂载镜像,也可以用 Winrar 将镜像中的文件解压出来(比较耗时),以下采用挂载镜像的方式。
使用 ImageX 将 sources\install.wim
映像文件中的系统提取至所创建的分区中(该工具非系统自带,需自行下载)。
先使用以下命令查看系统映像里所包含的系统版本。
imagex /info F:\sources\install.wim
说明:
F 为挂载光驱的驱动器号
IMAGE INDEX 为系统版本的索引号
再通过以下命令把安装文件释放到 VHD 磁盘(需以管理员身份运行)。
imagex /apply F:\sources\install.wim 1 E:\
说明:
F:\sources\install.wim 为映像文件所在路径
1 为所选系统的索引号
E:\ 为 VHD 中系统所在分区的驱动器号
写入完成后,以管理员身份运行 cmd
,输入以下命令将系统添加至启动项即可。
bcdboot E:\Windows
0x02 卸载方法
十分方便,两步即可完成:
- 打开
msconfig
,在引导
中将系统的启动项删除 - 删除 VHD 文件
0x03 进阶玩法
参考此帖:http://tieba.baidu.com/p/3328948367
可以总结为以下两种用法:
- 使用
diskpart
创建差分硬盘,实现秒备份、秒恢复 - 实现基于差分硬盘的多系统,彼此隔离的同时节省空间

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。