我在Synology DiskStation上有一个属于RAID1arrays的故障磁盘,另一个则丢失。 使用ddrescue我已经将大部分相关数据复制到一个新的磁盘。 分区表依然存在,但是RAID设置必不可less的一些块已损坏。
# 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分区恢复文件和目录?
有什么办法可以重新创buildmd superblock ,而不会丢失现有的数据?
是否有可能忽略md部分,将分区视为损坏的ext4分区并以这种方式恢复?
您可以使用循环挂载作为设备在磁盘映像中挂载分区。 创build循环设备时,给出一个偏移量,使循环设备在分区中的该点处开始。
这样可以跳过丢失的MD超级块,并使循环设备在ext4分区或可能的LVM的开始处启动。
现在,我们需要知道MD超级块的大小,以便在创build循环设备时提供适当的偏移量。
从MD手册文章中,可以看到不同MD版本的超级块大小和位置。
0.9和1.0版本在设备的末尾有超级块,因此文件系统从设备的启动开始,并且你的mount命令应该已经成功。 所以,你的RAID Superblock必须是其他版本。
1.1版在设备启动时有超级块,1.2版在设备启动时有4k超级块。
但是,以后有可能为超级块扩展留出足够的空间。 一个来源告诉我,设备启动后,文件系统将启动一兆字节。 在这种情况下,你可以尝试下面的命令:
losetup /dev/loop0 /dev/sdd3 -o 1048576 mount /dev/loop0 /mnt
第一个命令设置一个循环设备,从/dev/sdd3分区开始,以一兆字节的偏移量开始。 然后,这个循环设备被安装在/mnt 。
偏移量可以是其他东西,但不幸的是,我找不到一个好的偏移量实际上是什么来源。
尽pipe我从来没有尝试过将它用于基于ext的文件系统,但是在过去的Windows系统上,我已经使用TestDisk成功恢复了大量数据。
http://www.cgsecurity.org/wiki/TestDisk
他们的网站特别指出,该软件能够在Linux中的RAID 1磁盘上工作。