ディスクから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のファイルの内容を印刷します。

おすすめ記事