恢復 ext4 超級塊
最近,我的外部硬碟驅動器外殼出現故障(硬碟驅動器本身在另一個外殼中通電)。但是,因此,它的 EXT4 文件系統似乎已損壞。
該驅動器有一個分區並使用 GPT 分區表(帶有標籤
ears
)。
fdisk -l /dev/sdb
顯示:Device Boot Start End Blocks Id System /dev/sdb1 1 1953525167 976762583+ ee GPT
testdisk
顯示分區完好無損:1 P MS Data 2049 1953524952 1953522904 [ears]
…但分區無法掛載:
$ sudo mount /dev/sdb1 a mount: you must specify the filesystem type $ sudo mount -t ext4 /dev/sdb1 a mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
fsck
報告無效的超級塊:$ sudo fsck.ext4 /dev/sdb1 e2fsck 1.42 (29-Nov-2011) fsck.ext4: Superblock invalid, trying backup blocks... fsck.ext4: Bad magic number in super-block while trying to open /dev/sdb1
並
e2fsck
報告類似的錯誤:$ sudo e2fsck /dev/sdb1 Password: e2fsck 1.42 (29-Nov-2011) e2fsck: Superblock invalid, trying backup blocks... e2fsck: Bad magic number in super-block while trying to open /dev/sdb1
dumpe2fs
還:$ sudo dumpe2fs /dev/sdb1 dumpe2fs 1.42 (29-Nov-2011) dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1
mke2fs -n
(注意,-n
)返回超級塊:$ sudo mke2fs -n /dev/sdb1 mke2fs 1.42 (29-Nov-2011) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 61054976 inodes, 244190363 blocks 12209518 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 7453 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, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848
…但嘗試“e2fsck -b
$$ block $$" 對於每個塊都失敗了:
$ sudo e2fsck -b 71663616 /dev/sdb1 e2fsck 1.42 (29-Nov-2011) e2fsck: Invalid argument while trying to open /dev/sdb1
但是據我了解,這些是創建文件系統時超級塊所在的位置,這並不一定意味著它們仍然完好無損。
如果有人可以解密日誌,我還進行了
testdisk
深入搜尋。它提到了許多條目,例如:recover_EXT2: s_block_group_nr=1/7452, s_mnt_count=6/20, s_blocks_per_group=32768, s_inodes_per_group=8192 recover_EXT2: s_blocksize=4096 recover_EXT2: s_blocks_count 244190363 recover_EXT2: part_size 1953522904 recover_EXT2: "e2fsck -b 32768 -B 4096 device" may be needed
使用這些值執行 e2fsck 會給出:
e2fsck: Bad magic number in super-block while trying to open /dev/sdb1
我用所有的超級塊都試過了
testdisk.log
for i in $(grep e2fsck testdisk.log | uniq | cut -d " " -f 4); do sudo e2fsck -b $i -B 4096 /dev/sdb1 done
…都帶有相同的
e2fsck
錯誤消息。在我最後一次嘗試中,我嘗試了不同的文件系統偏移量。對於每個 offset
i
,其中i
是 31744、32768、1048064、1049088 之一:$ sudo losetup -v -o $i /dev/loop0 /dev/sdb
…和跑步
testdisk /dev/loop0
,我沒有發現任何有趣的事情。我已經相當詳盡了,但是有沒有辦法在不求助於低級文件恢復工具(
foremost
/photorec
)的情況下恢復文件系統?
不幸的是,我無法恢復文件系統,不得不求助於較低級別的數據恢復技術(在 Ubuntu 的數據恢復wiki 條目中進行了很好的總結),其中Sleuth Kit被證明是最有用的。
為了清潔起見,標記為已回答。
這可能已經過時了,但有一些建議:
如果您完全確定原始塊大小為 4096,如 所聲稱的
testdisk
,您可以使用mke2fs -S
. 來自男人:-S Write superblock and group descriptors only. This is useful if all of the superblock and backup superblocks are corrupted, and a last- ditch recovery method is desired. It causes mke2fs to reinitialize the superblock and group descriptors, while not touching the inode table and the block and inode bitmaps. The e2fsck program should be run immediately after this option is used, and there is no guarantee that any data will be salvageable. It is critical to specify the correct filesystem blocksize when using this option, or there is no chance of recovery.
如果您不確定正確的塊大小,請使用
mke2fs -n -b 2048 /dev/sdb1
並嘗試此命令提供的所有超級塊備份,然後相同但使用最後一個塊大小 1024。