搜尋此網誌

2012-12-23

簡易 superblock 損毀處理

背景知識︰Linux 磁碟與檔案系統管理

最近忽然遇到某顆磁碟無法掛載,顯示的錯誤訊息如下。
Error mounting: mount: wrong fs type, bad option, bad superblock on /dev/sdc,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
猜測是 superblock 損毀,所以就朝這方向進行。以下操作都需要 root 權限。先安裝 gddrescue。
apt-get install gddrescue
把 /dev/sdb 整個磁碟對拷到 /dev/sdc,用 dd 也可以,但是比較慢,而 ddrescue 是專門用來救援的,速度快了好幾倍;-f 是強制寫入,-v 是顯示過程資訊。
ddrescue -f -v /dev/sdb /dev/sdc
接著需要知道該磁碟分割或磁碟的基本資料,假設是 /dev/sdc,由於資料量很多,所以輸出為 sdc.txt。
dumpe2fs /dev/sdc > sdc.txt
打開 sdc.txt 後看到如下資訊
Filesystem volume name:   GREEN_2
Last mounted on:          /media/GREEN_2
Filesystem UUID:          b89907b2-53c3-41b1-99f4-ea42c6e81c6b
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean with errors
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              183148544
Block count:              732566646
Reserved block count:     36628332
Free blocks:              58930567
Free inodes:              183147610
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      849
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Aug  6 22:52:02 2012
Last mount time:          Fri Dec 14 12:59:42 2012
Last write time:          Thu Dec 20 17:01:36 2012
Mount count:              66
Maximum mount count:      -1
Last checked:             Mon Aug  6 22:52:02 2012
Check interval:           0 ()
Lifetime writes:          3324 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      aa35c99e-1342-438f-a3bb-e1a68bd3a288
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             128M
Journal length:           32768
Journal sequence:         0x00008686
Journal start:            0
可以看到 blocks per group 是 32768,而磁碟格式是 EXT4(這自己應該知道吧)。
fsck.ext4 -b 32768 /dev/sdc
接著會有修正的相關問題提示,依序回答就好了。

PS1
或者可以直接看 /dev/sdc 的 superblock 備份在哪裡。
mke2fs -n /dev/sdc
PS2
如果很確定 blocksize 是 4096,可以強制重新寫入 superblock。
mke2fs -n -b 4096 /dev/sdc

沒有留言:

張貼留言