ext3 文件系统错误

悲剧发生了, 一个硬盘上的两个分区同时坏掉了, 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/LogVol3

fsck.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/sdb2
Couldn't find valid filesystem superblock.


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

dump一个正确的分区信息

sudo dumpe2fs /dev/sda1 | grep Back
dumpe2fs 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/sdb1
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2260992 inodes, 9036554 blocks
451827 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
276 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Writing inode tables: done                            
Creating journal (32768 blocks): 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.

这里创建磁盘分区的时候已经就指定了备份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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值