拿什么拯救我的硬盘--找回丢失的linux分区

原双系统硬盘windowsxp redhat9.0。用grubmbr引导。分区信息如下:

 

Disk /dev/hda: 4865 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

 

   Device Boot Start     End   #cyls    #blocks   Id  System

/dev/hda1          0+   1019    1020-   8193118+   b  Win95 FAT32

/dev/hda2       1020    4864    3845   30884962+   f  Win95 Ext'd (LBA)

/dev/hda3          0       -       0          0    0  Empty

/dev/hda4          0       -       0          0    0  Empty

/dev/hda5       1020+   2305    1286-  10329763+  83  Linux

/dev/hda6       2306+   2816     511-   4104576   83  Linux

/dev/hda7       2817+   2889      73-    586341   82  Linux swap

/dev/hda8       2890+   3569     680-   5462068+  83  Linux

/dev/hda9       3570+   4864    1295-  10402056    b  Win95 FAT32

 

windows 是别人装的,有C,D,E3个逻辑盘,hda6分区是以前用PQmagicD盘下分出来的4G,后来发现linux下程序越装越多,/usr空间已经达到了4.6G, df查看/下的使用率已经99%了,于是又把整个D盘格掉分给linux做一个单独的/usr分区。Windowsxp是以前用一张不完整的碟强制安装上去的,一直不稳定,反正也就玩CS和格斗游戏时用一下,VC都没装,平时都不用,也就没怎么搭理。前天因为要搭个DSP的实验环境,安装CCE需要在windows下,不得以准备重装windows。弄了一张刻的xp盘,用ntfsC 盘重格安装完后。重启,发现grub引导错误。这种情况已经习惯了,不就是重装下grub嘛。习惯动作,拿出上方宝剑—linux安装盘,进入rescue模式,让安装盘自动寻找根分区。!!!,居然提示找不到任何linux分区,这就奇怪了,难道分区表出错?进入shell

#/sfdisk -l /dev/hda

发现原为ext2分区的hda6分区不见了,取而代之的是原hda7的交换分区,后面分区的编号也依次减1,

/dev/hda6       2817+   2889      73-    586341   82  Linux swap

/dev/hda7       2890+   3569     680-   5462068+  83  Linux

/dev/hda8       3570+   4864    1295-  10402056    b  Win95 FAT32

这种情况从没见过,mount一下根分区hda7,发现数据正常。那么就是分区表错误了,还好我以前研究mbr时把每个分区0磁道1扇区的数据进行了记录

dd if=/dev/hdax  of=/home/mbr/px bs=512 count=1 x为相应分区号。

不管怎样,先还原引导分区。同样使用dd命令将/hda6 /hda7的引导信息还原。重启后用linux安装盘进入rescue模式,找到了根分区然后重装grub,因为/usr做为一个单独的分区没有挂上,所以/sbin/grub命令无效,先mount grub分区。

#mkdir /rescue

#/rescue/sbin/grub

#root (hd0,7)

#setup (hd0)

修改相应的grub.conf文件,和/etc/fstab.重启后,基本恢复正常,但是原来的hda6分区再也看不到了。用带光盘启动的98修复盘运行diskman也没发现错误,只是在23052817之间的柱面没有显示在分区表中。也许PQ magic能够发现什么,退出diskman,运行盘上带的PQ magic6.0,马上弹出信息说分区表有错误,问是否需要修复。嗯,能够发现错误,有戏。。顺手就按下了确定,由于一时的疏忽,灾难开始了,出现修复完毕的信息之后,屏幕死机。。

重启之后,硬盘启动找不到启动信息,用98修复盘启动,在选择从cdrom启动后,光标停在屏幕左上方,不停闪烁,闪啊闪啊,就快闪到天荒地老还没反映。换经典的98安装盘选择从光盘启动还是出现上述情况。这下我急了,从没听过不能从光盘启动的情况,启动光盘能够自动加载一个小型的dos系统啊。抱着莫名其妙的心情试着用linux的安装盘启动,耶,行了,I LOVE LINUX!,进入rescue模式,用sfdisk一看,天。出现了160个分区,从hda6开始就是重复的分区,指向分区柱面23052890.fdisk看也有15个分区。没办法,将只能将后面的分区都删掉,现在只剩下一个hda1fat32分区,一个扩展分区和一个hda5linux(/usr)分区,根分区都没了。该死的PQ,我的硬盘分区表备份都放在linux根分区里面,

。重启后终于能够用98修复盘引导了,运行diskman,试着重建分区表。结果找回了4个分区,

分区   柱面起始    柱面终止   类型

0       0              1019      fat

1       1020        2305      extend

2       2892         3569     linux

3       3570         4864     fat

4       1020         2305     linux

看来diskman为了找回分区,把前面几个分区都作为主分区了。现在不但那4G空间没有找回来还赔了一个交换分区,唉,革命尚未成功,同志还需努力。再仔细看看,发现第3号分区即linux的主分区起始磁头居然是第91个磁道,理论上来说一个分区的起始引导磁道都在0号磁道,数据都在1号磁头,于是继续查看0柱面,0磁道,1扇区即mbr的分区表,从到数第66个字节读起,发现关于第2号分区的分区描述为

00 5b c1 4c 83 fe 7f f4 09 6f c4 02 69 b0 a6 00

其中的5b10进制的91,表示起始磁道,将它改为01,重启,用linux启动盘进入rescue模式发现还是无法找到linux根分区,mount 2号分区出现错误。难道分区信息还是有误?猛然想起几天前好象用笔计算过mbr的信息,可能留有什么线索。于是翻箱倒柜,还好主没有抛弃我,终于在一张皱巴巴的草稿纸上找到了一点信息。

16386363+30041550=46427913,46427913+10924200=57352113,这几个数据好象是原始分区的部分分区起始扇区.

#sfdisk -l -uS /dev/hda

有问题,16386363是现在4号分区的起始扇区,而2号分区的起始扇区是46460043,46427913有点差距,计算一下,一个柱面255个磁道,一个磁道63个扇区

46427913-46460043/255/63=2,刚好偏移了2个磁道,于是将2号分区的起始扇区改回来,重启。。rescue模式。万岁,终于找到了根linux分区,

分区表果然是个危险的东西,不能乱玩,还是老老实实重建分区表吧,找到以前的分区信息备份,根据备份信息,重建分区表。一切都回来了把修复过程写下先。。

经过了这次有惊无险的分区修复过程,得出了几点经验,共享一下
1.
备份你的分区表,而且最好备份在软盘,U盘,光盘等非硬盘介质上,万一出现问题还可以据此重建分区表,因为分区表不论是mbr还是虚拟mbr大都在0磁道1扇区,不会影响到你的数据区,所以如果分区表出错,还想找回数据的话,千万不要在数据区覆盖信息或格式化。

2.这次分区还算运气好,刚好用不久笔记录了linux根分区的起始磁头,不然真要欲哭无泪了,

这说明了人品好才能运气好:)

3.PQ  magic是个不稳定的比较危险的工具,慎用。Linux下有类似的工具parted,不过我还没用过,研究中,不过linux下工具以稳定著称,应该比pq好点,个人观点。

4.如果有 linuxwindow双系统。经常要重装windows的最好把grub装在非mbr区,并将其设置为活动分区。

                                        Icefox_yic        6th Apr 05 

你可能感兴趣的:(linux)