解決策 1:
「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
解決策 2:
「debugfs」の構文、特に「stat」コマンドを見てください。これにより、ファイルで使用されるデータ ブロックのリストが表示されます。 「-f」引数を使用して「debugfs」にパラメーターを渡して、スクリプトから呼び出すことができます。
解決策 3:
ブロックのリストを取得する簡単な方法 (debugfs
のようにパーティションから読み取る必要はありません) 回答) は FIBMAP
を使用することです ioctl。そのためのコマンドは知りませんが、書くのはとても簡単です。 Google で簡単に検索すると、FIBMAP の使用例が見つかりました。 1 つの利点は、bmap
をサポートするすべてのファイルシステムで動作することです。 ext3 だけでなく、操作。
より新しい (そしてより効率的な) 代替手段は FIEMAP
です エクステントに関する詳細情報も返すことができる ioctl (ext4 に役立ちます)。
解決策 4:
hdparm --fibmap /path/to/filename
zfs には取り組みませんが、ext4、btrfs、(v)fat などには取り組みます
man 8 hdparm
:
--fibmap
使用する場合、これは指定された唯一のフラグでなければなりません。パラメータとしてファイル パスが必要であり、ディスク上でそのファイルが占めるデバイス エクステント (セクタ範囲) のリストを出力します。セクター番号は、物理デバイスのセクター 0 から参照される絶対 LBA 番号として与えられます (not パーティションまたはファイルシステム)。この情報は、大きなファイルの断片化の程度を調べたり、障害挿入テスト手順中に意図的に破損する適切なセクターを決定したりするなど、さまざまな目的に使用できます。