本文介绍的是 disk2vhd 软件的应用。关于如何从现实世界进入矩阵,详见“黑客帝国”。
(我承认上一行文字是仿 Wikipedia 的……)

一、为什么要从现实到虚拟

你是否曾使用过虚拟机?你是否曾觉得虚拟机里的世界那么“不真实”?缺少了常用软件的支撑、让人郁闷的默认设置……没有了熟悉的环境,虚拟机用着是如此的不爽。

你是否曾使用过类似“影子系统”的软件?这种“软件还原卡”几乎可以让 Windows 变成“打不死的小强”,但是天生折腾心理让你需要装多系统,需要调整启动文件:重启后无法引导怎么办?这可不是影子系统能帮你的了。Symantec Ghost?拜托,杀鸡焉用牛刀?

正是由于包括但不仅限于以上的种种原因,我们需要一款软件,能将现实中的操作系统(主要指 Windows 家族)复制一份到虚拟机里。其实就是把当前的内容灌到一个 vhd 文件里。

Update: 补充一句,虚拟机里是运行不了 Ghost 的,所以使用 Ghost 是无法“从现实到虚拟”的。

二、准备

工具软件方面,只需要一个,那就是 disk2vhd。这是 Sysinternals Suite 中的一个小软件。这个 Sysinternals 公司成立于 1996 年,专门出各种各样的用于 Windows 调教管理监察的免费小工具。十年后的 2006 年,微软看上了它的实力,就把它买下来了。现在它们的大部分工具(除了某些,比如恢复 Windows 密码的 NT Locksmith 软件)都可以在微软的 TechNet 上下载到

操作系统方面,必须要是 XP(NT 5.2) 或以上的系统,根据它的官方说明,包括 Vista 在内的 NT6 系列也是完全支持的,x64 版本也包括在内。

硬件方面,主要是对磁盘有要求,即你得有一个剩余空间比较大的分区。另外,根据它的说明,如果有两块物理硬盘的话,制作 vhd 的速度会快一些,但是如果只有一块(大部分人只有一块吧),也是没有问题的。根据我的实测,制作一个 10GiB 左右的 vhd,在我的电脑上(2006 年主流配置),大约是 15 分钟的时间。

三、制作

运行 disk2vhd 软件,如图。

在图中可以看到电脑上已经挂载的那些卷,Size 是说卷的容量,Free 是剩余空间的大小,而 Required space 则是说目标 vhd 所需要占用空间的大小。默认是全部选中的,它们将被用来创建一个 vhd 文件,大小将是所有的 Required space 的总和。但是虚拟机里通常只要用到一个系统分区就可以了,所以一般只要勾选系统分区,其它都不要勾选。上面还有一个文本框,是用来指定 vhd 的路径和文件名的。默认应该是保存在剩余空间最大的分区的根目录里,以机器名为文件名。

需要注意的是,就算不勾选后面的数据分区,它们的分区信息也会被囊括在 vhd 文件里,只是分区上没有创建卷(未格式化)而已。

一切确认好之后,就可以点击 Create 开始捕获硬盘并生成 vhd 了。时间不会很长,正如本文之前所说,在 2006 年主流配置的电脑上,一个 10GiB 的 vhd 也不过 15 分钟。

vhd 终于创建完毕了。假设它就是 D:\wzyboy.vhd 吧。

四、关于 VHD

VHD 这种好东西,wzyboy’s blog 之前也做过一些介绍,更详细的可以参见 Wikipedia (zh/en)。它能被大部分虚拟机软件所支持,并且从 Windows 7 开始被原生支持,也就是说 Windows 7 可以被灌装在一个 vhd 里启动了(很像 Ubuntu 等发行版的 Wubi 安装、启动方式,当然,没有 Wubi 那么方便)。

在 Windows 7 里,可以通过自带的磁盘管理工具 diskmgmt.msc 来挂载 vhd。方法见这篇文章的第二节。

不过,有一点要注意,那就是一个 vhd 完全模拟了一个真正的硬盘,它也可以被 Windows Loader 识别,Windows Loader 会分配它一个 GUID。而一旦你用上面的方法挂载了 vhd ,它就会与现在你电脑上已经有的硬盘的 GUID 冲突,所以 Windows 会重新分配一个 GUID 给它,这样之后,vhd 里的 Windows Loader 就不能识别硬盘了,所以这个 vhd 在虚拟机里就会不能启动了。所以,请打消挂载 vhd 然后看看里面有什么东西的念头。或者,你可以在别的电脑上 / 换一块硬盘启动之后再挂载。总之不能有 GUID 相同的物理硬盘 / 虚拟硬盘同时被挂载。

五、在虚拟机里从 vhd 启动

现在该到检验成果的时候了。刚才说了,主流的虚拟机软件都支持 vhd 作为虚拟机的硬盘的,比如被微软收购后变成免费软件的 Virtual PC。不过我个人比较喜欢功能更强大的 Sun VirtualBox。这是一个开源软件。安装好软件之后启动之,按 Ctrl+D 打开虚拟介质管理器,添加刚才创建出来的 D:\wzyboy.vhd,然后再新建一个虚拟机。虚拟机新建向导很友好,这里不再赘述,新建好之后应该是这个样子的:

呃,Snap7 是我给它起的名字。

万事俱备,按下 Start 按钮启动它吧~ 多么熟悉的启动动画……我的启动动画是修改过的,于是我在虚拟机里看到的启动动画也是修改过的……我的登录界面背景也是修改过的……最终我来到了熟悉的桌面……(点击看大图)

两个一模一样的系统并行运行着:(点击看大图)

多么有趣啊。现在你可以随便做什么事情了,虚拟机弄坏了没关系的……

最后稍微提一句虚拟机里的硬盘。打开资源管理器可以看到那些分区都还在,只是没有格式化而已,你可以随意格式化它们……不过大小已经固定了。这牵扯到“分区”(Partition)和“卷”(Volume)的区别,不再跑题了。

六、直接从 vhd 启动?

文章到这里还没有结束。按理说,虚拟机里跑个 Windows 7,只有 512MiB 的 RAM,并且还受到更多的性能限制,应该比较卡吧?但是其实还是挺流畅的(出乎我的意料),反应速度什么的和主机太大区别,估计是 Windows 7 的虚拟化特性比较好吧。但是呢……既然 Windows 7 是支持从 vhd 启动呢,那直接启动它会怎么样呢?

要把 vhd 添加为一个 BCD 里的启动项可比“把大象装冰箱”复杂一些,特别是用命令行工具 bcdedit.exe 的话,好在有一个叫 EasyBCD 的工具解决了这个问题,这篇文章介绍了它的使用方法。

顺利地把 vhd 添加为一个启动项之后,我满怀希望地准备从它启动,但是失败了,在启动动画过后,迎接我的不是登录界面,而是蓝屏……我再试了几次,依然如此。于是我回到 Windows 7 里,把 vhd 挂载,然后重新分配 GUID,再次试图启动……但是依然是蓝屏。

我表示无解。

七、尾声

嗯,这是高考结束后更新的第一篇真正的文章。希望大家喜欢。若要转载,请务必注明出处及链接(详情请见页面底部的 CC 协议)。本文地址:https://wzyboy.im/post/658.html


欢迎留下评论。评论前,请先阅读《隐私声明》。