欢迎光临,这里是 gOxiA=苏繁=SuFan 独立的个人博客。
本站域名:http://goxia.maytide.net or http://sufan.maytide.net
移动设备请访问:http://goxia.maytide.net/m
转载文章,请务必保留出处与作者信息,未经许可严禁用于商业用途!

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: ,

路演使用 VHD Native Boot 打造多系统应用环境

        搜索 gOxiA 的博客查找关于 VHD 和 Native Boot 的文章确实比较匮乏,而且都比较零散,周围的朋友当工具参考的时候,也比较麻烦,所以今天写此篇日志,路演一遍使用 VHD Native Boot 打造多系统应用环境。除此之外,再分享一些小心得体会!

        在开始之前,有必要提醒大家几个注意事项,首先要准备好 image.exe 这个工具,使用它来释放系统源;其次建议准备一个独立分区,专门用来存储这些 VHDs,比如 gOxiA 就划分出一个独立的 40G 分区,用来存放 Windows Server 2008 R2、Ubuntu,根据需要还可以放入 Windows 7 英文版或64bit 进行测试或满足其他工作需求,当然这一步也不是必须得,根据自己的喜好;最后就是准备好系统源 — Install.wim。

        一切准备就绪,就可以开始了。首先安装主系统,最好是 Windows 7,毕竟桌面平台用桌面版本最符合要求(gOxiA 长期经验,不管做什么应用,桌面的还是用桌面系统最好,其他的跑虚拟化更为合适。),此外 VHD Native Boot  只有 Windows 7 和 Windows Server 2008 R2 支持,这点要尤为注意。主系统的安装过程我就不再复述,下面进入主要环节。

        我们要做的就是创建一个虚拟磁盘(VHD),将需要的系统版本安装源释放到这个 VHD 中,然后使用 bcdedit 创建这个对应 VHD 的引导信息便大功告成。过程其实很简单,因为大部分操作都涉及命令行,所以本例将全部以命令行的方式来进行路演。

        首先,我们需要使用 Diskpart 来创建一个 VHD 文件,当然也可以参考之前的文章(Discovery support Virtual Hard Disks (新增对 VHD 的支持))进行操作。

diskpart

create vdisk file=d:\ws08r2.vhd maximum=20480 type=expandable

sel vdisk file=d:\ws08r2.vhd

attach vdisk

create partition primary

format fs=ntfs quick label=WS08R2

assign letter=v

        上面的命令行很容易理解,在D盘创建一个名为 ws08r2.vhd 大小为20G的动态扩展虚拟磁盘,并挂载到当前系统,之后为该虚拟磁盘创建一个主分区,使用 NTFS 格式进行快速格式化,将其卷标命名为 WS08R2,分配其盘符 v。

        下来我们将使用 imagex.exe 释放 Windows Server 2008 R2 安装源 install.wim 中的 Windows Server 2008 R2 Standard Edition 版本到之前的虚拟磁盘中,在当前系统上虚拟磁盘的盘符是v。

imagex /apply f:\soruces\install.wim 1 v:

        OK,一个命令就完成了,如果需要安装其他版本则可以使用 /info 参数来确定版本的 index 。

        最后,我们将使用 bcdedit 来创建这个 WS08R2 的引导信息,为此执行下列操作:

bcdedit /copy {current} /d "Windows Server 2008 R2 Standard Edition"

bcdedit /set {GUID} device vhd=[d:]\ws08r2.vhd

bcdedit /set {GUID} osdevice vhd=[d:]\ws08r2.vhd

bcdedit /set {GUID} detecthal on

bcdedit /set {GUID} hypervisorlaunchtype auto

        如果希望 WS08R2 的引导不出现默认引导菜单,默认还是与往常一样进入 Windows 7,待需要时调用的话,可以将该引导项存储在 toolsdisplayorder 中,那么我们就需要先从 displayorder 中删除“Windows Server 2008 R2 Standard Edition”引导项,之后执行下面的命令再添加到 toolsdisplayorder 中,启动计算机时引导系统光标出现按下空格就可以进行调用,这也是 gOxiA 所推荐的,毕竟很美观不破坏整体效果。

bcdedit /displayorder {GUID} /remove

bcdedit /toolsdisplayorder {GUID} /addlast

        至此,我们就可以重新启动计算机引导 WS08R2 进行安装初始化,由于默认引导还是 Windows 7,所以当 VHD 上的 WS08R2 重新启动时需要认为干预选择通过 WS08R2 引导。通过这些操作我们还可以在当前系统上搭建出不同的应用环境满足自己的需求,gOxiA 基本上保证一套自己常用的主系统长期正常运行,再通过此法搭建出一套只用于 Hyper-V 的实验环境,满足自己的需求。有时候要进行教程录制或不同语言环境的测试,都需要一个干净的环境,所以 VHD Native Boot 也派上了大用场,总之充分利用这一颠覆性的创新特性能帮助我们解决不少问题,更多应用还有待用户来挖掘。

        最后希望今天这一路演能帮助从事微软相关工作的朋友们,嘿嘿!确实很适合一定人群的使用需求!其他更多相关文档可以在本博搜索关键字 vhd 或 native boot,为了方便大家这里提供 imagex 文件的下载:imagex.exe

分页: 2/4 第一页 上页 1 2 3 4 下页 最后页 [ 显示模式: 摘要 | 列表 ]