Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162095
  • 博文数量: 26
  • 博客积分: 1550
  • 博客等级: 上尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-29 03:53
文章分类
文章存档

2012年(1)

2011年(7)

2009年(1)

2008年(17)

我的朋友

分类: WINDOWS

2008-09-27 19:19:25

转深度以S&R&S为例,谈一下封装及封装工具
一个不经处理的Windows系统直接恢复到另一台机器上,最有可能出现的情况就是蓝

屏,或者反复重新启动。那么,造成蓝屏、重启等的原因是什么呢?事实上,这就是

通用克隆系统所要解决的最基本的技术问题。

我们这里以封装XP系统为例,2003及2K的方法都是大同小异的

首先我们来了解一下封装的步骤:

一.安装操作系统
   装系统、打补丁,至于集成驱动及软件、优化或美化等由需要而定。
   Dllcache备份的步骤可选,这里就不单独列为一项了。Dllcache备份的原理不是

备份文件,而是备份文件名,在系统恢复后从I386的CAB包中提取相应文件。Deepin

XP lite是没有这些文件的,300多兆的Dllcache并不是必需的。

二.删除、更改系统硬件驱动

1.更改HAL电源模式的方法其实有很几种,目前主流的就是使用Longhorn的ntldr自动

判断。longhorn的ntldr有一个新参数,即/detecthal(在boot.ini的启动项中设置

),通过这个参数,可以实现自动判断并选择计算机类型,而且这种技术由于源出于

微软,所以其结果是百分百准确的。基本上,使用Longhorn技术来判断正确的hal就

是目前最完美的解决办法。死改不改的S&R&S 9.x版本基本上都使用这种方式。

2.更改存储控制器类型
硬盘控制器包括PATA(传统的硬盘控制器)、SATA、RAID、SCSI等,实际上,死性不

改的S&R&S就是SATA&RAID&SCSI的意思。在通用克隆发展的早期,SATA硬盘还不是很

流行,这个问题还不是很严重,因为所有的PATA(IDE)控制器都兼容于标准双通道IDE

控制器,所以人们制做克隆时只需要将源机器的IDE控制器修改为标准双通道即可。

但很显然,SATA并不兼容于标准双通道,所以当时制做的克隆系统在SATA硬盘上恢复

后重启时会出现蓝屏。

3.删除其他硬件驱动

三.封装
依照作者选用的封装方式,封装的步骤也就不尽相同。如果选用SRS的话,这里就可

以直接封装了,它会调用sysprep完成封装过程。手工替换NTLDR的就需要自己细心一

点,替换文件、删除相关注册表等。

注:S&R&S9.7集成了更改电源及IDE模式的功能,所以第二步里面的1和2也可不做。


下面我们研究一下封装工具都做了些什么:

一.电源检测
S&R&S9.X采用了基于MCC硬件抽象层电源识别技术,即替换LONGHORN版本的NTLDR,依

靠/DETECTHAL来完成对电源模式的检测。早期是需要用户手工选择的,这里就不说了

