在开始 HD 后恢复 ext4 分区

car*_*aug 8 filesystems partition ext4 data-recovery disk

我不小心使用dd并写入了外部磁盘的前 208MB。我写的是一个独立的分区(Debian nestinstaller),所以我现在看到的不是我的旧(现已损坏)ext4分区,而是另一个较小的分区。这限制了我可以遵循的工具和建议。

我的计划是重新创建分区表,testdisk然后使用此处所述的备份超级块修复所有内容。我会丢失前 208MB 的数据,但与那里的其他 300GB 数据相比,这还可以。类似于以下内容:

mke2fs -n /dev/sdb1   # doesn't work because sdb1 is the 208MB new partition
testdisk ...          # used this to create new correct partition table
mke2fs -n /dev/sdb1   # now works fine, get backup superblock positions
e2fsck -b backup_position -y /dev/sdb1 # returns many errors hence the -y
Run Code Online (Sandbox Code Playgroud)

但是,我一直无法恢复任何东西。我曾经testdisk写过一个新的分区表,与我之前的分区表相匹配。当我然后运行 ​​e2fsck 时,我收到了许多不同的错误。之后我得到了一个文件系统,但它完全是空的,没有文件。

lost+found 目录中充满了文件(我认为是已恢复的文件),但我需要恢复目录树,而不仅仅是文件。我需要文件名和以前的目录才能知道文件是什么(显微镜图像、质谱数据等。如果没有名称和它们所在的目录,它们就没有任何意义)。

我得到了另一个完全相同的 HD 并制作了整个 HD 的副本,dd这样我就可以在不丢失任何东西的情况下进行恢复实验。有什么建议吗?

car*_*aug 7

我终于设法解决了这个问题。只是为了记录,这里是我是如何做到的。我在这里找到的解决方案的一部分涉及了解用于创建文件系统的设置(我很确定我没有更改默认值)。

基本上我首先必须修复分区表以反映我在那里实际拥有的内容(我用于testdisk此但是partedcfdisk或者也fdisk应该可以正常工作)。我只是删除了错误的分区,并替换为一个包含正确 CHS 值的整个磁盘的 ext4 类型分区。

其余部分主要来自开始时的链接(阅读详细信息)但基本上我跑去mke2fs -n /dev/xxx寻找超级块备份的位置。然后使用最接近磁盘末尾的最后一个备份(只有磁盘开头的备份已被 dd 覆盖)运行 fsck。这产生了很多错误,但 fsck 有一个-y选项(与 不同-a)。

$ sudo e2fsck -a -b backup_block_number /dev/xxx
Run Code Online (Sandbox Code Playgroud)

我认为这不起作用,因为我看不到任何文件,但实际上它们都已保存到lost+found目录中。

所以最后我确实挽救了我的大部分文件,同时保留了它们的文件名和目录结构。希望这可以在未来帮助其他人。