lblneva 发表于 2013-3-16 11:41

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

本帖最后由 泉此方 于 2013-3-20 11:03 编辑

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

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

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文件         3.   bcdedit.exe”。
      由于这些工具属于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:中
字数限制问题,剩下内容发到2L

lblneva 发表于 2013-3-16 11:46

这个附近怎么又乱了= =。还有帖子字数限制不能放多一些么
通过审核后去修改下2L的剩余部分

lblneva 发表于 2013-3-16 12:14

本帖最后由 泉此方 于 2013-3-20 11:04 编辑

接帖子。麻烦版主审核的时候将我沙发接帖子的那个删除掉。用这楼帖子代替。沙发的帖子不知道为什么读不到12和13的附件。我重新做了次。谢谢



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


13.最后,检查并编辑已复制的BCD启动项文件。至此,所有工作完成
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301167&size=300x300&key=fd352801757cc46211fec914874c88d5&nocache=yes&type=fixnone
14.这里笔者打开虚拟机配置,找到充当U盘而挂载的、有准备好的VHD及工具的磁盘
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301168&size=300x300&key=75be01d67e22b94110a75ca51725c1e1&nocache=yes&type=fixnone
15.移除掉这个磁盘。用来说明笔者一会儿重启,进入的VHD系统是新机器、新磁盘里VHD内准备好的windows 8
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301169&size=300x300&key=6bd20f22e4e9ba25022ce25dab672b77&nocache=yes&type=fixnone
16.现在可以重启计算机了
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301170&size=300x300&key=d2db2fb8f055cb3efad9379be9091a95&nocache=yes&type=fixnone
17.由于BCD列表只有一个系统被列出来,所以不会出现显示系统列表。直接进入该系统
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301171&size=300x300&key=e7de4737d098da1bd2a9dd3cf10c511d&nocache=yes&type=fixnone
18.成功进入Windows 8。由于使用的VHD是已经安装完成部署的Windows 8(没封装),所以直接进入到Windows 8
https://bbs.pcbeta.com/forum.php?mod=image&aid=3301172&size=300x300&key=c9672f6986fe5fea3ba3d1e16e787c00&nocache=yes&type=fixnone
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)




                                                                      Lblneva2013.03.16

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

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

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


补充内容 (2013-3-16 17:45):
发帖时遇到字数限制,导致附件等连接出现问题。附近在主楼下方:VHDtools.rar

angelzgh 发表于 2013-3-16 19:57

lblneva 发表于 2013-3-16 12:14 static/image/common/back.gif
接帖子。麻烦版主审核的时候将我沙发接帖子的那个删除掉。用这楼帖子代替。沙发的帖子不知道为什么读不到12 ...

强文,收藏,谢谢楼主的好教程!

coreqq 发表于 2013-3-16 20:39

没这耐心仔细看,走了

driver1998 发表于 2013-3-16 20:42

呵呵,xp下不能用bcdboot吗?
用bcdboot先把win8的引导弄好
然后用bcdedit添加ntldr引导就行了

lblneva 发表于 2013-3-16 20:52

本帖最后由 lblneva 于 2013-3-16 20:53 编辑

driver1998 发表于 2013-3-16 20:42 static/image/common/back.gif
呵呵,xp下不能用bcdboot吗?
用bcdboot先把win8的引导弄好
然后用bcdedit添加ntldr引导就行了
XP下可以使用BCDBOOT等工具,只要注意平台就可以了。
这里我已经准备好了BCD等文件,所以直接用BOOTSECT写入NT60启动信息,然后覆盖Bootmgr启动器等文件。最后使用bcdedit修改bcd启动项实现启动
在系统下还有一些第三方的GUI工具。可以做到以上步骤。不过写这个目的有2个,1是说明基于VHD启动的系统步骤。2是为了验证我的一个设想,在本文最后有提到。其中会用到以上提到的工具。
至于XP下挂载VHD,这是不需要的。因为准备好VHD文件。直接拷贝过去就可以用了。这也是我准备在3里做的一些内容的基础。

victornina 发表于 2013-3-16 20:54

纯围观了....SSD你肯定拿得走了

jianghanpeng 发表于 2013-3-17 18:18

好像图挂了?

lblneva 发表于 2013-3-18 15:29

jianghanpeng 发表于 2013-3-17 18:18 static/image/common/back.gif
好像图挂了?

呃,应该没吧。在公司内打开一切正常

s842646 发表于 2013-3-18 19:44

win7下面我用 的就是这个加密方法。
http://www.xin9yang.net/bbs/?fromuid=85253
http://bbs.dzart.net/?fromuid=1479617

dlnag 发表于 2014-3-7 00:27

高人!谢谢教程,辛苦了。

crazymonkeylyc 发表于 2014-10-31 12:13

谢谢分享                                    

xiongdeyuan 发表于 2015-2-8 10:46

高人!谢谢教程

cena0210 发表于 2016-3-31 16:40

受教了!!!!好贴

tjw123 发表于 2016-4-25 20:52

感谢分享,支持下载

然并 发表于 2016-5-10 00:20

pslaomi 发表于 2016-5-13 21:16


高人!谢谢教程,辛苦了。
页: [1]
查看完整版本: 浅谈基于VHD方式在中小型企业内部署Windows 8的一些思路与方法(2)