我有一个 sw raid10 设置,例如:/dev/sdX > 分区 /dev/sdX1 > raid md0 > lvm > fs。我是个白痴,用 dd 将 4gb 的 0 写入 /dev/md0
dd if=/dev/zero of=/dev/md0 bs=4k count=1000000 conv=fdatasync
我能做些什么来恢复数据?
我尝试按照以下方法恢复备份超级块此链接,但当我选择一个备份块时,我得到了
e2fsck 1.42.5 (29-Jul-2012)
e2fsck: Invalid argument while trying to open /dev/md0
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
我确实备份了大部分数据,没有备份的数据并不重要。我只是不想在认为有办法恢复分区表时复制几百 GB 的数据。
答案1
如果您对该场景的描述准确,那么您的分区表没有受到损害。但是,您可能丢失了磁盘上的所有其他内容。
您尝试使用fsck
失败,因为您没有考虑层lvm
。当您写入时md0
,您没有覆盖ext2
文件系统的开始,而是覆盖了物理设备的开始lvm
。
lvm
在这种情况下恢复数据需要对和都有深入的了解ext2
(无论是真的ext2
、ext3
还是ext4
可能并不重要,它们足够相似)。
我不知道lvm
元数据保存在哪里,但似乎大部分元数据都位于媒体的开头,似乎比您写入的 4GB 短很多,因此其中一部分 4GB 可能包含ext2
文件系统的开头。因此,您可能缺少来自两个层的元数据。
我的建议是先不要触碰损坏的磁盘。而是开始恢复到新磁盘。恢复后,确定是否还缺少任何内容。如果备份出现问题,那么您可以开始研究恢复损坏的磁盘。
恢复可能需要一段时间,但可能比从损坏的磁盘进行任何恢复尝试都要快得多。而且您可以在等待恢复时做一些有意义的事情。