|

楼主 |
发表于 2003-5-21 18:48:15
|
显示全部楼层
修复过程简要回顾:
修复过程:
首先我很肯定只有mbr被破坏掉了。(前512字节)。
修复过程简要回顾:
0。准备:
我清楚记得自己的分区如下:
hda1:2G
hda2:扩展分区,剩余的28G。
--hda5:约11G,ntfs,装XP。
--hda6/hda7:大小忘了,也是NTFS。
我知道在每个盘的根目录下都有一个bak目录。
1。将硬盘卸下来通过硬盘盒挂在我的笔记本上。
2。使用DskProbe,打开该硬盘。
3。从4,000,000扇区(即硬盘的接近2G的地方,一个扇区0.5k么)开始查找UNICODE的BAK。在4117927扇区找到,一看很像是NTFS下的目录,因为前面还有像UUID的东东。于是肯定扩展分区在这一扇区前。(其实这一步也可以省略,定心而已。)
4。进入linux。
5。搜索硬盘4,000,000到4117927扇区间以55 AA结尾的扇区。因为分区的第一扇区的最后两个字节肯定是55 AA。
我是每次5000个扇区地检查的。例如搜索4,000,000到4,005,000采用:
dd if=/dev/sda count=5000 bs=512 skip=4000000 |od -x|grep aa55
搜索4,005,000到4,010,000采用:
dd if=/dev/sda count=5000 bs=512 skip=4005000 |od -x|grep aa55
6。解释一下:
第一部分dd是打印硬盘内容,我用sda因为我的外接硬盘是sda。(对不起,坦白一下,事实上我是将硬盘装回PC,启动到另外一个硬盘上的Mandrake的,所以实际上是用的if为/dev/hda,不过大家都是聪明人,应该理解啦。)参数count是总块数,skip是从第几块开始。
第二部分od是要求打印成16进制,类似的输出如下:
0027760 0f00 ffff 0f83 ffff bf40 01d4 7e20 00bb
第一列为偏移地址(好像是8进制?)后面为数据。16字节一行,分为8个双字。
第三部分grep是排除掉不包括aa55的行。
查找疑似扩展分区第一扇区。我刚接触linux半年,不太会用grep,应该能通过正则表达式只过滤行尾为aa55的那些行的。知道的大侠请指导一下。更进一步还应该可以根据第一列的地址忽略掉那些不是扇区最后16字节的。我比较笨当时没想起来,现在想想应该是只考虑地址以760结尾的就可以了吧?对不起有点晕了,再次请高手指正。
7。因为我比较笨,所以就靠自己的眼睛在屏幕上过滤了。 最后笔记录了所有aa55结尾的行。
8。突然有两行数据吸引了我!发现4096575扇区和4096638扇区以aa55结尾!注意他们之间相差63!正好是一个扩展分区信息的大小!
基本上可以肯定4096575就是扩展分区的第一扇区了。打印出该扇区的内容,更加坚定了信心。在分区表偏移处,有两行疑似分区:
0100 ff01 fe07 ffff 003f 0000 0d3b 0177
fe00 ffff fe05 ffff 0d7a 0177 86bd 00bb
翻译成中文大致就是:第一个分区NTFS,下一个分区信息参见xxxx扇区!
9。根据这两行数据,算出hda1大小:4096575-63=4096512,即3e8200H。同时计算出MBR的第二个分区的大小是从4096575到硬盘最后一个扇区。
10。回到Windows,通过DskProbe在MBR的分区表填上正确的值。具体填写位置和数据我现在有点不记得了。看看参考资料即可。 |
|