最近在很多论坛(龙帝国、无忧启动、sysoft时空、DOS联盟)均看到有人关注有关Windows通用克隆方面的基础知识问题,而很多人对于 Windows的通用克隆,只知道S&R&S软件和死性不改,至于S&R&S表示什么意思,死性不改对通用克隆的发展到 底作了哪些贡献,均不甚了了。更多的人不了解通用克隆的制做需要解决哪几方面的问题,甚至还有很多人连一些基础概念都不清楚。这种对通用克隆缺乏了解的情 况是很普遍的,导致通用克隆这个并不复杂的技术被很多人神秘化,甚至走上了神坛,让广大用户都觉得它是可望而不可及的。实际上,就本人的了解和理解,通用 克隆的制做原理并不复杂,但如果抛开S&R&S这一类的制做软件而完全自己手工实现,则在细节上就要麻烦很多,所以,本文只讲原理,不深 究技术细节,有兴趣的人可以在本文的基础上进一步穷其本源,而事实上,也只有靠自己的努力探索才能获得其精髓。
1.通用克隆需要解决的技术问题
很多人都知道,一个不经处理的Windows系统直接恢复到另一台机器上,最有可能出现的情况就是蓝屏,或者反复重新启动。那么,造成蓝屏、重启等的原因是什么呢?事实上,这就是通用克隆系统所要解决的最基本的技术问题。
1.1 Windows的硬件抽象层(HAL)问题j
我们知道,NT是基于内核的分层设计的操作系统(实际上是类UNIX操作系统),最早的NT系统是支持包括I386(Intel及AMD平台)、 Alpha、Sparc等不同硬件平台的操作系统,共实现原理就是将操作系统分层设计,其中最底层的硬件抽象层(即Hardware Abstract Layer,也就是HAL)直接与硬件相关,高层只与其下一层打交道,不再直接接触硬件(这也是Windows NT下不允许软件直接访问硬件的主要原因)。那么,这里的HAL层就相当于现在的JAVA虚拟机、也相当于ISO组织定义的开放互连网络中的OSI七层参 考模型中的物理层的作用。就算是在I386平台下,很显然,一台P3的机器跟P4的机器所用的硬件差别也是很大的,也即,它们对于Windows来说要使 用不同的内核,也就是不同的HAL。
有了上面这些基础的概念,我们就可以开始介绍通用克隆制做中所谓的电源模式问题了,实际上,电源模式问题就是HAL的问题,又叫计算机类型问题(因为它直接对应设备管理器中的计算机类型项)。在我们日常接触的PC中,最经常用到的计算机类型有这么几项:
Standard PC
Advanced Configuration and Power Interface (ACPI) PC(简称ACPI)
ACPI Uniprocessor PC
ACPI Multiprocessor PC
关于如何理解这些计算机类型之间的区别,请参考龙帝国论坛木鸟朋友的这篇文章:http://nufans.net/dvbbs/dispbbs. ... p;ID=823&page=1。另外,也可以参考我曾经写的这篇文章《Windows 2000/XP/2003操作系统所支持的计算机类型(HAL)及相关内核文件的对应关系》来进一步了解不同计算机类型之间的区别及更换计算机类型的原理与方法。
基本上,上面所列出的四种HAL类型,后三种都与Standard PC(标准计算机)兼容,而如果使用了错误的HAL类型启动目标计算机,系统也有可能正常启动,但可能会丢失某些功能,例如一台支持ACPI的计算机如果 以Standard PC模式启动,那么就会导致关机时不能自动关闭电源。所以,如何正确的选择目标计算机的HAL类型成为通用克隆系统制做发展历史上的一个重要课题,在前面 所提到的木鸟的文章中也有这个历史发展过程的简要介绍(事实上,hyne、chenall、死性不改最早都是从无忧论坛开始讨论这个问题的)。那么解决 HAL问题的历史中经过了这么几个阶段:
1) 以Standard PC方式安装系统,然后手工修改计算机类型。
这种方式是在制做克隆系统前将计算机类型手工修改为Standard PC以求得克隆系统的最好兼容性(同时还会修改IDE控制器为标准双通道,后面详述),然后恢复到目标计算机,但会导致设备管理器的计算机类型中出现两个 Standard PC,然后手工将其中一个修改为适合于目标计算机的类型(这要靠人工判断),这种方式的缺点是修改完重新启动后还要再搜索一遍硬件驱动,导致系统中出现大 量幽灵硬件。
2) 人工判断,手工选择。
这一阶段以hyne、chenall、死性不改(我所接触到的)为代表,通过使用批处理或者VB程序的方式,在克隆系统启动时出现一个选择菜单让用户选择 适合自己计算机的HAL类型,至于如何判断自己计算机所使用的HAL类型,基本上是靠安装人的经验。这种方法避免了二次搜索硬件的过程,至于更多的优点, 我已经记不太清楚了。
3) 使用TA.EXE自动判断,手工确认,BOOT菜单二次修改。
这种方法主要来源于死性不改的创举,他发明了使用XP Embeded制做工具中的目标计算机分析程序ta.exe再加上使用CPUZ的结果来判断CPU数量,从而综合判断目标计算机可能的HAL类型。当然, 这种判断方式是不完全准确的,有可能会发生错误,所以才会出现手工确认以及BOOT菜单控制法等补充手段,这一阶段的最完美产品我觉得是 S&R&S 5.5 Build 1030。
4) 使用WinPE来判断计算机类型。
这种方式在木鸟的文章中有提及,我不甚了了,所以也无法过多介绍。但可以肯定的是,这种方法根本没有流行起来。
5) 使用Longhorn的ntldr自动判断并选择计算机类型。
这种方法我看到的是由网友“微软破解中心”在无忧启动论坛发表的一篇文章中所介绍的,现在这篇文章在网上流传的很广,文章写得也很浅显易懂,我就不详细介 绍了,有兴趣的去搜索一下来看看。总之,就是发现longhorn的ntldr有一个新参数,即/detecthal(在boot.ini的启动项中设 置),通过这个参数,可以实现自动判断并选择计算机类型,而且这种技术由于源出于微软,所以其结果是百分百准确的。基本上,使用Longhorn技术来判 断正确的hal就是目前最完美的解决办法。死改不改的S&R&S 9.x版本基本上都使用这种方式。
1.2 大容量存储设备(MassStorage Device)驱动问题
先解释一下这个MassStorage Device是什么东东。所谓的MassStorage Device,说白了就是硬盘控制器,细分的话包括PATA(传统的硬盘控制器)、SATA、RAID、SCSI等,实际上,死性不改的 S&R&S就是SATA&RAID&SCSI的意思。总之,是指Windows可能安装于其上的存储设备的类别,我们一 律以MassStorage来统称它们。
说起来通用克隆的MassStorage问题,应该说这个问题最早是由SATA串口硬盘不断推广引起的,在通用克隆发展的早期,SATA硬盘还不是很流 行,这个问题还不是很严重,因为所有的PATA(IDE)控制器都兼容于标准双通道IDE控制器,所以人们制做克隆时只需要将源机器的IDE控制器修改为 标准双通道即可。但很显然,SATA并不兼容于标准双通道,所以当时制做的克隆系统在SATA硬盘上恢复后重启时会出现蓝屏(错误提示就是 Inaccessable_boot_device,即不可访问的启动设备)。其实这个问题的由来已久,在安装Windows NT时在TextMode安装模式下通过按F6加载存储设备驱动软盘上的驱动就是这个问题最早的由来。原因很简单,Windows NT不再依赖于BIOS提供的方式访问硬盘,而是通过底层的驱动程序,如果没有加载对应的驱动程序,那么Windows就会找不到硬盘,找不到硬盘当然就 不可能将Windows启动起来。而DOS则是通过BIOS来访问硬盘的,所以这也是为什么DOS能够访问SATA、RAID、SCSI硬盘而 Windows却不能访问的主要原因。
讲清楚了这个问题的原因,我们简单讲一下解决办法,其实也很简单:那就是搜集尽可能多的MassStorage设备的驱动程序,然后使用Windows的 方式将它们一次性都加载进系统,这样就不会存在找不到硬盘的问题(事实上,Windows自己也是这么做的,大家可以仔细观察一下Windows NT的安装过程,在字符模式(TEXTMODE)安装界面,你会看到它加载了一系列的驱动程序,其中包括很多本机所没有的MassStorage设备驱 动,但微软自己也不可能在安装程序中集成所有的MassStorage设备驱动,所以它提供了F6方式通过软盘加载额外的驱动)。什么是Windows的 方式呢?基本上就是将驱动文件复制到%windir%"system32"drivers目录下,然后修改注册表,将相应的驱动程序所对应的服务及硬件 ID写入合适的注册表项。这些写入的内容通过分析对应的驱动程序的inf文件就可以获得,为此,rui网友还曾经写过一个inf2reg的程序来自动根据 驱动的inf文件生成对应的需要加入注册表的内容,实际上,驱动的inf文件的书写是有严格的规范的,从微软的TeckNet上可以找到很多有关的内容, 有兴趣的朋友可以自己搜索并研究一下。
很显然,以我们个人的能力是不可能搜集到所有的MassStorage设备的驱动的,同时存储技术在不断发展,新硬件也层出不穷,这是通用克隆不可能实现 万能的原因之一。还有一个原因,就是这些驱动之间有可能存在不兼容问题,驱动的不兼容会导致同时加载时直接死机,例如intelide与viaide的不 兼容问题,这是导致克隆不能万能的原因之二,也是最主要的同时也很难解决的问题。目前,死性不改正在探索在DOS下运行的S&R&S软 件,目的就是解决这个问题,其实现原理就是根据目标机器的硬件情况在DOS下只加载适合目标机器的对应的驱动,这样就可以有效避免驱动程序的不兼容问题, 当然,这个产品还在测试阶段,有兴趣的可以访问龙帝国论坛S&R&S封装专区下载产品进行测试。
Acronis True Image最新版本所具有的Universal Restore功能,实现了在恢复克隆后类似于Windows安装时的F6加载用户自定义驱动功能,这应该是解决通用克隆恢复的一个好方向,当然,这需要更多的有志之士致力于研究它、推广它。
除了MassStorage设备的驱动问题以外,新型的CPU以及USB键盘、鼠标等设备驱动也要使用这种方式解决,例如AMD K8 CPU的驱动问题等。而木鸟所推出的ASR Tools系列封装软件,相对于S&R&S系列软件来说,最大的区别就在于所集成的驱动,由于木鸟对硬件驱动骨灰级的专家水平,所以它的 封装软件中集成的驱动要远远优于S&R&S早期的软件,当然,由于木鸟和死性不改私下里是很亲密的战友,新版的 S&R&S软件也采用了木鸟所提炼的驱动包,因此,从本质上来说,两个封装软件并没有什么大的区别,当然,细微的区别还是有的。我个人更 喜欢用ASR Tools来制做通用克隆系统,但其操作步骤相对繁琐。
由于克隆系统在制做前需要集成大量的驱动程序,而在克隆安装完成后,这些驱动文件及对应的注册表项并不会被系统自动清除,而是随着系统每次都要启动,再加 上驱动间的兼容性问题,因此给克隆系统带来了不小的隐患,同时也耗费了不小的系统资源,这也是很多人不提倡对克隆系统进行二次封装的主要原因。因应这种情 况,在木鸟的指导下,由我操刀编写了ASRClean程序来配合ASR Tools系列封装软件进行安装完成后的驱动清理工作(同时还要感谢rui朋友提供的检测系统当前使用的MassStorage驱动的方法)。经过 ASRClean清理的系统再进行二次封装,原则上应该是没有任何隐患的。
基本上,上面所讲的两个问题就是通用克隆系统所需要解决的两个核心技术问题。其它问题基本上都属于细枝末节问题,并不影响大局。
从我最近的几次装机经验来看,在克隆中集成大量的MassStorage存储设备驱动,在某些机器上真的会导致兼容性问题而导致克隆恢复失败,我遇到的一 例失败就是在一个使用SiS芯片组的清华紫光笔记本上,克隆恢复完成后重启时系统不断蓝屏重启,我的解决办法是将失败的system注册表文件提取出来, 然后在另一台Windows机器上使用reg load加载注册表文件,再使用ASRClean清理掉除SISIDE外的其它多余的MassStorage设备驱动(ASRClean 1.1支持这种功能,但你要自定义清理列表,详细用法看帮助),再将system文件复制回去,果然恢复成功。我想这个办法可以供大家作为借鉴。