如何从磁盘提取原始 ext3 inode 数据?

如何从磁盘提取原始 ext3 inode 数据?

在 ext3(或 ext2/4,选择您喜欢的类型)文件系统上,如何直接从硬盘驱动器提取与特定 inode 相对应的原始字节数据?

是否可以给定一个 inode 编号来确定其在磁盘上的位置(可能作为距分区开头的偏移量,或其他一些 LBA 偏移量),然后使用一些实用程序,例如dd或系统调用(类似于 lseek 除外)在文件系统上操作?)来读取该数据而不必将其作为文件引用?

我假设这可以通过某种驱动程序级实用程序来完成。

答案1

debugfs 中的命令imap可以告诉您 inode 在哪里。例子:

$ debugfs -R 'imap <128901>' /dev/whatever
debugfs 1.42.5 (29-Jul-2012)
Inode 128901 is part of block group 16
        located at block 524344, offset 0x0400

要获取 inode 128901 的原始转储,您需要寻求字节524344*block_size + 0x0400并读取inode_size字节。您可以使用statsin 命令debugfs或单独的实用程序获取尺寸dumpe2fs

stats或者dumpe2fs还会为您提供所有 inode 存储区域的完整列表,以便您可以构建自己的函数,该函数的执行效果相当于无需每次imap实际调用(或交互运行)。debugfs请记住,当您进行计算时,没有索引节点零。 inode 1 从第一个 inode 块的字节 0 开始。

如果您想在没有外部程序的 C 程序中执行此操作,那么您应该查看libext2所有标准 ext2 实用程序都使用的库。我自己没有使用过它,但我怀疑使用 libext2 文档加上 debugfs 的源代码作为灵感,您可以imap非常轻松地编写自己的类似函数。

...这就是我想到的地方,也许你没有字面上地意味着你想要 inode 的原始数据。也许你想要 inode 描述的文件的内容。在这种情况下,就更容易了。debugfs有一个内置命令可以实现这一点:

debugfs -R 'cat <128901>' /dev/whatever

打印 inode 号为 128901 的文件的内容。

答案2

我想做类似的事情,最终使用了debugfs与其他答案类似的方法,但使用了以下内容(我的根文件系统所在的位置/dev/nvme0n1p4):

$ debugfs
debugfs: open /dev/nvme0n1p4
debugfs: stat /usr/bin/docker-current
debugfs: inode_dump <9445675> # After getting the inode number from the output above

您还可以执行以下操作,这会提供相同的输出,而无需手动查找 inode:

debugfs:  inode_dump /usr/bin/docker-current 
0000  ed81 0000 2819 f200 e805 ab5d ed28 7d5d  ....(......].(}]
0020  be5c 585d 0000 0000 0000 0100 1079 0000  .\X].........y..
0040  0000 0800 0100 0000 0af3 0200 0400 0000  ................
0060  0000 0000 0000 0000 0008 0000 0060 8f02  .............`..
0100  0008 0000 2207 0000 0050 8f02 0000 0000  ...."....P......
0120  0000 0000 0000 0000 0000 0000 0000 0000  ................
0140  0000 0000 76bb 0b93 0000 0000 0000 0000  ....v...........
0160  0000 0000 0000 0000 0000 0000 0000 0000  ................
0200  2000 0000 0025 6ad3 0000 0000 2c57 e8ca   ....%j.....,W..
0220  ed28 7d5d 18db 8a5f 0000 0000 0000 0000  .(}]..._........
0240  0000 0000 0000 0000 0000 0000 0000 0000  ................
*

相关内容