浅析Win7的虚拟硬盘启动(native VHD boot)

Native VHD boot是Windows 7新加入的一个功能,在中国被称作虚拟硬盘启动,简单的说就是让系统从一个虚拟磁盘VHD文件直接启动而不需要将他安装到安装到物理磁盘中,那么什么系统支持,根据微软官方的解释一下Windows 7 的 专业版、企业版、旗舰版及Windows Server 2008 R2的所有版本均支持此功能。那么在什么情况下我们会用到这个功能呢?比如我们现在已经安装了Windows Server 2008 R2现在需要再安装一套Windows 7而又不想破坏现有的分区结构,那么通过VHD安装就是一个解决问题的捷径,或者我们日常工作需要经常测试一些软件而又不想频繁的因为系统损坏而重新安装系统,VHD的文件恢复系统比Image Backup的方式方便的多。不过虽然Windows 7推出已经有一段时间了,网络上对于VHD启动的讨论也有很多,但对于此功能还是有很多人不理解如何使用,而且对于满屏英文指令和提示的命令行中国人有一种莫名的排斥感,所以本文将会以命令行和纯图形界面2种方式为大家介绍如何使用VHD引导计算机。

使用native VHD boot功能首先要了解几个概念:

提示:对于Windows比较熟悉的朋友可以跳过本章节内容

1. 什么是VHD
VHD文件格式是微软的一种虚拟磁盘文件(Virtual Hard Disk), VHD将整个磁盘的文件打包成单个文件存放在宿主机器的磁盘里,这个格式常被用在Virual PC和Hyper-V等虚拟机中,由于微软从Windows 7开始原生支持虚拟化技术,所以可以将此文件挂载到物理机中使用,这也是实现native VHD boot的基础。而且VHD文件还支持差分功能,比如我们需要创建2块以上的虚拟硬盘,而第2块要存储的内容与第1块有大量的相同数据,那么我们就可以以第一块硬盘为父盘创建一块子盘,子盘只存储与第1块硬盘的差异数据以节省宿主机的物理空间。

2.什么是Windows Boot Manager
在NT5.x系统(如WinXP)中启动机器的过程由NT Loader完成,NTLDR文件负责引导并由Boot.ini存储启动设置数据,由于Boot.ini文件是以纯文本形式存储的,所以修改起来很容易,但是功能也较为简单。
从Vista开始WinNT版本号升级到6.x,引导程序也由功能更加强大的Windows Boot Manager接管,Windows Boot Manager的引导文件为bootmgr,而启动设置数据文件也由boot.ini更改为BCD,而BCD这个文件为了储存更多的信息也放弃了使用纯文本形式的方法,所以我们只能使用BCDEdit程序对这个文件进行编辑。

3.什么是WIM文件
WIM即Windows Imaging File Format,是微软定义的一种镜像格式,比起传统的基于磁盘的镜像方式,WIM是以文件流+特征码的方式存储,所以对目标原磁盘和目标磁盘的文件格式都是不可知的,所以我们可以把这种文件用来安装操作系统,而不会对原磁盘格式或文件造成破坏,在NTFS文件系统中WIM还可以挂载到一个文件夹当中实现离线修改,当然这并不在文本的讨论范围,大家只要了解从Vista以上的操作系统安装光盘都是以此格式存储原始安装文件的。

5.什么是Command Prompt
Command Prompt被称作命令提示行,是包含在Windows之中的一个纯指令操作的程序,其命令语法与DOS类似,但其实Command Prompt是纯32位程序与DOS毫无关系,DOS程序也不能运行在Command Prompt之上,在本文中如果您使用的是WinPE系统,启动后会自动进入Command Prompt,如果您使用的是Windows7或Windows Server 2008 R2系统可以在搜索栏输入cmd,运行搜索到的程序即可。

需要准备的工具

1.Windows 7或 Windows Server 2008 R2的安装包 INSTALL.WIM文件,此文件包含在Windows的安装光盘中;
2.ImageX程序,此文件包含在Windows® AIK for Windows® 7中,或在网络上下载;
3.需要用到的几个命令行程序: Diskpart.exe bcdboot.exe bcdedit.exe 这几个文件包含在Windows 7或 Windows server 2008 r2的System32目录中;
4.如果你想在图形界面里进行操作还需要ImageX GUI程序,此程序可以在 AutoIt Script 的 GImageX主页下载到;

操作步骤 Step-by-Step

 

命令行方式:

建立VHD文件
  1. 首先运行CMD.exe 进入命令提示行
  2. 输入 diskpart
  3. 输入 cre vdi file=d:system.vhd maximum=50000 type=expandable
  4. 输入 sel vdi file=d:system.vhd
  5. 输入  atta vdi
  6. 输入 cre par pri    
  7. 输入 for quick label=win7
  8. 输入 ass letter=r
  9. 输入 exit
注入Windows安装文件
  1. 先将下载到的ImageX文件解压缩到%SystemRoot%目录
  2. 输入 cd <wim文件完整路径>
  3. 输入 imagex /info <wim文件名> 查看一下文件信息,确定我们需要使用镜像的index号码
  4. 输入 imagex /apply <wim文件名> <index号码> r:
