xfs_fsr(1) プログラムは、Fedora 9やDebianベースのディストリビューションではxfsdumpパッケージの中に含まれている。これは残念なことだ。というのもxfs_fsrは非常に便利なツールなのにも関わらず、xfsdumpの中に含まれていることで、mkfs.xfsと一緒にxfsprogsパッケージに入っている場合と比べてインストール/使用される機会が大きく減ってしまっているためだ。xfs_fsrはXFSファイルシステムのデフラグプログラムで、マウント中のXFSファイルシステムをデフラグするためにcronジョブとして定期的に実行するのに向いている。
xfs_fsrの使い方は2通りある。制限時間を指定して実行すると、システム上のすべてのXFSファイルシステムを対象として、各ファイルシステム上でもっとも激しくフラグメント化されているファイルのいくつかを最適化する。あるいは、特定のXFSファイルシステムやXFSファイルシステム上の特定のファイルを明示的に指定して実行することもできる。xfs_fsrに制限時間を指定して実行した場合、その制限時間の終了時には実行した内容についての情報が/var/tmp内のファイルに保存されるため、次回再び制限時間を指定して実行した際には、作業は同じ場所から続行される。そのためcronジョブとして実行して、マシンをあまり使用していない時間に毎日少しずつ最適化を行うようにすることも可能だ。
xfs_fsrはファイルを最適化する際、フラグメント化している既存のファイルのコピーを元のファイルよりも少ない数のエクステント(フラグメント)を使用して新たに作成する。そしてファイル内容が新しいファイルにコピーされた後、新しいファイルが古いファイルと置き換わるようにファイルシステムのメタデータが更新される。これは言い換えれば、デフラグしたいファイルをまるまるもう一つ保存するために十分な空き領域がファイルシステム上に存在していなければならないということだ。なお空き領域が必要であるということはディスクのクォータにも当てはまり、ファイルのコピーをまるまる保存しようとするとそのファイルの所有者であるユーザのディスククォータを越えてしまう場合にはデフラグすることはできない。
制限時間を指定して実行するとxfs_fsrはデフォルトではシステム上のすべてのXFSファイルシステムを対象にするのだが、その際、(実際に問題になる可能性は非常に低いものの)いくつかの問題が起こる可能性がある。例えばLILOのようにディスク上の固定位置に設定ファイルがあることを前提としているブートローダを使用している場合、xfs_fsrでデフラグしたためにそのファイルが移動してしまって、その仕組みが機能しなくなる恐れがある。そのような場合には、xfs_ioコマンドを使って特定のファイルやディレクトリに対してno-defragという特別なフラグを付けることで、xfs_fsrがそのようなファイルをデフラグしてしまうのを回避することができる。なおno-defragをディレクトリに指定した場合には、no-defragが指定されたディレクトリ内のファイルやディレクトリについてはno-defragフラグが継承される。xfs_fsrのマニュアルページに、no-defragフラグについてのより詳しい情報や設定方法がある。