使用中のXFSファイルシステム上で、ファイルを明示的に指定して実行した例を示すために、上記のxfs_bmapの実行例で2つのエクステントに分割されていたsarubackup-june2008.tar.bz2ファイルに対してxfs_fsrを実行した結果を以下に示す。xfs_fsrの実行後には、ファイルを保存するために1つのエクステントしか使用していないことが分かる。
# 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 # md5sum sarubackup-june2008.tar.bz2 123b9db92b31bea5f60835920dee88d5 # xfs_fsr sarubackup-june2008.tar.bz2 (RAID上にある300MBのファイルのため、ここで数秒かかった。) # xfs_bmap -v sarubackup-june2008.tar.bz2 sarubackup-june2008.tar.bz2: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..615327]: 267173832..267789159 10 (5029832..5645159) 615328 # md5sum sarubackup-june2008.tar.bz2 123b9db92b31bea5f60835920dee88d5
| ext3_fsrツールがない理由 |
|---|
|
XFSとは異なりext3ファイルシステムでは、ファイル内容の保存場所の管理にエクステントではなく間接ブロックが使用されている。なお次期ext4ファイルシステムはファイル内容の保存にエクステントを使用していて、xfs_fsrと似た形でのオンラインデフラグもサポートする予定だ。
ext3ファイルシステムについては、filefrag(1) ユーティリティを使えばファイルのフラグメント化の状態を把握することができるが、その状態を修正することはできない。またtune2fsの -mオプションを使えば特権を持ったプロセスのみが使用することのできるブロックの割合を設定することができるので、例えば通常のユーザが使用できない領域としてディスクの10%の領域を確保しておけば、ファイルシステムが満杯になったときに起こる激しいフラグメント化を避けることができる。
|
xfs_fsrをcronジョブとして定期的に実行するには、単に引数なしで実行すれば良いだけだ。なお定期的にメールを受け取りたくなければ出力結果をnullデバイスにリダイレクトしておくと良いだろう。唯一利用すると良いかもしれないオプションとしては-tがあって、xfs_fsrを実行する時間を秒単位で指定することができる。デフォルトは7200(2時間)になっているが、デスクトップマシンの場合には以下のように6時間に設定しておいて毎晩寝る時間に起動するようにしておくと良いかもしれない。
# cd /root # mkdir -p mycron # cd mycron # vi xfs-fsr.cron 30 0 * * * /root/mycron/xfs-fsr.sh # vi xfs-fsr.sh /usr/sbin/xfs_fsr -t 21600 >/dev/null 2>&1 # cat *.cron >|newtab # crontab newtab
Linuxディストリビューションでは、xfs_fsrユーティリティはmkfs.xfsと同じくらいに気付きやすいように(例えば、同じxfsprogsパッケージに含めて)インストールされるのではなく、ファイルシステムのダンプ/リストアツール群の中にしまい込まれてしまっている。これはとても残念だ。XFSファイルシステムを数年間使用しているのにも関わらずxfs_fsrユーティリティの存在を知らなかったなら、xfs_fsrをシステム上で数回実行することでファイルシステムの性能を向上させることができるだろう。
Ben Martinは10年以上もファイルシステムに携わっている。博士号を取得し、libferris、ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。
