浅谈基于 VHD 方式在中小型企业内部署 Windows 8的一些思路与方法(2)

投稿人:张笑寒

本篇接“浅谈基于VHD方式在中小型企业内部署Windows 8的一些思路与方法(1)”(下面简称“思路1”),主要简绍关于如何在NT5、或无引导的系统中部署安装 基于VHD启动技术的windows 8。里面涉及到“思路1”的一些技术细节,本篇不再叙述。建议读者在阅读本文前先查看笔者的“思路1”。地址:https://blogs.technet.com/b/chinatechnet/archive/2013/07/04/vhd-windows-8-1.aspx

5.3 系统启动为NT5的引导,如何升级到NT6引导

      企业内很多计算机安装的操作系统为微软公司经典的Windows XP。对于这部分PC来说,要部署基于VHD的windows 8,最大的问题是安装Windows XP操作系统时,所安装的基于NT5的NTLDR引导程序。这个启动器没有VHD驱动,不支持VHD启动。故解决方法:升级引导到NT6引导程序,以支持VHD的启动。要注意,大多数使用中的Windows XP系统是32位。大多使用中的Windows 7/8系统是64位。所以,XP下使用Windows 8镜像内的工具,会有平台问题。需要对应版本的工具来解决。

      5.3.1 升级的要点有2项:

           1.     MBR内的引导
           2.     升级启动分区内的引导器bootmgr及配套BCD文件

      5.3.2 需要的工具

      升级MBR、升级启动器等文件及编辑BCD需要用到高版本的Windows工具,分别是:

           1.     bootsect.exe
           2.     boot目录及bootmgr文件[ii]
           3.     bcdedit.exe[iii]”。

      由于这些工具属于NT6内核系统新增工具及文件,所以给windows XP部署基于VHD启动的Windows 8前,需要准备好以上对应平台的工具。文件位置及工具下载,笔者于文章结尾处提供。

      5.3.3 工具的注意事项

      所有工具中,属第二步的文件获取最是麻烦。这里笔者采取的方法是:新机无分区无引导安装基于VHD启动的Windows 8(接下来会简绍到),然后提取文件。

 

图为笔者提取的“基于64位企业版本Windows 8”的引导相关文件

      提取后,BCD内有已安装的系统启动项及恢复休眠启动项等信息。BCD内容如下:

Windows 启动管理器
--------------------

标识符                 {bootmgr}
device                  unknown
description             Windows Boot Manager
locale                  zh-CN
inherit                 {globalsettings}
default                 {default}

resumeobject           {babb93c9-8d56-11e2-9bb0-000c29af17d0}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows 启动加载器
-------------------

标识符                 {default}
device                  unknown
path                    \Windows\system32\winload.exe
description             Windows 8
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence        {babb93cb-8d56-11e2-9bb0-000c29af17d0}
recoveryenabled         Yes
custom:17000077         352321653
osdevice                unknown
systemroot              \Windows

resumeobject           {babb93c9-8d56-11e2-9bb0-000c29af17d0}
nx                      OptIn
custom:250000c2         1

Windows 启动加载器
-------------------

标识符                 {babb93cb-8d56-11e2-9bb0-000c29af17d0}

从休眠状态恢复
---------------------

标识符                 {babb93c9-8d56-11e2-9bb0-000c29af17d0}
device                  unknown
path                    \Windows\system32\winresume.exe
description             Windows Resume Application
locale                  zh-CN
inherit                 {resumeloadersettings}
recoverysequence        {babb93cb-8d56-11e2-9bb0-000c29af17d0}
recoveryenabled         Yes
custom:17000077         352321653
filedevice              unknown
filepath                \hiberfil.sys
custom:25000008         1
debugoptionenabled      No

Windows 内存测试程序
---------------------

标识符                 {memdiag}
device                  unknown
path                    \boot\memtest.exe
description             Windows 内存诊断
locale                  zh-CN
inherit                 {globalsettings}
badmemoryaccess         Yes

