修复被破坏了的linux文件系统分区表,修复被破坏的linux文件系统

昨天晚上在信息港的机房里鼓捣到凌晨4点多,帮助朋友修复损坏的硬盘数据。由于当时没有详细的记录,凭回忆先记录下整个过程,也许有错误的地方,请不吝指正!

象和环境:REDHAT

FC4,一块36G的SCSI硬盘(/dev/sdc)无法mount,fdisk也看不到分区信息。另外一块该盘重要数据的备份盘(9G

SCSI硬盘,/dev/sdb)也是同样的现象。均为独立磁盘,没有RAID设置。(怎么这么巧?数据盘和备份盘同时坏掉了)

整个尝试修复的过程大致如下:

尝试查看分区信息尽管事先被告知fdisk看不到分区信息,还是固执的尝试了一下:-)

fdiks -l /dev/sdc果然什么样都看不到。但是,系统启动的时候正确的列出了磁盘的相关信息(大小等),而且fdisk也能够列出磁盘大小等相关物理信息,只是没有分区信息。因此初步判断,是磁盘的分区表丢失,不一定是磁盘物理损坏。

尝试使用parted查看和恢复分区信息parted /dev/sdc

print自然也列不出分区信息,好在管理员还有一块分区完全一致的硬盘(是早先通过dd完全复制的),于是挂上这块clone盘,获得了sdc的分区信息,记录下来(注:这里可以有更好的处理方法,见下面的gpart部分),尝试使用parted恢复分区信息:

rescue

start? 0

end ? 4G上面是parted尝试根据给出起始尺寸和结束尺寸,在这个范围内寻找分区标志符,以决定是否重新写入分区表。可是奇怪的是,总共6个分区,parted只能按照这个办法找回一个分区,其他的都宣告一个提示,大致的意思是“分区结束符位于开始符之前”。

也尝试使用parted的mkpart重新创建分区表,但是失败,提示不能创建更多的主分区(难道分区信息没有丢失吗?为什么不允许创建分区信息呢?)

使用gpart尝试找回分区信息parted没有成功的找回分区信息,于是转而尝试gpart:

gpart /dev/sdc可喜的是,gpart经过一段时间的搜寻,列出了看起来有道理的分区信息!但是,按照管理员提供的clone盘,应该是找到6个分区(包括swap)才对,但是gpart只找到了4个。经过分析发现, gpart原来只是找到了主分区分析,扩展分区和逻辑分区没有找到。

尝试通过

gpart -W /dev/sdc /dev/sdc将分区信息重新写入到损坏盘中。虽然fdisk, parted可以列出分区信息,但是还是无法mount。于是怀疑文件系统也遭到了损坏。

使用reiserfsck/e2fsck修复文件系统管理员告知,/dev/sdc的文件系统应该是reiserfs,于是尝试使用reiserfsck检查和修复文件系统(事后证明,这是一个严重的错误!)

reiserfsck --check /dev/sdc1

reiserfsck --fix-fixable /dev/sdc1

reiserfsck --rebuild-sb /dev/sdc1

reiserfsck --rebuild-tree /dev/sdc1

是,一番修复之后,发现仍然无法mount!对比clone盘(早就应该比对了,失策!),才发现原来文件系统是ext3!这一番使用

reiserfsck的折腾,估计/dev/sdc1是彻底完蛋了。好在知道/dev/sdc1是一个没有重要数据的分区,可以把用来试验。

于是,又使用e2fsck(fsck.ext3)尝试修复数据:

fsck.ext3 /dev/sdc1告知找不到superblock,于是:

fsck.ext3 -b 8193 /dev/sdc1尝试找回superblock,但是失败!于是在另外几个保存superblock的地方继续尝试:

fsck.ext3 -b 24577 /dev/sdc1

fsck.ext3 -b 40961 /dev/sdc1

fsck.ext3 -b 57345 /dev/sdc1

fsck.ext3 -b 73729 /dev/sdc1

但是,均告失败!没有找回superblock,极度失望!

小技巧:如何知道superblock存储的位置?dd if=/dev/zero of=/tmp/test bs=1024  count=160000

160000+0 records in

160000+0 records out

163840000 bytes (164 MB) copied, 4.35857 seconds, 37.6 MB/s

mke2fs /tmp/test

/tmp/test is not a block special device.

Proceed anyway? (y,n) y

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

40000 inodes, 160000 blocks

8000 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67371008

20 block groups

8192 blocks per group, 8192 fragments per group

2000 inodes per group

Superblock backups stored on blocks:

8193, 24577, 40961, 57345, 73729

Writing inode tables: done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值