分类: 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也可以在进入桌面后运行。
不建议在第一次进入桌面时调用太多的程序。
================================
所有教程其实都大同小异,我这里只是详细提了些细节问题,算做给大家参考。
希望大家都能做出自己的封装作品,当然,选择一款好的封装工具也很重要:)
封装过程并无死规矩,要灵活运用,我封装的时候经常是一边放音乐一边封装
直到声卡被卸载。。。 :(