写入启动信息
  1. 输入 bcdboot r:windows 将启动信息写入到Windows Boot Manager中以实现启动
  2. 输入 bcdedit /set {default} description "native VHD boot" 将我们刚才建立的启动项显示为native VHD boot
  3. 输入 bcdedit /default {current}  将默认启动项改回当前系统 (如果想默认使用VHD系统请跳过此步)

至此VHD启动设置已经完成,重启计算机后将会显示引导选择菜单,选择native VHD boot项即可进入VHD中系统的安装程序完成后续安装步骤,如果觉得启动菜单的时间太长还可以使用bcdedit /timeout <时间> 命令修改,时间单位为"秒"。

图形界面方式:

建立VHD文件
  1. 在开始菜单输入 diskmgmt.msc 打开磁盘管理工具
    image
  2. 在菜单中选择动作-创建VHD
    image
  3. 在位置输入d:system.vhd,虚拟盘大小输入:50000MB,点击确定
    image
  4. 在新建的磁盘中点击右键选择初始化磁盘,点击完成
    image
  5. 在磁盘中的未分配空间处点右键选择新建简单卷
    image
  6. 一直点 下一步 直到完成
注入Windows安装文件
  1. 启动ImageX GUI
  2. 切换到Apply标签,Source填你的WIM文件路径,Destination填你刚才建立的分区盘符
    image
  3. 点击 Select 按钮选择你需要的镜像
    image
  4. 点击Apply开始注入文件,直到100%完成之后关闭窗口及程序
    image
写入启动信息
  1. 在开始菜单中点击运行,如果没有运行选项请按键盘上的Windows+R快捷键
  2. 输入 bcdboot <新区盘符>windows 将启动信息写入到Windows Boot Manager中以实现启动
  3. 输入 bcdedit /set {default} description "native VHD boot" 将我们刚才建立的启动项显示为native VHD boot
  4. 输入 bcdedit /default {current}  将默认启动项改回当前系统 (如果想默认使用VHD系统请跳过此步)

重新启动计算机后选择native VHD boot 继续安装步骤即可。

可能遇到的问题 FAQ

  1. BCDboot命令提示错误:BFSVC: Failed to open handle to resume object. Status = [c0000034]:
    这个问题大多是因为你使用的WIM镜像是损坏的,其中不含有VHD启动必须的文件,可能这个镜像自身并不是Windows 7或Windows Server 2008 R2版本,或者被人修改过。使用Windows 7或Windows Server 2008 R2的官方安装光盘中的WIM镜像即可避免这个错误。
  2. 重新启动后蓝屏并收到错误信息The volume that hosts the VHD does not have enough free space to expand the VHD:
    这错误是因为你的VHD文件所存放的宿主盘空间不足,而导致无法成功展开VHD文件,根据微软官方的解释,如果你要使用native VHD boot功能您的宿主盘至少要存在2个分区,一个用来存放环境引导文件和启动信息,一个用来存放VHD文件。而存放VHD文件的分区空闲容量至少为VHD文件设置的最大空间和页面文件大小之和。
  3. 系统安装步骤过后进入系统时蓝屏:
    这个问题大多时候是由硬件引起的,你计算机上的某些部件可能与native VHD boot和Windows 7的硬件需求不兼容。
  4. 建立VHD文件时提示错误DiskPart has encountered an error
    VHD文件存放磁盘格式必须为NTFS格式,并且不能开启磁盘压缩,如果使用FIXED类型,磁盘的空闲空间不能小于MAXIMUM的值,否则就会报错。当然如果你使用的是EXPANDABLE类型,而磁盘空闲空间不足时虽然可以建立当仍然无法顺利启动,请参见问题2。
  5. 虚拟机上使用过的VHD是否还能用在native VHD boot当中:
    理论上来说虚拟机的VHD文件是可以直接挂载到物理机中使用的,但是由于硬件环境不同在使用前必须使用sysprep对系统作通用化处理,否则无法启动机器。
  6. 启动后提示“此版本不支持从 VHD 启动”
    对于Windows 7 只有 专业版、企业版、旗舰版可以进行native VHD boot,如果你使用的是家庭版等其他版本就会收到这个错误。
  7. VHD启动是否能使用物理机的硬件资源
    VHD启动是在系统底层使用加载虚拟盘驱动实现的,这和物理盘的工作方式几乎相同,所以native VHD boot使用的硬件资源全部来自物理机,而不需要虚拟化支持,即使CPU不支持VT功能也可以正常使用,而且驱动对硬件I/O的消耗比物理硬盘进高出一点,所以VHD启动对系统速度不会有影响。
    通过下面这张64K顺序读取的测试结果图可以看出物理盘和VHD的速度差异基本可以忽略不计。
    image
LiveJournal Tags: ,,

  1. 发表评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Connecting to %s

加关注

Get every new post delivered to your Inbox.