我长期采用 vhdx 虚拟磁盘方案实现 Windows 双系统隔离:在物理磁盘安装基础 Windows 系统,然后创建 vhdx 虚拟磁盘作为工作系统载体,将专业软件和工作环境完全隔离在虚拟磁盘中。这种架构完美实现了工作与生活的系统级隔离。
近期基础系统出现故障需要重装,这促使我思考:为何不将基础系统也迁移到 vhdx 中?让物理磁盘仅作为数据存储载体,而两个系统都运行在虚拟磁盘上,这样不仅管理更统一,还能获得更好的灵活性。
虽然部分技术文档声称必须保留物理磁盘上的可启动系统才能引导 vhdx,但经过实际验证,纯 vhdx 启动方案完全可行,这为系统管理提供了全新的可能性。
安装流程
- 有一块物理磁盘,磁盘必须为 GPT 分区表,存在至少一个用于放置 vhdx 文件的 NTFS 分区(盘符最好设为 D:),以及一个 EFI 分区。
- 在 NTFS 分区上使用 diskpart 创建一个虚拟磁盘。
|
|
maximum 表示创建 256G 虚拟磁盘,type 表示按需分配空间。
- 装载虚拟磁盘
windows1.vhdx
,并使用 dism++ 在虚拟磁盘上安装系统,格式化并添加引导。
- 重启自动进入这个虚拟磁盘上的系统,初始化、安装驱动、配置系统。
- 将这个磁盘复制一份,假设为
windows2.vhdx
,用于做第二个系统。 - 使用 bootice 将第二块虚拟磁盘添加到引导,测试启动。
- 在两个系统上装不同的环境、软件等。
以上流程相对简单,且容易理解,但其实我们也可以使用差分 vhdx 的方式来节省磁盘空间。
1、2、3、4 与前文相同。
- 将这个虚拟磁盘添加_00 后缀,假设为
windows_00.vhdx
,这是个已经完成各项系统配置、驱动安装的基础磁盘。 - 创建两个 vhdx 差分,分别用作不同用途的系统磁盘。
|
|
- 使用 bootice 修改引导为这两个磁盘,启动测试。
- 在两个系统上装不同的环境、软件等。
这种方式复用了首次创建的虚拟磁盘,可以节省一些存储空间,并且重装系统只需要删除差分然后重新创建差分硬盘即可,非常方便。但这种方式有一定操作难度,小白请勿轻易尝试。
压缩磁盘空间
虚拟磁盘都有个特性,随着使用量的增加,磁盘会越来越大,即便是在磁盘中删除文件,也不会使得磁盘变小。
可以通过 diskpart 工具来为 vhdx 瘦身。
|
|
类比一下,挺简单的。
注意事项
-
当你在某个虚拟磁盘系统中时,不要尝试使用 diskpart 等工具操作这块虚拟磁盘,可能会出问题。不过可以操作其他非当前系统/未使用的虚拟磁盘。
-
vhdx 在启动时,默认会将磁盘临时扩展为空间大小,可以在 dism++ 中取消这一功能,取消后磁盘性能会有所下降。
关于磁盘性能损失
总有人想当然地觉得 vhdx 启动会有很大的磁盘 IO 性能损失,理论上讲,vhdx 只是从磁盘上划了一部分连续的空间作为虚拟磁盘使用,而读写这段连续的空间与直接读写物理磁盘,理论上也不会有太大的差距。
不过,事实胜于雄辩,我自行测试了一下,仅供参考:
实验环境:机械革命翼龙 15pro,硬盘为长江存储 YMTC PC411-1TB-B,已在 dism++ 中关闭了 vhd 扩展,这会对 IO 性能有一定影响。
第一张图是 vhdx 磁盘测试,第二张图是物理磁盘测试,可以看到,4K 性能影响比较大,而顺序读写性能几乎没有影响。
总结
根据网友的评论总结了一下这一方案的优缺点:
- 备份/恢复/部署快:复制 vhdx 文件即备份/恢复/部署,速率可达到硬盘读写上限。
- vhdx 即 all:虚拟机 VMware、hyper 和物理机可以使用同一个 vhdx 文件,甚至多个虚拟机共用一个 vhdx,物理启动 vhdx 除了磁盘 IO 外,没有性能损失。
- 系统洁癖。磁盘内就只有 vhdx 和资料文件了,不会有零碎的系统文件。
缺点也是很明显的:
- 操作难度大,安装步骤与常见方法不同。
- 硬盘的写入量可能会大幅度增加。
- 两个系统公用的文件可能会存在一些权限问题。
感谢大家的讨论,没有一项技术能说 100% 的完美,选择自己适合的方案就好。