私が理解しているように、Unixライクなオペレーティングシステムの各ファイルにはiノード番号(「ls -i」で表示できます)があり、各iノードはファイルの実際のデータを含むディスクブロックのリストです。
ファイル名を引数として取り、そのファイルのiノードが指すディスクブロックのリストを出力するLinuxコマンドはありますか?
追伸問題のファイルシステムはext3です。
「debugfs」ツールを使用して、コマンドラインまたは相互アクティブ化でファイル情報を表示できます。どちらかを使用:
# debugfs /dev/<spartition>
# stat /path/to/file
または
# debugfs -R "stat /path/to/file" /dev/<partition>
例えば:
# debugfs -R "stat /etc/passwd" /dev/sda5
Inode: 435914 Type: regular Mode: 0644 Flags: 0x0
Generation: 979004472 Version: 0x00000000
User: 0 Group: 0 Size: 1577
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4a2d6f78 -- Mon Jun 8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun 8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun 8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1
「debugfs」の構文、特に「stat」コマンドを確認してください。ファイルで使用されているデータブロックのリストが表示されます。 「-f」引数を使用してパラメータを「debugfs」に渡し、スクリプトから呼び出すことができます。
ブロックのリストを取得する簡単な方法(debugfs
の回答のようにパーティションから読み取る必要がない)は、FIBMAP
ioctlを使用することです。そのためのコマンドは知りませんが、コマンドを書くのはとても簡単です。素早いGoogle検索で FIBMAPの使用例 が得られました。 1つの利点は、ext3だけでなく、bmap
操作をサポートするすべてのファイルシステムで機能することです。
より新しい(そしてより効率的な)代替手段は、FIEMAP
ioctlです。これは、エクステントに関する詳細情報も返すことができます(ext4に役立ちます)。
hdparm --fibmap /path/to/filename
私はzfsでは機能しませんが、ext4、btrfs、(v)fatなどでは機能します
--fibmap
使用する場合、これは指定された唯一のフラグでなければなりません。パラメータとしてファイルパスを必要とし、ディスク上のそのファイルが占めるデバイスエクステント(セクター範囲)のリストを出力します。セクター番号は、物理デバイスのセクター0から参照される絶対LBA番号として与えられます(パーティションまたはファイルシステムではなく)。その後、この情報は、大きなファイルの断片化の程度の調査や、フォールト挿入テスト手順中に故意に破損する適切なセクターの決定など、さまざまな目的に使用できます。
少なくとも一部のLinuxマシンでは... "ls -s"はあなたが探しているものを提供するかもしれません。
編集:私の悪いことに、ブロックの数ではなく、ブロック自体のリストを探しているようです。