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のファイルの内容を印刷します。