《巧用 VHD 实现多 Windows 系统共存:从原理到实战》详细讲述了把Windows安装到VHD文件中的方法。将操作系统安装到虚拟硬盘(VHD)文件中是一种极具创新性的解决方案,这种方法不破坏现有系统,不污染文件目录,无需虚拟机监控程序,直接在物理硬件上从VHD文件启动系统,结合了虚拟机的灵活性和物理机性能的优势,为系统管理、测试开发和个人使用带来了诸多便利。今天再说一下使用VHD安装Windows的实际使用场景和详细操作指南。
对于开发人员而言,可以将开发环境搭建在VHD文件之中。待开发环境在VHD文件中安装完毕后,可直接将其分发给其他人员(不要在系统中配置在线账号,避免账号冲突导致在线数据版本混乱或丢失)。其他开发人员只需要使用bcdboot命令,将所获取的VHD文件配置到启动项里,便能迅速拥有一致的开发环境(针对不同的物理硬件,还需安装相应驱动)。若不需要使用该开发环境,只需使用bcdedit命令把新增的启动项删除,就把开发环境从系统中彻底清除,不会对原系统环境造成任何影响与文件污染。
如何把Windows安装在VHD中以及bcdboot命令的使用方法请参考这篇文章《巧用 VHD 实现多 Windows 系统共存:从原理到实战》,下面是使用bcdedit命令删除不需要的启动项,以管理员身份打开PowerShell窗口,执行以下命令:
注意!此操作有风险,操作失误会导致系统无法启动
# 以管理员身份打开PowerShell窗口
# 首先,不带任何参数执行bcdedit命令,查看当前系统中的启动项:
bcdedit
# 在上面的执行结果中,根据device和description字段找到不需要的启动项,
# 复制启动项的标识符字段,随后执行下述命令以删除启动项。需特别留意,标识符需用引号加以引注。
bcdedit /delete "{f2abb16f-3b23-11f0-a908-8c17592a1aab}"
对于测试人员而言,使用VHD能够在同一块硬盘上创建多个独立运行的,具备不同环境、不同版本的Windows系统,进而开展软件兼容性测试。此类测试是基于真实物理机环境进行的,能够精准地测试软件在真实物理机不同环境下的性能表现。值得一提的是,VHD所具有的隔离功能可以有效防止不同环境之间的相互干扰,确保各个系统环境独立运行,为软件测试提供了更加纯粹、可靠的测试环境。
测试人员还可以像使用虚拟机一样,对使用VHD文件构建的系统进行快照和恢复操作。基于某一特定状态,可衍生出多个不同的环境分支,并且能够在这些不同分支之间灵活切换,或是回退至先前的状态,从而实现多版本管理。而这一功能的实现,需借助VHD的差分文件功能。
VHD差分文件(Differencing VHD)是微软虚拟硬盘技术中的一项强大功能,它通过"父子"关系实现磁盘状态的快照保存和恢复。任何VHD文件都可以作为父磁盘,并基于它创建指向它的子磁盘。使用时直接操作子磁盘,但子磁盘不会完整复制父磁盘中的数据,而是采用写时复制(Copy-on-Write)机制:只有当数据需要修改时,系统才会从父磁盘读取对应位置的数据,更新后写入子磁盘,而父磁盘始终保持原始数据不变。这种设计使得父磁盘可以同时为多个子磁盘提供基础数据,或在需要恢复系统时作为纯净状态使用。
在数据读取时,系统会优先检查子磁盘:若目标数据存在于子磁盘中,则直接读取子磁盘的最新数据;若子磁盘中不存在该数据,则自动从父磁盘读取原始数据。这种分层存储机制既保证了数据隔离性,又极大提高了存储效率。
由于采用了写时复制机制,子磁盘仅存储差异数据,所以,基于同一父VHD可快速的创建多个子VHD,每个子VHD初始大小仅有几兆字节。使用差分VHD文件能够节省大量磁盘空间,再结合动态增长机制,在同一磁盘可以配置多个Windows系统,这些系统能够共享剩余的可用存储空间(需确保剩余空间大于虚拟磁盘的逻辑大小,否则系统启动将会失败)。
按照《巧用 VHD 实现多 Windows 系统共存:从原理到实战》创建一个VHD的Windows系统并配置好基本环境,然后就可以使用以下命令进行快照的创建与恢复等操作:
# 1.在C盘根目录创建一个用于存放vhd文件的目录,按照《巧用 VHD 实现多 Windows 系统共存:从原理到实战》安装好初始系统,
# 使用New-VHD创建VHD文件时,把-Fixed参数替换成-Dynamic,以节省存储空间。
# 2.把创建好的VHD文件改名,作为父VHD文件使用,假设在启动项中配置的VHD文件名为win11.vhdx:
Rename-Item win11.vhdx win11parent.vhdx
# 3.创建win11parent.vhdx的子文件,起名为win11child.vhdx
New-VHD -Path win11child.vhdx -ParentPath win11parent.vhdx -Differencing
# 4.现在我们复制一份win11child.vhdx作为启动项使用的文件,此时就可以重启计算机使用差分文件的子系统了。
Copy-Item win11child.vhdx win11.vhdx
# 5.当需要回退时,把正在使用的win11.vdx删除或用Rename-Item改名做备份,然后用第4步命令,把系统恢复成原始状态。
# 6. 对备份的子文件继续做快照,可创建多级差分链:父VHD → 子VHD1 → 子VHD2
# 7.差分文件的层级多了会影响读写速度,这时我们可以进行层级合并,把子文件的数据合并到父文件
# 合并后,-DestinationPath指定的文件,它的所有子文件都将无法使用
Merge-VHD -Path win11child.vhdx -DestinationPath win11parent.vhdx
需要注意的是,使用差分文件的系统要避免使用在线账号,否则会因为状态回退导致账号同步出现问题。例如在父环境中登录了微软账号,在子节点中,使用OneDrive目录保存了一个文件,当回退到父节点时,父节点本地不存在这个文件,在线账号会认为用户把这个文件删除了,然后就会将云端的数据也删除。
VHD差分文件技术将虚拟化的高效性与物理系统的性能完美结合,特别适合需要频繁创建/销毁相似系统的场景。这项技术不仅适用于开发测试人员构建多版本环境,还能为安全研究人员提供隔离的恶意软件分析沙箱,结合BitLocker更可实现加密移动办公方案。在教育培训领域,它能快速创建标准化教学环境;在网吧等公共场所,则可实现系统的秒级恢复。
随着存储技术的进步和虚拟化应用的普及,VHD差分文件技术凭借其灵活高效的特性,正在DevOps、安全研究、移动办公等多个领域展现出越来越高的实用价值,其技术优势和应用前景也将进一步凸显。