在这个帖子中,牛肉干同学总结了我帮助它修复BenQ本本F10一键恢复功能的过程,本来答应要写一个恢复的详细步骤的,但本论坛的999999_NB(确实牛B)大侠出手不凡,很快搞出了这么一个既有理论又容易实践的DIY步骤,然后牛肉干同学又在这个帖子中对999999_NB大侠的帖子进行了有益的补充,详细介绍了winstmbr.exe的命令行参数,两位的帖子加起来,已经是一个很完美的明基一键恢复安装教程了。
由于我平常工作比较忙,一直没有时间琢磨这个东西,但又不好对大家食言(我初到贵论坛,而且还被牛肉干同学奉为高手,面子上也不能太过不去)。于是今天(不,是昨天,因为现在已经凌晨0:45分了)我就抽出了一些时间,对BenQ(其实应该是Symantec),后面一律称之为“明基(Symantec)一键恢复程序”进行了一个有趣的试验,确实发现了一些很有趣的东西,希望能够对大家有些许的帮助或者启发,详细的试验内容如下:
今天用明基的一键恢复程序(也就是Symantec的RTMBR)在VM中做了一个有趣的试验,现在将试验结果公布出来,同大家分享一下。
首先介绍一些基础的概念。所谓的一键恢复,实际上原理都是类似的:修改硬盘的主引导记录(MBR),用自己的一段引导代码来代替默认的引导代码,这段引导代码的作用就是在启动时给用户一个提示“按某某键开始恢复系统”(当然这个提示一般都是英文的),在用户按下这个键后,激活硬盘上的一个隐藏的主分区(Primary Partition),然后从这个分区启动某个恢复软件来用事先备份好的系统恢复用户损坏的系统(或者给用户的系统分区制做备份)。当然,这里所谈到的一键恢复,都是指早期的一键恢复,包括IBM、联想、七喜以及我们这里提到的明基笔记本所用的一键恢复以及由此引发出来的象Foxrao的一键恢复精灵(另外还有一个一键还原精灵),而最新的一键恢复都开始使用HPA技术,当然,HPA技术不在本帖讨论之列。早期的一键恢复最大的特点就是那个隐藏分区在分区软件(包括Windows的磁盘管理器)中是可见的,你随时可以删除它,这也是不安全因素之一。当然,这用来应付普通用户的情况已经足够了。
好,基础概念介绍完成了,那么我简单介绍一下明基的一键恢复系统。明基笔记本的一键恢复系统使用的是Symantec的技术,原理与上面类似。一般来说,这个隐藏分区会建立在硬盘的最后面,也就是你的扩展分区的后面,由于MBR中主分区表(BPT)只有四条的限制,所以在一个正常的硬盘上,我们最多只能建立四个主分区(扩展分区相当于一个主分区),对于较大的硬盘,我们只能通过在扩展分区上再划分逻辑盘的方式来继续细分。明基的一键恢复要求这个隐藏分区必须是FAT32分区,而且分区的卷标必须是PQSERVICE。在这个隐藏分区上明基安装了一套WinPE系统,通过一个图形界面来调用vbs脚本,并通过vbs脚本进一步调用PowerQuest Image来实现用户系统分区的备份和恢复。我对PE和PQI都没有太大的兴趣,syssoft时空论坛的hnlyzhd同学(也就是牛肉干同学的天哥)从牛肉干同学提取了PQI的相关程序并发布了专门的帖子提供下载和讨论,有兴趣的可以自己研究,这个帖子在>这里<。
我感兴趣的是:一键恢复程序是如何识别哪个主分区是它的一键恢复分区的。对于一个硬盘上只有一个主分区、一个扩展分区、一个一键恢复的隐藏分区的情况下,这当然好办,假设我的硬盘上有三个以上的主分区该如何呢?就是沿着这个思路我开始了我的试验。再次感谢一下VMWare(虚拟机)这个好软件,它为我们一切的想法提供了安全稳定的实践平台。
我在VMWare下新建了一个虚拟机,硬盘设为8G,内存172M,然后我用DOS盘启动,使用spfdisk将硬盘分成三个主分区(均为FAT32格式),大小依物理顺序依次为:2.5G, 2.5G, 3G。为了简化试验环境的准备工作,我在三个主分区上都安装了MS-DOS 7.10(DOS联盟Wengier的产品),经测试,三个分区的DOS系统都能正常启动。
1、在安装DOS时,我将三个分区的卷标按Linux的命名方式依次命名为:HDA1, HDA2, HDA3。参考命令:LABEL C:HDA1, LABEL D:HDA2, LABEL E:HDA3。然后我在三个分区的autoexec.bat中都用echo命令设定了一个标记,用来标识当前的系统是从哪个分区启动的,例如:ECHO This is MS-DOS 7.10 @ HDA1.
2、将HDA3卷标更改为PQSERVICE。
3、将明基的一键恢复安装程序三个文件复制到HDA1(即C:)\Utility目录下,共有三个文件:winstmbr.exe, rtmbr.com, rtmbr.com_。据我了解,rtmbr.com_应该是Symantec原版的RTMBR.COM(V7版的),而rtmbr.com也是明基OEM过的RTMBR.COM,两个文件都是512字节,使用UltraEdit对这两个文件进行二进制比较,发现这两个文件中除了按F10的提示信息不同以外,其它的内容都完全相同。这个文件中保存的就是我们前面提到的那段用来替换MBR中默认引导代码的那段引导代码。当然,winstmbr.exe就是用来将这段引导代码写入MBR的工具。
4、准备开始安装一键恢复,由于winstmbr.exe要求一定运行在NT环境下,而我的三个分区都安装的是DOS系统,刚开始还真为难了我一下,真得感谢hnlyzhd给我们提供了不少好东西,我在HDA1分区上(即通过我们说的C:盘)使用bootpart程序安装上了NT的引导扇区(bootpart winnt boot:c:),然后将XP的ntldr, ntdetec.com, boot.ini bootfont.bin复制到hda1分区的根目录下,这样我们就拥有了NTLDR,然后再使用这个ntldr引导hnlyzhd提供给我的那个最精简的XPE(只有cmd)的boot.sdi文件,这样我们就最简单的拥有了NT环境,可以运行Winstmbr.exe了。一切都很顺利,运行winstmbr.exe后,我就成功的在虚拟机上拥有了明基的一键恢复系统(不包括明基那个PE,我完全可以在DOS下使用GHOST实现相同的备份恢复操作,而且比明基的备份恢复速度更快,可定制性也更强)。在安装好一键恢复后,在用户分区(即本例中的HDA1)系统激活的情况下,隐藏分区的属性默认为0xDE(在磁盘管理器中显示为EISA分区)。附注:其实,完全没有必要在hda1上安装NTLDR并启动boot.sdi来获得NT环境,我们完全可以使用VM的虚拟光驱启动一个深山红叶PE盘(或者hnlyzhd为我们提供的另一个XPE系统RAMPE.ISO)来获得NT环境。
有意思的试验结果即将出现了...
5、重新启动时,通过按F10进入我的HDA3隐藏分区,然后我将HDA3的卷标由PQSERVICE修改成HDA3,将HDA2分区的卷标修改为PQSERVICE。再次重新启动,那个一键恢复的F10提示正常出现,我按下F10,你们猜怎么着?不错,我想大部分人会猜,它没有从HDA3启动,却启动了HDA2这个分区上的DOS系统。
结论1:明基(Symantec)的一键恢复程序是只认卷标不认分区的。
6、在HDA2作为隐藏分区并激活的情况下(因为只有隐藏分区激活的情况下你才能通过DOS同时访问这三个分区),我将HDA3的卷标又修改为PQSERVICE,这样,我们同时有了两个卷标为PQSERIVCE的主分区(即HDA2, HDA3),再次重新启动,很好,一键恢复程序没有罢工,仍然出现正常的那个提示,我按下F10,你们猜结果怎样?估计这回比较难猜了吧?它仍然是由HDA2启动进入的系统,我通过gdisk 1查看三个主分区的状态,发现一个奇怪的现象,那就是:HDA2和HDA3同时出现激活标志。
结论2:明基(Symantec)一键恢复程序把凡是符合条件的分区都设置上激活标志(分区表项第一个字节设置为80)。 结论3:在一个分区表中如果有两个主分区同时具有激活标志,那么系统会从第一个找到的激活分区上启动。我不知道这是一键恢复引导代码的功能,还是默认的MBR也具有的功能,在我的印象中,如果分区表中同时有两个分区同时具有激活标志,那么系统将无法启动。
7、同上,还是在HDA2激活的情况下,我将HDA2的卷标修改回HDA2,HDA3的卷标保持不变(仍然是PQSERVICE),再次重新启动,你们猜结果如何?可能有些人会肯定的说,它还是从HDA2分区启动,没错儿,你猜对了。进入系统后,用GDISK 1查看分区状态,我发现HDA2和HDA3仍然是同时具有激活标志。 结论4:明基(Symantec)一键恢复程序只清除第一主分区的激活状态,然后设置它发现的隐藏分区为激活状态,但不清除其它主分区的激活状态。在本例中,它没有清除本不该是激活分区的HDA2的激活状态,所以导致,它虽然将HDA3设置成了激活分区,但系统还是从HDA2上启动了。
8、同上,我使用gdisk 1 /-act /p:2 /y 将HDA2分区的激活状态去掉。再次重启,按下F10,这次果然正常从HDA3启动了。
结论5:结论4的推断是正确的。
结论6:明基(Symantec)的一键恢复程序是很健壮的,很不容易出现故障。
试验到这里,我没有继续试验下去,但现在我想到我的试验还是漏了一些内容。假设用户分区不是第一个主分区将会出现什么情况?如果三个主分区同时具有PQSERVICE卷标该是什么结果呢?我把这些有趣的试验留给有兴趣的人继续研究。
终极结论:利用明基(Symantec)的一键恢复程序,通过hack主引导记录(MBR),我们可以实现在一个硬盘上有N个用于一键恢复的隐藏分区,前提是你的硬盘有足够大的空间,而且你很了解MBR及BPT的工作原理,而且你不觉得自己很有毛病。
另两个小技巧:
1、使用winstmbr.exe安装一键恢复程序到MBR,按F10后,一键恢复程序会错误的将隐藏分区的类型设置成不是0x0B或者0x0C,也就是说,不是FAT32,我遇到过设置为00的情况(就是在恢复神勇小白鼠那台真实的明基笔记本的一键恢复功能的时候),这个时候,会导致隐藏分区上的系统无法正常启动。这时候的解决办法就是:在用户主分区激活的情况下,将隐藏分区的类型修改为0x0B或者0x0C(都是FAT32的分区类型),再次重新启动后一切就会恢复正常。
2、保存在MBR中的一键恢复提示信息是以00字符结尾的(这是标准的汇编或者C字符串结尾),在从隐藏分区启动DOS后,由于提示信息后面没有回车换行字符,所以导致第一条dos命令的显示结果紧跟在提示信息后面显示的情况,看起来会让人感觉很不爽,解决办法就是直接修改MBR,在提示信息最后一个字符后面加上0x0D,0x0A(也就是回车换行)两个字符,然后再加上00作为字符串结尾。注意,不要让提示信息过长,覆盖掉你后面的BPT分区信息就是一件麻烦事。
|