ext3 文件系统错误

来源:互联网 发布:淘宝网店卖商品收费吗 编辑:程序博客网 时间:2024/06/05 05:18

悲剧发生了, 一个硬盘上的两个分区同时坏掉了, mount挂载不上。 估计是我每次都不关机,直接待机,待机后电源又经常忽然拔掉。最后整个分区的superblock都出现问题了。这些麻烦了,一年半的资料和工程都要丢了。赶紧google一些怎么修复的。


1.  google search

打开/var/log/messages 找到和磁盘 /dev/sdb1 /dev/sdb2 有关的log.

   Jul 26 09:35:50 gwj-laptop kernel: [13722.459996] sd 0:0:1:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK   Jul 26 09:35:50 gwj-laptop kernel: [13722.460018] sd 0:0:1:0: [sdb] CDB: Read(10): 28 00 00 e8 5f ef 00 00 08 00   Jul 26 09:35:50 gwj-laptop kernel: [13722.460166] sd 0:0:1:0: [sdb] Unhandled error code   Jul 26 09:35:50 gwj-laptop kernel: [13722.460169] sd 0:0:1:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK   Jul 26 09:35:50 gwj-laptop kernel: [13722.460174] sd 0:0:1:0: [sdb] CDB: Write(10): 2a 00 00 00 00 3f 00 00 08 00

原理4天以前磁盘就已经有问题了,还不知道那。 CDB

 Jul 29 14:22:48 gwj-laptop pulseaudio[1908]: ratelimit.c: 161 events suppressed Jul 29 14:22:51 gwj-laptop kernel: [81109.810812] attempt to access beyond end of device Jul 29 14:22:51 gwj-laptop kernel: [81109.810821] sdb1: rw=0, want=174423728, limit=72292437 Jul 29 14:22:51 gwj-laptop kernel: [81109.811115] attempt to access beyond end of device Jul 29 14:22:51 gwj-laptop kernel: [81109.811120] sdb1: rw=0, want=174423576, limit=72292437 Jul 29 14:26:15 gwj-laptop kernel: [81313.687949] attempt to access beyond end of device Jul 29 14:26:15 gwj-laptop kernel: [81313.687959] sdb1: rw=0, want=174423576, limit=7229243
这里29号,磁盘superblock已经坏掉了。

2. 初步修复

fsck.ext3  /de/sdb1 提示文件系统无法识别出来, 直接退出。


3. 找到一篇类似问题的博客,讲的挺详细的,动手用 备份Superblock 来修复磁盘。

 dumpe2fs 仍然提示找不到备份superblock的位置,看来坏的比较彻底,不过如果备份可以找得到开机的时候运行磁盘修复工具就能过了。

想了很久,觉得应该指定一个默认的备份位置或许可以试试。


以下是从 参考[1] 复制出来可以参考的命令:


# dumpe2fs /dev/sdb1 | grep -i superblock# fsck.ext3 -b 32768 /dev/mapper/VolGroup_ID_17253-LogVol3# fsck.ext3 -b 98304 /dev/VolGroup_ID_17253/LogVol3#  fsck.ext3 -y -b 98304 /dev/VolGroup_ID_17253/LogVol3fsck.ext3 -B 1024 -b 32768 fsck.ext3 -b 98304 /dev/VolGr


错误提示:

dumpe2fs 1.41.11 (14-Mar-2010)dumpe2fs: Filesystem revision too high while trying to open /dev/sdb2Couldn't find valid filesystem superblock.


sdb2 已经无法识别出fs信息了, 连文件系统分区类型都找不到了。

dump一个正确的分区信息

sudo dumpe2fs /dev/sda1 | grep Backdumpe2fs 1.41.11 (14-Mar-2010)  Backup superblock at 32768, Group descriptors at 32769-32769  Backup superblock at 98304, Group descriptors at 98305-98305  Backup superblock at 163840, Group descriptors at 163841-163841  Backup superblock at 229376, Group descriptors at 229377-229377  Backup superblock at 294912, Group descriptors at 294913-294913  Backup superblock at 819200, Group descriptors at 819201-819201  Backup superblock at 884736, Group descriptors at 884737-884737  Backup superblock at 1605632, Group descriptors at 1605633-1605633  Backup superblock at 2654208, Group descriptors at 2654209-2654209


32768 ,  98304 都是 superblock备份的地方,我可以直接使用这个位置试试

fsck  -y  -b 32768   /dev/sdb1

:)  这个命令实在是神奇了。

最后的结果是大部分文件都恢复过来了,可是ext3 文件系统识别成了ext2的了。

以后还是直接关机不搞睡眠了, 睡眠竟然也会破坏superblock。


4.  备份出来数据后把磁盘格式化成ext4的信息。 注意了一下打印信息:

mkfs.ext4 /dev/sdb1mke2fs 1.41.11 (14-Mar-2010)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks2260992 inodes, 9036554 blocks451827 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=0276 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Writing inode tables: done                            Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 35 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.

这里创建磁盘分区的时候已经就指定了备份superblock的位置,

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624

276个块group, 每个group 32768个块和分段

refer:

http://www.cnblogs.com/dancefire/archive/2011/03/09/fix-bad-superblock-in-linux.html



原创粉丝点击