我的 LV 中有一个 ext4 文件系统,它被破坏了,因为我不小心缩小了分区,它太小了。将分区扩展回原始大小后,我在 LV 上放置了一个新的 ext4 FS,因为在其当前状态下udev
甚至不会为其提供设备文件。
我需要恢复旧的超级块,我希望它在某处仍然有良好的备份。
我如何找到它?我可以吗?
testdisk
似乎找到了一堆,但没有一个起作用。
答案1
您可能很幸运,分区上有备份超级块。如果您还记得用于创建文件系统的选项(例如,您只使用了默认值),那么您可以像这样找到备份的位置:
sudo /sbin/mkfs.ext4 -n <original_options> <device>
这-n
是非常重要的 - 这是一个“空运行”选项,不会向磁盘写入任何内容(在实验时将磁盘转储到安全的地方可能仍然是一个好主意 - 我假设你'我已经这样做了)。
即使您不记得原来的选项,上述内容也值得尝试,以获得候选列表。
现在,对于每个候选超级块,尝试挂载以-o ro,sb=<n>
使用备用超级块(且只读)。如果成功,您也许能够恢复一些文件。
如果没有一个候选超级块允许成功安装,最后的努力可能是使用以下-S
选项编写一个新的超级块mkfs.ext4
:“仅写入超级块和组描述符。如果所有超级块和备份超级块都已损坏,并且需要最后的恢复方法,则这非常有用。“ 我会不是在没有完整分区备份的情况下执行此操作。
答案2
首先,确保磁盘是只读的,以便在尝试恢复数据时不会再对其进行写入。
ext4 超级块很难找到,因为内容变化很大,具体取决于 inode 计数、块计数等。但是,有一个神奇的签名 0xEF53(16 位)您可以尝试搜索。如果您能找到正确的位置,那么超级块的开头(以及总 inode 计数)应放置在此之前 56 个字节(十六进制中的 0x38 个字节)。
您可能会发现许多 0xEF53 实例,但通过检查超级块中的其他可能值,您也许能够识别它。
以下是 ext4 超级块值表:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
对整个磁盘映像使用十六进制编辑器可能会产生结果。
编写一个程序(或花钱请人来做)来搜索数据以查找类似于 ext4 超级块的内容也可能是一个想法。 (例如,偏移量 72 (0x48) 处的 32 位数字应该为 0,因为操作系统是“Linux”)。
祝你好运。