最近,我的外部硬盘驱动器外壳出现故障(硬盘驱动器本身在另一个外壳中启动)。然而,其结果是,它的 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
)来恢复文件系统?
答案1
答案2
这可能已经过时了,但有一些建议:
如果您完全确定原始块大小是 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。
答案3
如前所述,可能已经过时,但 fdisk (AFAIK) 不支持 GPT 磁盘。您需要使用parted或其他一些工具。
我刚刚测试了运行 Debian squeeze(内核 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 分区表没有损坏,您应该使用 GNU parted。
答案4
制作棒的完整图像(在我的例子中,是 Micro SD 卡)。
将图像恢复到新的 MicroSD 卡。
跑步
fsck.ext4 -f /dev/sdXY
(其中
sdXY
替换为新MicroSD卡的实际设备名称)如果询问是否应该修复错误,请回答“是”。
完成后,它对我来说再次工作得很好。