进一步优化加速部署映像的安装

        为了让大家更清晰的明白 gOxiA 这篇日志要讲的内容,先让我们回顾一下 gOxiA 之前写的两篇日志:制作 Windows 7 加速部署映像利用 REAgentc 实现快速的系统恢复。否则你将无法真正了解 gOxiA 撰写此篇日志的意图。

        创建自定义映像(加速部署映像)就是为了能提高系统的安装速度,并简化安装过程。而部署这一映像有很多种方法,比如:通过网络、UFD、DVD等方式。这里将不讨论网络的安装方式,而后两者都是通过存储载体进行安装,那么我们要么使用标准的 Windows 7 Setup 进行安装,或者使用自定义的 PE 环境来调用命令(Imagex.exe)安装。两者各有优势,Windows 7 Setup 提供了友好的交互界面,而命令方式虽然看似复杂,但能实现更多的需求,并减少人工的干预,最关键的是实现安装后的系统已经包含恢复功能及恢复映像。所以我们需要根据实际的需求对加速部署映像的安装做进一步的优化,以实现我们的需求或目标。

        为了更清楚的描述,gOxiA 拿自己的设计需求为例向大家讲解。首先 gOxiA 已经制作好了一份自定义的 Windows 7 映像,该映像包含应答配置,最终将通过 UFD 为载体进行安装,并提供原始映像用于系统恢复。由于旧计算机已经包含分区和数据,所以配置系统恢复功能只能通过手工的方式,在 Windows 7 Setup 标准安装全部完成之后进行。如果是新计算机则就好办的多,直接执行事先写好的命令行脚本,即可完成创建系统分区和恢复分区、释放系统映像、拷贝加速部署映像到计算机恢复分区、配置 REAgentC、配置恢复分区为 OEM 类型进行隐藏保护等操作。下图是整体的流程:

image

        不难看出,要实现包含恢复功能的安装,最简单的实现办法就是在新计算机上通过命令脚本的方式来安装。而恢复功能则是用的 Windows 7 自带的 REAgentC 来实现。在旧计算机上的安装和后续恢复功能的配置操作这里就不再阐述,可以参考前面提到的“利用 REAgentc 实现快速的系统恢复”。下面将主要讲解如何通过命令脚本在新计算机上进行安装。

        为了进一步的优化安装,上图中的子流程包含了6个步骤,其中包括了为恢复映像单独创建一个分区,并对其进行了隐藏保护。首先我们要准备两个 diskpart 脚本文件,以实现创建分区(ConfigHD.txt)和保护分区(ConfigOEMID.txt)的操作。

        ConfigHD.txt 的内容如下:

sel disk 0
clean
create partition primary size=100
format fs=ntfs quick
active
assign letter=s
create partition primary size=61444
format fs=ntfs quick label=OS
assign letter=c
create partition primary size=10245
format fs=ntfs quick label=Recovery
assign letter=r
exit

        ConfigOEMID.txt 的内容如下:

sel disk 0
sel partition 3
set id=27
exit

        将上面两个文件保存当 UFD 安装盘根目录下。之后创建一个名为 CleanDeployWindows7.cmd 的文件,同样保存在 UFD 根目录下,内容如下:

diskpart /s confighd.txt
imagex apply .\sorucesinstall.wim 6 c:
c:\windows\system32\bcdboot c:\windows /s s: /l zh-cn
md r:\recovery
copy .\sources\install.wim r:\recovery
copy c:\windows\system32\recovery\winre.wim r:\recovery
c:\windows\system32\reagentc /setreimage /path r:\recovery /target c:\windows
c:\windows\system32\reagentc /setosimage /path r:\recovery /rarget c:\windows
diskpart /s configoemid.txt
x:\windows\systrem32\wpeutil reboot

        至此,准备工作完成,接下来使用该 UFD 引导,如果是在新计算机上则调用 CMD,执行 CleanDeployWindows7.cmd,由于要释放和拷贝 WIM,所耗时间会有所增加,但是一劳永逸!当操作完成后会自动重新启动。如果是在旧计算机上,则使用 Windows 7 Setup 进行安装,再之后手工拷贝 WIM 文件,执行 REAgentC 进行恢复功能的配置。

        以上内容参考了 Microsoft OPK 提供的资料并进行了适当的修改。现在我们有了一份属于自己的 Windows 7 安装源,并提供了只有品牌机才有的恢复功能。

