Ext3(またはext2/4、フレーバーを選択)ファイルシステムで、特定のiノードに対応する生のバイトデータをハードドライブから直接抽出するにはどうすればよいでしょうか。たとえば、iノード番号を指定してディスク上の位置を特定し(おそらくパーティションの先頭からのオフセット、またはその他のLBAオフセットとして)、「dd」などのユーティリティやシステムコール(何か)を使用することは可能ですか?ファイルシステムで操作することを除いてlseekのように?)ファイルとしてそれを参照する必要なしにそのデータを読むために?おそらく、ある種のドライバーレベルのユーティリティを使用して、これを実行できると思います..。
Debugfsのimap
コマンドは、iノードがどこにあるかを教えてくれます。例:
$ 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
Iノード128901のrawダンプを取得するには、524344*block_size + 0x0400
バイトをシークし、inode_size
バイトを読み取ります。サイズは、stats
のdebugfs
コマンド、または別のユーティリティdumpe2fs
を使用して取得できます。
stats
またはdumpe2fs
は、すべてのiノードストレージ領域の完全なリストも提供するため、毎回imap
を実際に呼び出す(またはインタラクティブに実行する)ことなく、debugfs
と同等の機能を実行する独自の関数を作成できます。計算を行うときは、iノードゼロがないことを覚えておいてください。 iノード1は、iノードの最初のブロックのバイト0から始まります。
外部プログラムを使用せずにCプログラムでこれを実行する場合は、すべての標準ext2ユーティリティで使用されるlibext2
ライブラリを確認する必要があります。私自身は使用していませんが、libext2のドキュメントとdebugfsのソースコードを参考にして、独自のimap
のような関数を簡単に作成できると思います。
...そしてここで私はあなたがそうしなかったかもしれないと思いました文字通りあなたがiノードの生データが欲しかったことを意味します。 iノードが記述するファイルの内容が必要な場合があります。その場合、それはさらに簡単です。 debugfs
には、そのための組み込みコマンドがあります。
debugfs -R `cat <128901>` /dev/whatever
iノード番号が128901のファイルの内容を出力します。
私は同じようなことをしたかったので、他の答えと同じように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
次のこともできます。これにより、手動のiノードルックアップなしで同じ出力が得られます。
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 ................
*