二.更改IDE模式
通过mshdc.inf文件来更新IDE模式为双通道
runwait("devcon update "

E_ISA_UP","",@SW_HIDE)

三.驱动集成
很显然,以我们个人的能力是不可能搜集到所有的MassStorage设备的驱动的,同时

存储技术在不断发展,新硬件也层出不穷,这是通用克隆不可能实现万能的原因之一


S&R&S9.X采用了DPS驱动包,所以大家在N多使用不改的封装工具的GHOST作品里都可

以看到“含大多数驱动,支持SATA。。。支持64位”。这话是怎么来的呢?
This one supports almost all (none are reported missing) MassStorage

controllers (PATA, SATA, SCSI, RAID and al their combinations).
大家可以到这个地址下载相关驱动:

除了存储设备的驱动,新型的CPU以及USB键盘、鼠标等设备驱动也要集成到系统里,

例如AMD K8 CPU等。不过,这些驱动之间有可能存在不兼容问题,驱动的不兼容会导

致同时加载时直接死机,例如intelide与viaide的不兼容问题,这是导致克隆不能万

能的原因之二,也是最主要的同时也很难解决的问题。

至于更改及恢复启动菜单、调用sysprep进行静默封装等非技术步骤,这里不做讨论


了解了封装工具的工作原理以后,我们会想:

封装工具是必需的吗? 答案是:不!

在预封装问题上,为了让系统能正确识别MassStorage设备,目前可以采取集成驱动

到system32\driver或使用txtsetup引导(深度的V2及老毛桃的PE都是这样做的)的

办法。

通过手工替换相关文件,可以做到完美的电源检测,在深度白金3in1中已经做到了

100%准确。虽然SRS采用的也这个技术,但是在实际应用中,效果仍不是绝对满意的

,出现了部分用户无法正常关机的情况,也就是电源检测上出了问题。

尽管我们可以通过手工替换NTLDR及HAL、修改注册表、更改电源及IDE模式,最后运

行SYSPREP进行封装,但是在一些驱动问题上,我还没有做到面面俱到,在3in1中就

已经体现了对一些SATA等设备的识别问题。

Windows NT不再依赖于BIOS提供的方式访问硬盘,而是通过底层的驱动程序,如果没

有加载对应的驱动程序,那么Windows就会找不到硬盘,找不到硬盘当然就不可能将

Windows启动起来。而DOS则是通过BIOS来访问硬盘的,所以这也是为什么DOS能够访

问SATA、RAID、SCSI硬盘而Windows却不能访问的主要原因。目前,死性不改正在探

索在DOS下运行的S&R&S软件,目的就是解决这个问题,其实现原理就是根据目标机器

的硬件情况在DOS下只加载适合目标机器的对应的驱动,这样就可以有效避免驱动程

序的不兼容问题。

实际上我们深度已经有了自己的封装工具,但是我们必须看到这条路的发展方向,我

个人认为,封装工具不是必需的,而辅助工具却是急需的。

 

Ghost系统封装教程及封装工具原理本教程基于MCC硬件抽象HAL(电源模式)原理,系

统以XP为例。

这里将系统封装分为3步:做系统、封装、部署


================================

一、做系统

================================

平台不限,但不建议在虚拟机上制作。CPU及主板芯片没有限制,关于intelide和

intelppm的不兼容问题,深度白金3in1并没有删除这些注册表,没有反馈因此在AMD

机器上蓝屏的现象。

1、选用免激活的版本安装盘,正常安装系统,打补丁,优化服务

     这里选用深度XP精简版5.7,安装大约需要15-20分钟。
     建议关闭系统还原及自定义通知,关闭远程,关闭共享,关闭休眠
     注意声卡要驱动上,否则封装后的系统都不在任务栏显示音量。
     运行一次windows meida player,避免以后出现向导
     安装输入法,并在“区域和语言选项”的“高级”中,应用于默认用户账户。
     我的文档,如果有需要也可以移动到D盘。
     outlook不能保存密码及SQL安装挂起的问题,也可以在这里清理一下相关注册

表。

2、安装需要的软件

     OFFICE安装时要将“第一次使用时安装”的项目完全安装上,否则会以后提示

插入光盘。
     不建议安装杀毒软件,特别是卡巴斯基,该软件会与某封装工具冲突。
     不建议安装虚拟光驱及刻录软件,已知部分软件在封装后失效。
     不建议删除windows\Installer下的安装文件,可能会造成部分程序无法卸载。

3、封装准备

     运行“gpedit.msc"打开组策略
     “计算机配置\管理模板\系统”
     启用“关闭 Windows Update 设备驱动程序搜索”
     “管理模板/系统/Internet 通信管理/Internet 通信设置”
     启用“关闭 Windows Update 设备驱动程序搜索”
     “用户配置\管理模板\系统”
     启用“配置驱动程序搜索位置” (不搜索软盘,光驱,Windows Update)
     “用户配置\管理模板\系统”
     忽略“设备驱动程序的代码签名”
     检查系统属性中的驱动签名是否为忽略,update是否为从不搜索。

     清理Documents and Settings目录,可以清理到10M以下。
     当前账户\收藏夹,安装软件后经常有链接,清之~
     当前账户\SendTo,邮件接收,建议删除
     当前账户\Recent,历史记录,现在删了以后还得删
     当前账户\Local Settings\Temp,临时文件,能删的全删
     当前账户\Local Settings\Application Data下的图标缓存IconCache.db,约

5-10M
     当前账户\桌面,建议将所有图标移动到All Users\桌面

     看下控制面板里的添加删除程序,有没有流氓软件,有就干掉,当然,除非你

有特殊目的。


================================

二、封装

================================

1、更改 IDE 控制器及电源
     在设备管理器中更新驱动
     从列表或指定位置安装
     不要搜索,我要自己选择要安装的驱动程序
     IDE更改为“标准双通道 PCI IDE 控制器”,电源更改为“Standard PC”

2、提取检测电源需要的相关文件
     WIN2000在SP4.CAB/WINDOWS XP SP2在SP2.CAB/WINDOWS 2003在SP1.CAB中
     halacpi.dll
     halapic.dll
     halmps.dll
     halaacpi.dll
     halmacpi.dll
     hal.dll     →并更名为halstnd.dll
     ntkrnlmp.exe
     ntkrnlpa.exe
     ntkrpamp.exe
     ntoskrnl.exe   →并更名为ntkrnlup.exe
     将上述文件拷贝到系统SYSTEM32目录

3、添加inf文件
     将以下代码保存为dtecthal.inf并拷贝到\WINDOWS\INF\,2000为\WINNT\INF\

[Version]
signature="$Windows NT$"
DriverVer=07/01/2001
[hal]
MPS_MP         = halmps.dll
MPS_UP         = halapic.dll
E_ISA_UP       = halstnd.dll
ACPIPIC_UP     = halacpi.dll
ACPIAPIC_UP     = halaacpi.dll
ACPIAPIC_MP     = halmacpi.dll

[ACPIOptions]
ACPIEnable = 2
ACPIBiosDate = 01,01,1999

4、引导
     修改boot.ini,加上 /DETECTHAL参数,使系统启动时检测电源
     注意将原boot.ini备份,并在部署后还原

[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP

Professional" /noexecute=optin /fastdetect /detecthal
C:\GHLDR=一键GHOST v11.0 Build 070707

5、NTLDR
     引导文件,将LONGHORN版本的NTLDR放到C盘下
     注意将原NTLDR备份,并在部署后还原

6、封装
     将sysprep.exe,setupcl.exe,及配置好的sysprep.inf放到c:\sysprep
     运行sysprep,“使用最小化安装”、关机模式“退出”,点击“重新封装”
     等待大约5-10秒,完成。

7、删除注册表中本地连接、电源相关

     搜索“本地连接”,删除上级节点,可避免安装到其他机器出现“本地连接2”

     删除电源相关的注册表键:
     HKLM\SYSTEM\CurrentControlSet\Enum\ACPI_HAL
     HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL
     HKLM\SYSTEM\CurrentControlSet001\Enum\ACPI_HAL
     HKLM\SYSTEM\CurrentControlSet001\Enum\Root\ACPI_HAL
     如果有002和003也删除,删除时先右点权限,赋予完全控制权限,否则无法删

除。

     注意删除电源的注册表必须在封装后操作,否则运行sysprep时会死机。

     另外封装后切勿运行windows优化大师,运行后死机。

8、设置好部署需要调用的文件,如注册组件时运行的程序,可写在注册表runonce。
       系统启动菜单的时间是在注册组件前恢复为默认的30秒的
       所以也可以在这里更改回原来的boot.ini及ntldr

9、卸载驱动
     很多文章讲求顺序,但是实际中并没发现不按顺序会怎样。
     卸载显示器、显卡、声卡、网卡、USB。都不卸载也不会有问题。
     所谓的“幽灵硬件”就是指系统中母机残留的硬件信息,不要紧的。

10、最后的检查及清理
       清除windows下的lastgood (最后一次正确的配置)
       清除windows下的Prefetch (程序缓存)
       \Local Settings\Application Data\IconCache.db 看是不是又出来了,有

就删除
       windows及C盘,点左面的“隐藏此文件夹内容”,文件夹选项中恢复默认
       任务栏属性,清除开始菜单及最近文档的列表

如果要备份DllCache,使用相关工具在任何时候运行都可以。

以上是手动封装的过程,中间无需重启,如果是工具辅助封装,基本可做到完全自动

化。
封装工具已知的有ASR、S&R&S,MSDP,YLMF,创辉,自由天空,PreTooler,
当然还有小兵的Dprep,另外于安的工具应该属于S&R&S辅助扩展。

这里讲原理,不讲使用。以我自己的封装工具为例吧 :P

工具集成了sysprep.exe及配置好的自动应答文件,并根据当前系统XP/2K/03进行释

放,
运行后使用devcon.exe来更新及卸载硬件驱动,从I386下提取判断电源需要的文件,
修改boot.ini并替换新的ntldr,调用sysprep完成封装,并在封装后清理系统及注册

表。


封装到此为止,可以重启制作GHO镜像了,注意现在boot菜单时间是0。
可以使用光盘引导,推荐一键GHOST,可选择最大压缩。


================================

三、部署

================================

封装工具一般都在注册表cmdline处接入自己的部署界面,再间接调用setup
使用工具封装,扩展接口可以在部署前调用外部程序,如驱动选择工具及dllcache恢

复。
开始安装的过程也是检测硬件的过程,所以驱动如果是压缩包,要在安装前释放完毕

封装工具调用的批处理,一般都是不显示窗口的,如果手动封装,可用VBS来调用批

处理。
如果封装工具不支持恢复菜单选择时间,或是手动封装,可在注册组件处还原

boot.ini及ntldr

进入桌面后,封装工具仍可以发挥作用,如填写IP,调用程序,删除文件,删除目录
对于手动封装,这些可以通过批处理来完成。

另外恢复dllcache也可以在进入桌面后运行。

不建议在第一次进入桌面时调用太多的程序。

================================

所有教程其实都大同小异,我这里只是详细提了些细节问题,算做给大家参考。

希望大家都能做出自己的封装作品,当然,选择一款好的封装工具也很重要:)

封装过程并无死规矩,要灵活运用,我封装的时候经常是一边放音乐一边封装

直到声卡被卸载。。。 :(

阅读(2046) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~