|
|
ファイルをXFSファイルシステム上にコピーすると、通常は一つのエクステント内にファイルの全内容が保存される。しかしその後ファイルを延長したり新たなデータで内容を書き換えたりしようとする際には、ファイルの直後に続く領域が利用できないこともある。その場合、ファイルはディスク上の別々の場所にある2つのエクステントに分かれて保存されることになる。当然ながらファイルにアクセスするアプリケーションはこのことを考慮する必要はなく、ファイルの最初から最後までについて、線形に連続した領域の場合と同様に内容を普通に読み取ったり、lseek(2)でファイル内を移動したりすることができる。しかしファイルの内容がディスク上の多数のエクステントに分散して保存されていると、性能的には劣る。
xfs_bmapユーティリティを使えば、XFSファイルシステム上に保存されている特定のファイルのエクステントについて知ることができる。-vオプション(詳細モード)を付けて実行すれば、ファイルの各部分がファイルシステム内のどのブロックにマッピングされているかが分かる。以下に示したファイルの場合、運悪く300MBのtarファイルが2つのエクステントに分割されてしまっている。
# xfs_bmap -v sarubackup-june2008.tar.bz2 sarubackup-june2008.tar.bz2: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..350175]: 264463064..264813239 10 (2319064..2669239) 350176 1: [350176..615327]: 265280272..265545423 10 (3136272..3401423) 265152
一方xfs_dbユーティリティを使えば、ファイルシステム全体のフラグメント化の状態を見ることができる。その際-rオプションを使えば、読み取りのみが可能なモードで操作が行われるので、マウント済みの使用中のファイルシステム上でも使用することができる。とは言えファイルシステムを実際に変更するつもりがない場合にはいずれにしろ-rを付けておいた方がおそらく良いだろう。xfs_dbのfragコマンドを実行すると、ディスクが数秒間動いた後、ファイルシステムのフラグメント化の状態を以下のように表示する。
# xfs_db -r /dev/mapper/raid2008-largepartition2008 xfs_db> frag actual 117578, ideal 116929, fragmentation factor 0.55%