浅谈基于 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