1

我正在尝试从带有坏超级块的 RAID 5 中恢复数据。我用 g++ 编写了一个工具,它可以让我同时从所有 3 个驱动器中转储数据,并且如果有一个丢失的驱动器,它将从丢失的驱动器中创建数据。没有。我确实知道一个驱动器不是 100% 同步的,因此该功能以后可能会派上用场。它还具有 ASCII 搜索功能,有助于查找目录,但可能需要两天时间才能完成对 3TB 数据的搜索。

无论如何,问题是我如何计算我想从 inode 号转储的块?当通过我的 inode*16+36984 等式运行时,inode 编号 0x02E00001 将我指向 inode 0x02E0A007 和 0x02E0A007,它们是存储在 2 个 RAID 驱动器上的数据,我将始终有机会找到 2 个目录。但是,我的数学计算出 0xA000 inode 为高。在过去 2 天里我提出的所有计算中,这是我似乎能够得到的最接近的。

如果 1 除以 2,则 36984 可能是 inode 零位置,因为数据跨 2 个驱动器进行条带化以用于 RAID。我根据找到位于转储位置 37000 或 ext4 位置 74000 的 inode 2 的根目录计算了这个数字。

4

2 回答 2

0

好的,如果我错了,请纠正我,但看起来简单的答案是您无法根据 inode 编号计算块位置。在更彻底地阅读了 linux ext4 文档之后,因为没有人回答这个问题,我没有想法。我发现了一个关于 ext4 范围树的文档记录不佳的部分。显然,这就是您找到数据位置的方式。我会在明天或星期一对此进行更多研究。

于 2014-03-15T05:22:16.540 回答
0

找到了我的问题的答案。我已经在GitHub 上发布了我正在编写的程序。我已对齐 RAID 驱动器并且可以读取 inode 数据。接下来是拉文件。

于 2014-03-21T23:23:13.780 回答