恢复ext4超级块


47

最近,我的外部硬盘驱动器机箱发生故障(硬盘驱动器本身在另一个机箱中加电)。但是,结果是其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错误消息。


在上一次尝试中,我尝试了不同的文件系统偏移量。对于每个偏移量i,哪里i是31744、32768、1048064、1049088中的一个:

$ sudo losetup -v -o $i /dev/loop0 /dev/sdb

...然后跑步testdisk /dev/loop0,我没有发现任何有趣的事情。


我已经相当精疲力尽,但是有什么方法可以在不依靠低级文件恢复工具(foremost/ photorec)的情况下恢复文件系统?


是什么sudo fdisk -l /dev/sdb表现?
卡尔森

4
我无法让自己相信您很不幸没有擦除超级块的所有副本。因此,分区表一定存在问题,这又导致文件系统中的逻辑块偏移脱离,从而导致fsck无法找到备用超级块。
凯尔·琼斯

您没有在该磁盘LVM上吗?您是否具有与以前相同类型的外部机柜(相同的块大小等)?
Jan Marek'3

1
@KyleJones testdisk如上所述,根据的作者的建议,我尝试了使用losetupi * 512其中i62、64、2047或2049中的一个)的不同偏移量。
tlvince 2012年

@JanMarek不,很遗憾,没有LVM。外壳是一个容纳任何标准的3.5"硬盘,但我没有其他,也没有第二个1TB的磁盘。
tlvince

Answers:


15

不幸的是,我无法恢复文件系统,不得不求助于较低级别的数据恢复技术(在Ubuntu的Data Recovery Wiki条目中很好地总结了这一点),事实证明,Sleuth Kit最有用。

为清洁起见,将其标记为已回答。


8

这可能已经过时了,但是有一些建议:

如果您完全确定原始块大小为,如所述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。


0

如前所述,可能已经过时,但是fdisk(AFAIK)不支持GPT磁盘。您需要使用parted工具或其他工具。

我刚刚测试了运行Debian挤压的虚拟机(内核2.6.32-5-486),并使用parted将虚拟磁盘格式化为GPT。

# parted /dev/sde
(parted) mklabel GPT
(parted) mkpart part1 0 10G
(parted) quit
# fdisk -l /dev/sde
.
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
.
Disk /dev/sde: 85.9 GB, 85899345920 bytes
 255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
. 
   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1       10444    83886079+  ee  GPT

这是fdisk版本2.17.2(util-linux-ng)。

mkfs和fsck应该选择“真实”分区,但是,为了检查GPT分区表是否未损坏,您应该使用parted GNU。


0

重新启动计算机后,我遇到了同样的安装问题。就我而言,运行parted并发出以下命令就足够了:

set 1 lvm on

然后退出并尝试重新安装。也许它也会帮助您。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.