LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4028|回复: 15

高手救命!误操作导致硬盘分区表丢失!

[复制链接]
发表于 2003-5-19 11:00:27 | 显示全部楼层 |阅读模式
由于我想通过执行
dd if=/dev/hdd2 of=/dev/hda bs=512 count=1
将第三块硬盘的Redhat的grub放到MBR上,结果导致破坏了第一块硬盘的分区表。
我现在该怎么办?那位大侠能给点指导意见?

附1:硬盘配置
我的机器有三块硬盘,hda是30G/hdb是8G/hdd时40G。
我对硬盘的规划大致如下:
hda:
第一个分区:fat(fat32?),约2G。
后面部分是扩展分区。
扩展分区上有三个逻辑驱动器:
第1个逻辑驱动器是NTFS(装WINXP),约11G。
第2个逻辑驱动器是NTFS(准备装工作用的东西),约6G。
第3个逻辑驱动器是NTFS(准备装文档等),约10G。
第2、3个逻辑驱动器的大小不太记得了。

hdb:装mandrak9.1分区大致为:
第一个分区100M,/boot,reiserfs
第二个分区6G,/,reiserfs
第三个分区swap,约500M
第四个分区1.2G,/tmp,reiserfs

hdd:装redhat9分区大致为:
第一个分区fat32,约20G
第二个分区6G,/,reiserfs
后面部分剩余部分没有分区。

附2:
我尝试过的恢复办法:
1。win98的DOS系统下fdisk /mbr。最开始没有意识到是分区表坏了,以为只是MBR引导程序坏了。
想用这种方式恢复,虽然把grub破坏掉了,但还是启动不了。
2。尝试重新安装WINXP,想在安装的第一次重启动前中断安装从而恢复MBR。但可能是硬盘的问题,执行到一半死机。
3。尝试使用WIN2K的安装盘,使用上法。选择分区的时候,发现整个分区表都没有了。
4。尝试使用“硬盘事后修复工具”,也叫“三X磁盘医生”。失败。


目前的现状:
估计只有第一块硬盘的头512字节有问题,甚至很可能是只有分区表被破坏了,应该可以恢复的。目前需要一个工具:
1。从硬盘上逐扇区磁道读取,找到各分区开头的位置和大小。重写一个分区表。(我的四个盘的根目录都有一个bak目录,应该能够找到的)
2。该工具应该能够支持windowsXP的文件系统。

那位大侠有什么意见?不胜感激!
发表于 2003-5-19 11:54:05 | 显示全部楼层
  用PQ试试
发表于 2003-5-19 13:41:31 | 显示全部楼层
用KV3000可以!我用KV3000修改過!
发表于 2003-5-19 14:41:59 | 显示全部楼层
dd if=/dev/hdd2 of=/dev/hda bs=512 count=1


不是bs=512 是bs=446


关于硬盘主引导扇区的结构及功能全面释疑

http://tech.sina.com.cn/c/2003-02-27/17872.html


PQ好像不支持reiserfs啊

http://www.people.com.cn/GB/it/306/2176/2962/20011211/624017.html
 楼主| 发表于 2003-5-19 15:33:47 | 显示全部楼层

谢谢大家。

PQ我已经有3年没有用过了,上次因为linux分区的问题弄得很麻烦,现在不太敢用它。
kv3000,可是我没有kv3000,而且我很讨厌臭名昭著的“江民炸弹”。可以随便从网上下载吗?
还好我的hda上面没有linux相关的分区。不过因为有xp的ntfs分区,所以很害怕出什么问题。

我准备先试试kv3000,另外一个很严重的问题是我没有软驱。kv3000能使用么?
 楼主| 发表于 2003-5-21 09:09:50 | 显示全部楼层

搞定了。谢谢大家的建议!

不过我经过反复的思想斗争,最后还是决定手工恢复。我的心路历程如下:
1。首先否定kv3XXX。我对“江民炸弹”的痛恨是一贯的,而且对其商业手法一向大大的不以为然。一旦我使用kv3XXX,岂不是受惠于它而且使用了盗版?!让我今后还有何面目旗帜鲜明地反对它?兄弟一生名节可不能毁于此,这可是万万不行地!
2。由于我的机器没有软驱,损坏的hda上又装了XP SP1的NTFS我不知道各种修复软件是不是明确的支持。最后我决定:自己手工恢复!毕竟基本上只有MBR被破坏了,我对原来的分区大小,位置分布也很清楚,应该不难的。

经过两天的研究,基本弄清楚了MBR、分区表等问题。昨天终于成功恢复。基本上没有任何损失。呵呵,高兴!

使用的工具是:
WIN2K下的dskprobe,相当于原来dos下的diskedit。(还有人记得dos吗?)
linux下的命令:dd、od、grep。
发表于 2003-5-21 10:02:44 | 显示全部楼层
congratulations
发表于 2003-5-21 10:15:38 | 显示全部楼层
应该说说具体的操作,好分析分析拉。
发表于 2003-5-21 13:51:42 | 显示全部楼层
Con~!
能否总结一下,给大家讲讲?
 楼主| 发表于 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的分区表填上正确的值。具体填写位置和数据我现在有点不记得了。看看参考资料即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表