HOWTO:制作 Windows 7 加速部署映像

        加速部署映像 - 也就是我们通常说的系统模板,通常我们为了提高 Windows 的安装速度,会事先制作一套包含驱动、应用软件、补丁程序以及自定义设置的标准化系统。这样我们在使用该加速部署映像完成安装后,就可以让用户直接使用,不仅在安装方面大大缩短了时间,也提高了用户的体验。

        在 Windows XP 时代,我们在定制完毕系统后为了能够让该加速部署映像用于不同 HAL 的电脑,还需要人工执行很多复杂繁琐的操作,最后再使用 Sysprep 执行系统封装准备,完成后对系统打包。如果要实现自动安装,事先还需要使用 setupmgr 制作一份用于 Sysprep 的应答文件。

        自 Windows Vista 开始,Windows 的安装和部署发生了质的变化,到了 Windows 7 更是得到了完善和加强。现在我们使用 Sysprep 的 generalize 参数即可制作出一套不受 HAL 限制的通用映像。而自动应答文件富含更多地功能和设置,我们现在需要借助 WAIK(Windows Automated Installation Kit)这个新的 Windows 自动安装工具包来制作 Windows 的应答文件。由于 Windows 安装方式的改进,过去零散的安装文件都被打包在以扩展名为 WIM 的文件中,此外由于采用了文件方式的存储,WIM 不受磁盘大小的约束,能够很轻易的部署到不同容量的分区卷上,并且在释放 WIM 后文件都将紧密排列存储。这样我们维护或部署映像也将更将方便快捷。

        由于 Windows 7 的一些新特性,如:系统 oobe 阶段必须创建一个新用户;经过定制后将当前用户配置文件应用于默认用户配置,则需要借助  WAIK 在 specialize 阶段通过 CopyProfile=true 来实现。导致我们不能像以往 Windows XP 那样制作定制的加速部署映像。在 WAIK 的帮助文档中提供了多种安装部署方式的标准流程,鉴于一些环境因素的约束,gOxiA 采用如下的流程来制作 Windows 7 的加速部署映像。

image

        本次测试环境是在 Hyper-V 中创建了一个 Windows 7 的虚拟机,标准安装时直接 Mount 的 Windows 7 Pro ISO,使用虚拟化来创建加速部署映像是非常方便的。如果打算在物理机上实施则可以使用安装光盘、移动U盘或网络安装等方式执行标准化安装。

        使用集成 imagex 等小工具的 WinPE v3.0 工具盘可以说为很多朋友解决了不少的问题。gOxiA 一直以来也都擅长喜好使用 imagex 来执行系统备份,诸如此类的优势说明在过去的日志中也经常提到,这里就不再复述。而今天要与大家分享的经验是最近 gOxiA 遇到一个问题,而过去也曾经历过只不过未有留意,而这次遭遇同类问题在解决之后认为有必要大家分享,帮助大家避免发生同类的问题。

        起因是这样,gOxiA 的 Blog 服务器前段时间曾出现不稳定的状况,在对系统执行优化后决定对磁盘执行一次碎片整理,毕竟这个基于 Windows Server 2008 Web 的虚拟服务器已经运行了近17个月。随即在夜间进行了磁盘整理工作,第二天一早发现悲剧降临了,在执行碎片操作前,gOxiA 忽略了这台虚拟服务器使用的是动态类型的磁盘,而虚拟磁盘文件所在的分区卷容量还小于这个动态类型磁盘的容量,结果可想而知。系统启动后无法登录,提示磁盘已满,而存储卷显示剩余0字节。之前决定使用 VMWare 的压缩工具进行压缩,但都以失败告终。现在唯一的可行办法就是使用 WinPE 引导系统,挂载一个空的虚拟磁盘并使用 imagex 将原系统映像备份出来,因为 imagex 是以文件方式来执行数据拷贝的,所以新生成的映像恢复到新的虚拟磁盘上将不会有任何问题,初次之外还起到了磁盘整理的效果,因为 imagex 恢复后的文件时顺序排列的。经过一番折腾,总算把备份的映像释放到了新的虚拟磁盘上,然后挂载到虚拟机上启动系统,但是出现了 winload.exe 0xC000000E 故障。

winload_0xc000000e

        该故障引发的原因很简单,因为 bcdboot 中的引导信息是与硬盘所关联的,因为映像释放到了新的虚拟磁盘上,就相当于更换了硬盘,那么势必导致硬盘唯一标识变更,最终导致该故障的发生。而早先 gOxiA 使用 imagex 用于部署系统,不是将备份恢复到原硬盘就是使用 sysprep 后部署到其他硬盘上。此外,在部署 Windows 7 和 Windows Server 2008 R2 时因为系统设计的变化,默认安装系统时会自动生成一个 100M 大小的分区存储引导信息,而通常我们只备份系统盘,而在使用 imagex 恢复映像后都需要使用 bcdboot 命令创建引导信息。OK,到这里我们已经改如何解决这个故障信息了,除了使用 Windows 安装光盘引导进行修复以外,我们还可以使用手头现有的 WinPE 光盘进行命令行方式的修复。为此,我们使用 WinPE 引导盘引导系统,执行如下命令:

bcdboot c:\windows /s c:

        执行完这条命令之后我们就可以进行正常的启动了,但是问题还并未真正解决完。因为你会发现启动过程会显示 boot manager 菜单,而其中包含了两个名称相同的系统引导项,此外还会发现当前的引导菜单无法正确显示出中文字符。所以我们在前面使用 bcdboot 命令创建完引导信息之后还需要再执行如下命令,使 boot manager 采用中文版本。

bcdboot c:\windows /l zh-cn

        执行完上面两行命令后再退出 WinPE 重新引导计算机,最后使用 bcdedit 命令删除之前失败的系统引导项,整个恢复过程才算正式结束。

        保持清醒的头脑,认真分析之后再进行操作才能万无一失!

Tags: ,
分页: 33/51 第一页 上页 28 29 30 31 32 33 34 35 36 37 下页 最后页 [ 显示模式: 摘要 | 列表 ]