总结 如何
ext4
从损坏的 RAID1 分区恢复文件系统?
我的情况
我的 Synology DiskStation 上的 RAID1 阵列中有一个磁盘发生故障,另一个磁盘丢失。ddrescue
我已将大部分相关数据复制到新磁盘。分区表幸存下来,但 RAID 设置所必需的一些块已损坏。
# fdisk -l /dev/sdd
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0003f44a
Device Boot Start End Blocks Id System
/dev/sdd1 256 4980735 2490240 fd Linux raid autodetect
/dev/sdd2 4980736 9175039 2097152 fd Linux raid autodetect
/dev/sdd3 9437184 3907024064 1948793440+ fd Linux raid autodetect
实际数据位于第三个分区/dev/sdd3
,但mdadm
无法组建阵列。
# mdadm --examine /dev/sdd
/dev/sdd:
MBR Magic : aa55
Partition[0] : 4980480 sectors at 256 (type fd)
Partition[1] : 4194304 sectors at 4980736 (type fd)
Partition[2] : 3897586881 sectors at 9437184 (type fd)
# mdadm --examine /dev/sdd3
mdadm: No md superblock detected on /dev/sdd3.
因此我无法挂载该分区。数据在那里,并且可以通过 等工具识别foremost
。
我也尝试过使用extundelete
,但是由于没有合适的扩展超级块,它就会失败。
# extundelete --superblock /dev/sdd3
extundelete: failed to read-only open device "/dev/sdd3": Error code 2133571347
问题
如何从损坏的 RAID1 分区恢复文件和目录?
有没有什么方法可以重新创建md superblock
,而不丢失现有数据?
是否可以忽略 md 部分,将该分区视为损坏的ext4
分区并以此方式恢复它?
答案1
您可以使用循环安装将磁盘映像中的分区安装为设备。创建循环设备时,您需要提供一个偏移量,使循环设备从分区中的该位置开始。
这样,您可以跳过缺失的 MD 超级块,并使循环设备从 ext4 分区或可能的 LVM 的开始处启动。
现在,我们需要知道 MD 超级块的大小,以便在创建循环设备时提供适当的偏移量。
从MD 手册文章中,可以看到不同 MD 版本的超级块大小和位置。
0.9 和 1.0 版本将超级块置于设备末尾,因此文件系统从设备开始处启动,并且您的 mount 命令应该成功。因此,您的 RAID 超级块必须是其他版本。
1.1版本在设备启动时有超级块,而1.2版本在设备启动时有超级块在4k处。
但是,为以后可能的超级块扩展保留了足够的空间。有消息告诉我,文件系统将在设备启动后 1 兆字节处启动。在这种情况下,您可以尝试以下命令:
losetup /dev/loop0 /dev/sdd3 -o 1048576
mount /dev/loop0 /mnt
第一个命令设置一个循环设备,该设备从分区起始位置偏移 1MB 的位置开始/dev/sdd3
。然后,将此循环设备安装在 下/mnt
。
然而,偏移量可以是别的东西,不幸的是,我找不到偏移量实际上是什么的良好来源。
答案2
虽然我从未尝试将它用于基于 ext 的文件系统,但我过去曾使用 TestDisk 在 Windows 系统上成功恢复过很多数据。
http://www.cgsecurity.org/wiki/TestDisk
他们的网站特别指出该软件能够在 Linux 中的 RAID 1 磁盘上运行。