EMS 设置
------------

标识符                 {emssettings}
bootems                 No

调试器设置
-----------------

标识符                 {dbgsettings}
debugtype               Serial
debugport               1
baudrate                115200

RAM 故障
-----------

标识符                 {badmemory}

全局设置
---------------

标识符                 {globalsettings}
inherit                 {dbgsettings}
                        {emssettings}
                        {badmemory}

启动加载器设置
--------------------
标识符                  {bootloadersettings}
inherit                 {globalsettings}
                        {hypervisorsettings}

虚拟机监控程序设置
-------------------

标识符                 {hypervisorsettings}
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

恢复加载器设置
----------------------

标识符                 {resumeloadersettings}
inherit                 {globalsettings}

设备选项
--------------

标识符                 {babb93cc-8d56-11e2-9bb0-000c29af17d0}
description             Windows Recovery
ramdisksdidevice        unknown

ramdisksdipath         \Recovery\babb93cb-8d56-11e2-9bb0-000c29af17d0\boot.sdi

      可以看到,对于我们给其他计算机部署基于VHD启动的windows 8来说,很多项是多余的。这里笔者对该BCD多余的项使用做出删除。修改后BCD内容如下:

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  unknown
description             Windows Boot Manager
locale                  zh-CN
inherit                 {globalsettings}
toolsdisplayorder       {memdiag}
timeout                 30

Windows 内存测试程序
---------------------

标识符                 {memdiag}
device                  unknown
path                    \boot\memtest.exe
description             Windows 内存诊断
locale                  zh-CN
inherit                 {globalsettings}
badmemoryaccess         Yes

EMS 设置
------------

标识符                 {emssettings}
bootems                 No

调试器设置
-----------------

标识符                 {dbgsettings}
debugtype               Serial
debugport               1
baudrate                115200

RAM 故障
-----------
标识符                  {badmemory}

全局设置
---------------

标识符                 {globalsettings}
inherit                 {dbgsettings}
                        {emssettings}
                        {badmemory}

启动加载器设置
--------------------

标识符                 {bootloadersettings}
inherit                 {globalsettings}
                        {hypervisorsettings}

虚拟机监控程序设置
-------------------

标识符                 {hypervisorsettings}
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

恢复加载器设置
----------------------

标识符                 {resumeloadersettings}
inherit                 {globalsettings}

      修改与未修改的BCD及配套启动文件于文章结尾处提供下载,读者可直接下载使用。本文笔者使用修改好的BCD启动项文件。演示使用虚拟机,虚拟机操作系统使用32位windows XP,硬盘分区2个。其中分区C为系统及启动分区,分区D为工具及VHD系统文件存放分区

      5.3.4 MBR内的引导升级

 
图为使用工具bootsect。这里笔者偷懒直接使用ALL参数,使NT60的主引导信息写入本机分区及磁盘MBR。至此,MBR信息升级完毕。

      5.3.5 升级启动分区内的引导器bootmgr及配套BCD文件

      升级NT6信息后,系统启动将会使用bootmgr和BCD来引导操作系统的启动。我们需将启动器及配套文件存放于系统启动分区中。即分区中有NT5启动器文件ntldr的分区(如看不到ntldr,请在文件夹选项中打开显示隐藏文件及系统文件)。

 
1.     可以看到,笔者的虚拟机里启动分区是C。准备好的BCD等配套启动文件存放于分区D

 
2.     剪切或复制BCD等文件到启动分区C。至此,NT6配套BCD等文件升级完毕

 

3. 这里笔者使用bcdedit工具进行验证。可以看到,bcdedit已正确读取系统BCD启动项信息

      5.3.6 基于VHD的windows 8部署

      至此,使用NT5来部署VHD系统基本结束。剩下的内容大多为笔者上一遍文章:“思路1”里简绍的,关于BCD启动项的编辑。“思路1”地址:https://bbs.pcbeta.com/viewthread-1294200-1-1.html

 
