Filesystems

恢復 ext4 超級塊

  • December 19, 2017

最近,我的外部硬碟驅動器外殼出現故障(硬碟驅動器本身在另一個外殼中通電)。但是,因此,它的 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。

引用自:https://unix.stackexchange.com/questions/33284