ext3(またはext2 / 4、希望のタイプを選択)ファイルシステムから特定のinodeに対応するrawバイトデータをハードドライブから直接抽出する方法は?
dd
ディスク上の場所を決定するためにinode番号を付けてから(パーティションの最初のオフセットや他のLBAオフセットなど)、システムコールなどのいくつかのユーティリティを使用できますか?ファイルシステムで動作しますか? )ファイルとして参照せずにそのデータを読み取ることはできますか?
私はこれがある種のドライバレベルユーティリティを使用して実行できると仮定します。
答え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
。stats
inコマンドdebugfs
または別のユーティリティを使用して寸法を取得できますdumpe2fs
。
stats
または、毎回実際に呼び出し(または対話的に実行)dumpe2fs
しなくても、よく実行される独自の関数を構築できるように、すべてのinodeストレージの完全なリストを提供します。計算を実行するときにインデックスノード0がないことに注意してください。 inode 1 は、最初の inode ブロックのバイト 0 から始まります。imap
debugfs
外部プログラムなしでCプログラムでこれを行うには、libext2
すべての標準ext2ユーティリティで使用されているライブラリを確認する必要があります。私はそれを直接使用しませんでしたが、imap
libext2ドキュメントと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 ................
*