ディスクからraw ext3 inodeデータを抽出する方法は?

ディスクからraw ext3 inodeデータを抽出する方法は?

ext3(またはext2 / 4、希望のタイプを選択)ファイルシステムから特定のinodeに対応するrawバイトデータをハードドライブから直接抽出する方法は?

ddディスク上の場所を決定するためにinode番号を付けてから(パーティションの最初のオフセットや他のLBAオフセットなど)、システムコールなどのいくつかのユーティリティを使用できますか?ファイルシステムで動作しますか? )ファイルとして参照せずにそのデータを読み取ることはできますか?

私はこれがある種のドライバレベルユ​​ーティリティを使用して実行できると仮定します。

答え1

debugfsのコマンドは、imapinodeがどこにあるかを知らせることができます。例:

$ 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_sizestatsinコマンドdebugfsまたは別のユーティリティを使用して寸法を取得できますdumpe2fs

statsまたは、毎回実際に呼び出し(または対話的に実行)dumpe2fsしなくても、よく実行される独自の関数を構築できるように、すべてのinodeストレージの完全なリストを提供します。計算を実行するときにインデックスノード0がないことに注意してください。 inode 1 は、最初の inode ブロックのバイト 0 から始まります。imapdebugfs

外部プログラムなしでCプログラムでこれを行うには、libext2すべての標準ext2ユーティリティで使用されているライブラリを確認する必要があります。私はそれを直接使用しませんでしたが、imaplibext2ドキュメントとdebugfsのソースコードをインスピレーションとして使用して、独自の同様の関数を非常に簡単に書くことができると思います。

...それが私が思いついたものですが、おそらくあなたはまだしていないかもしれません。文字通りこれは、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  ................
*

関連情報