使用中の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上にある300Mバイトのファイルのため、ここで数秒かかった。)
# 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
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をシステム上で数回実行することでファイルシステムの性能を向上させることができるだろう。
XFSとは異なりext3ファイルシステムでは、ファイル内容の保存場所の管理にエクステントではなく間接ブロックが使用されている。なお次期ext4ファイルシステムはファイル内容の保存にエクステントを使用していて、xfs_fsrと似た形でのオンラインデフラグもサポートする予定だ。
ext3ファイルシステムについては、filefrag(1) ユーティリティを使えばファイルのフラグメント化の状態を把握することができるが、その状態を修正することはできない。またtune2fsの-mオプションを使えば特権を持ったプロセスのみが使用することのできるブロックの割合を設定することができるので、例えば通常のユーザーが使用できない領域としてディスクの10%の領域を確保しておけば、ファイルシステムが満杯になったときに起こる激しいフラグメント化を避けることができる。
Ben Martinは10年以上もファイルシステムに携わっている。博士号を取得し、libferris、ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。
Copyright © 2010 OSDN Corporation, All Rights Reserved.