1.     设置VHD启动,最后2条命令可以不用输入。IntegrityServices Enable为“整体服务启用”,nx OptIn项为“仅针对操作系统组件(包括 Windows 内核与驱动程序)启用 DEP”

      对于NT5来说,系统启动是通过ntldr启动器文件来引导的。但是,ntldr并不支持VHD的启动。NT6启动可以启动VHD内系统,不过NT6不支持直接启动WindowsXP。这里笔者要在BCD内添加针对NT5引导文件ntldr的启动项,让bootmgr通过启动ntldr进而启动Windows XP。

 
1.     添加Windows XP启动项,使用3条命令。第一条添加一个名字叫做Windows XP的NT5引导、第二条是设置NT5的引导文件存放于分区C(即XP下ntldr所在的分区)、第三条设置ntldr的路径

      至此,BCD的编辑工作基本结束,收尾完成后可重新启动计算机进入基于VHD启动的Windows 8

 
1.     将笔者先前创建的2个启动项(Windows 8与Windows XP)加入到系统显示列表

 
2.     设置Bootmgr默认启动系统为基于VHD文件启动的Windows 8,并设置显示系统列表时间15秒。

 
3.     重启后看到,系统成功被Bootmgr引导,并成功显示出笔者添加的2个启动项

 

4.     选择windows 8 VHD,成功进入到Windows 8

 
5.     至此,基于NT5引导的VHD启动系统(windows 8)演示完毕

      注意事项:微软推荐VHD文件启动系统,VHD文件类型选用固定大小(创建后可以修改大小)。但不禁止选用扩展方式创建的VHD文件来启动系统。在笔者昨天的准备中,发现使用扩展的VHD作为Windows 8启动载体,会出现磁盘分区容量不够的提示,导致Windows 8启动失败。如下图:

 

      如有读者碰到该问题。可以尝试更换类型为固定大小的VHD文件来解决。

5.4 无引导程序,如何启动VHD内的操作系统

      相信看到这里,很多读者发现无引导部署系统本质与NT5引导部署是一样的。

      部署基于VHD启动的系统,步骤不外乎下列3步:

           1.     准备基于VHD的系统文件,复制到目标机器中
           2.     配置升级启动文件,确保启动文件有驱动支持VHD
           3.     正确配置BCD文件,确保bootmgr可以正确引导VHD内的系统启动

       这几步在上一部分“5.3”的篇幅中有所简绍。企业内除了新机器,一般很少碰到无引导的计算机。这里笔者将以新的虚拟机来模拟新进计算机如何部署基于VHD启动的windows 8操作系统。为了节省时间,笔者直接在新的虚拟机里挂载已部署完毕的VHD文件,用于模拟U盘/光盘内VHD文件的复制。笔者手头PE被借走,网络状况也不理想,所以启动介质以“Windows 8企业版的光盘镜像”充当。

 
1.     这是部署好的Windows 8.可以看到VHD文件存放于分区D,并且,用到的一些工具与BCD的启动文件一并放入分区D

 

2.     这次演示中用到的虚拟机设置。其中new hard disk虚拟硬盘为上图1中虚拟机的硬盘。硬盘里存放着部署好的VHD文件、启动文件及用到的一些工具。

 

3.     启动机器。新虚拟机没引导,自动引导光盘启动(VM9 BIOS默认启动顺序中,光驱低于硬盘和移动设备)

 

4.     按下shift+F10的组合键可以调出CMD。

 
5.     之所以调出命令行,是要用到diskpart工具。无引导,甚至无系统分区的计算机,要部署基于VHD启动的windows 8,重要的就是磁盘有分区存放VHD文件和启动文件。并针对这个磁盘设置引导信息。这里可以看到,笔者的虚拟机有2个磁盘。60G的是新磁盘,30G的是挂载已部署好VHD文件的磁盘

 
6.     这几条命令笔者应该不需要解释了。执行完毕后下面返回信息已经说明命令作用

 

