7

特定のファイルを占有しているセクターを簡単に見つける方法を探しています。私の言語の好みは C# です。

A-Level Computing クラスで、ハード ドライブにはディスクの最初の数 KB にルックアップ テーブルがあることを教えられました。この表には、ファイルが占有するセクターを詳述する各ファイルのリンクされたリストがあります。したがって、このテーブルで特定のファイルを調べて、それがどのセクターを占有しているかを確認する便利な方法があることを願っています。

Google を試してみましたが、何も役に立ちません。正しいものを探していないのかもしれませんが、何も見つかりません。

どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

12

ドライブについて

最新のハード ドライブの物理ジオメトリは、オペレーティング システムから直接アクセスできなくなりました。初期のハード ドライブは、シリンダー ヘッド セクターという物理的な構造に基づいてアドレス指定できるほど単純なものでした。最新のドライブははるかに複雑で、ゾーン ビット レコーディングのようなシステムを使用しており、すべてのトラックが同じ量のセクターを持っているわけではありません。それらの物理的なジオメトリに従ってそれらに対処することは、もはや実用的ではありません。

fdiskのmanページから:

可能であれば、fdisk はディスク ジオメトリを自動的に取得します。これは必ずしも物理的なディスク ジオメトリであるとは限りません (実際、最近のディスクには実際には物理的なジオメトリのようなものはなく、単純なシリンダー/ヘッド/セクター形式で記述できるものではありません)。

この問題を回避するために、最新のドライブは、オペレーティング システムが認識している論理ブロック アドレス指定を使用して対処されています。LBA は、ディスク全体がブロックの線形セットとして表されるアドレス指定スキームであり、各ブロックは一定量のバイト (通常は 512 以上) です。

ファイルについて

「ファイル」がディスク上のどこにあるかを (LBA レベルで) 理解するには、ファイルとは何かを理解する必要があります。これは、使用しているファイル システムによって異なります。Unix スタイルのファイル システムには、ファイルを記述する inode と呼ばれる構造があります。inode は、ファイルが持つすべての属性を格納し、実際のデータの LBA の場所を指します。

Ubuntu の例

ファイル データの LBA の場所を検索する例を次に示します。

まず、ファイルの inode 番号を取得します

$ ls -i  
659908 test.txt

ファイル システム デバッガーを実行します。「yourPartition」は sda1 のようなもので、ファイル システムがあるパーティションです。

$sudo debugfs /dev/yourPartition 
debugfs: stat <659908>

  Inode: 659908   Type: regular    Mode:  0644   Flags: 0x80000
  Generation: 3039230668    Version: 0x00000000:00000001
  ...
  ...
  Size of extra inode fields: 28
  EXTENTS:
  (0): 266301

「EXTENTS」の下の数字 266301 は、ファイルが配置されているファイル システム内の論理ブロックです。ファイルが大きい場合、複数のブロックがリストされます。おそらくその番号を取得する簡単な方法があると思いますが、見つけられませんでした。

正しいブロックがあることを検証するには、dd を使用してそのブロックをディスクから読み取ります。ファイル システムのブロック サイズを調べるには、dumpe2fs を使用します。

dumpe2fs -h /dev/yourPartition | grep "Block size"

次に、ブロック サイズを ibs= パラメーターに入れ、論理ブロックの範囲を skip= パラメーターに入れ、次のように dd を実行します。

sudo dd if=/dev/yourPartition of=success.txt ibs=4096 count=1 skip=266301

success.txt には元のファイルの内容が含まれているはずです。

于 2010-08-10T20:16:13.437 に答える
1
sudo hdparm --fibmap  file

ext、vfat、および NTFS については、おそらくそれ以上です。

fibmapLinux C ライブラリでもあります。

于 2015-04-25T19:36:16.840 に答える