7.     这样,针对新磁盘的操作就结束了。可以看到笔者的新磁盘分为一个分区,盘符是V。挂载并存放已准备好VHD文件的磁盘分区盘符为C。

 
8.     进入分区C,可以看到分区C的文件如上图。准备给新分区V配置升级启动文件,确保启动文件有驱动支持VHD

 

9.     复制BCD等文件到V盘

 

10.  进入V盘检查复制情况,可以看到bootmgr等启动文件准备就绪

 

11.  将准备好基于VHD启动的系统文件win8pro.vhd,复制到目标机器分区V

 

 
12.  给磁盘与分区写入NT6的引导信息,让磁盘开机可以启动bootmgr,进而启动VHD文件内的Windows 8

 

 
13.  最后,检查并编辑已复制的BCD启动项文件。至此,所有工作完成

 

14.  这里笔者打开虚拟机配置,找到充当U盘而挂载的、有准备好的VHD及工具的磁盘

 

15.  移除掉这个磁盘。用来说明笔者一会儿重启,进入的VHD系统是新机器、新磁盘里VHD内准备好的windows 8

 

16.  现在可以重启计算机了

 

17.  由于BCD列表只有一个系统被列出来,所以不会出现显示系统列表。直接进入该系统

 

18.  成功进入Windows 8。由于使用的VHD是已经安装完成部署的Windows 8(没封装),所以直接进入到Windows 8

 

19.  最后附上打开磁盘管理及磁盘分区的截图。

  
   如果想要提取Windows 8的BCD文件。可以使用“无引导分区创建VHD并安装Windows 8”的方法来进行提取。简单的阐述下:在安装无引导的VHD时,不使用以部署好的VHD文件。在使用DISKPART工具对新磁盘分区后,可在新分区内创建VHD文件,挂载VHD文件,分区、格式化、分配盘符,关闭命令行。按照Windows 8安装程序提示安装Windows 8到刚刚创建的VHD文件分区中。系统启动后,所有BCD用到的文件将会连同新创建的VHD文件出现在磁盘分区中。如看不到,请打开显示隐藏及系统文件。

      到此,基于VHD启动windows8的几种方法笔者已经做演示。包括了:
           1.     有NT6启动信息的VHD系统启动部署
           2.     在NT5环境下进行VHD系统的启动部署
           3.     在无引导信息(甚至无分区)环境下进行VHD系统的启动部署

      相信大家对VHD系统启动的几种方式及方法有所了解。

      接下来笔者将会对一些企业内部署VHD的想法进行探讨。如果说部署VHD到企业网络,那么不得不考虑到一些问题:多台计算机的部署、部署的技术人员的能力水平等。并且,笔者有个想法:在不考虑统一部署的情况、应用场景即“思路1”里所提到的“应部分同事要求安装新系统,用于体验新系统的魅力”、“系统出问题在找技术员工维护时,直接升级新系统”,可否由这些公司内非IT专业人士、傻瓜化、自己给自己部署基于VHD启动的windows 8。经过一些验证,发现这个想法完全可行。由于时间和篇幅的限制,以上内容将于下篇文章探讨。希望阅读该文章并感觉有所启发的读者期待笔者的下一遍文章:浅谈基于VHD方式在中小型企业内部署Windows 8的一些思路与方法(3)

 

 

                                                                      Lblneva
2013.03.16

________________________________________
bootsect.exe。文件存放于NT6以上微软的操作系统光盘中,位置是光盘镜像根目录内的boot目录,分为32位与64位。下载见附件:

[ii] 存放于已安装的系统及光盘中。建议使用已安装的系统内的BCD文件来进行操作。X64兼容X86的启动项。下载(只64位):https://skydrive.live.com/?cid=F ... 61C223B74FBE92E!107

[iii] bcdedit.exe。文件存放于NT6及以上操作系统目录内的system32目录中,分为32位与64位。下载见附件:
 
VHDtools.rar