第8章 XFS ファイルシステム

XFS は拡張性、パフォーマンス性が高いファイルシステムで、元々は Silicon Graphics, Inc で設計されたファイルシステムでした。巨大なファイルシステム (最大 16 エクサバイト) やファイル群 (8 エクサバイト)、ディレクトリー構造 (数千万のエントリー数) などに対応する目的で作成されました。
主な特長
XFS はクラッシュからの迅速なリカバリーを容易にする メタデータジャーナリング に対応します。また、XFS ファイルシステムはマウント後のアクティブな状態でのデフラグや拡張も可能です。さらに Red Hat Enterprise Linux 6 では XFS 固有のバックアップや復元を行うユーティリティーにも対応しています。
割り当て機能
XFS には以下のような割り当てスキームが備わっています。
  • エクステント (領域) ベースの割り当て
  • ストライプを認識できる割り当てポリシー
  • 遅延割り当て
  • 領域の事前割り当て
遅延割り当てやその他のパフォーマンス最適化は、ext4 に対するのと同様に XFS ファイルシステムに影響を与えます。つまり、プログラムによる XFS ファイルシステムへの書き込みは、書き込み後にそのプログラムが fsync() 呼び出しを実行しない限りオンディスクになるとは限りません。
ファイルシステム (ext4 および XFS) での遅延割り当ての影響についてさらに詳しくは、6章Ext4 ファイルシステム割り当て機能 を参照してください。
XFS ファイルシステムのその他の機能
XFS ファイルシステムは次のような機能にも対応しています。
拡張属性 (xattr)
このシステムにより、ファイルごとの名前と値の複数の組み合わせを追加で関連付けられるようになります。これはデフォルトで有効にされます。
クォータのジャーナリング
クラッシュ後に行なわれる長い時間のかかるクォータの整合性チェックが不要になります。
プロジェクト/ディレクトリーのクォータ
ディレクトリーツリー全体にクォータ制限を適用することができます。
サブセカンドのタイムスタンプ
タイムスタンプをサブセカンド (1 秒未満) 単位にできます。

8.1. XFS ファイルシステムの作成

XFS ファイルシステムを作成するには、mkfs.xfs /dev/device コマンドを使用します。通常、一般的な使用にはデフォルトのオプションが最適となります。
既存のファイルシステムを含むブロックデバイス上で mkfs.xfs を使用する場合は、-f オプションを使ってそのファイルシステムの上書きを強制します。

例8.1 mkfs.xfs コマンドの出力

以下に mkfs.xfs コマンドの出力例を示します。
meta-data=/dev/device            isize=256    agcount=4, agsize=3277258 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=13109032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

注記

XFS ファイルシステムを作成後にサイズを縮小することはできません。ただし、xfs_growfs コマンドを使ってサイズを拡大することはできます (「XFS ファイルシステムのサイズの拡大」を参照)。
ストライプ化されたブロックデバイス (RAID5 アレイなど) の場合、ファイルシステムの作成時にストライプの配列を指定することができます。適切なストライプ配列を使用することで XFS ファイルシステムのパフォーマンスが飛躍的に高まります。
ファイルシステムを LVM ボリュームや MD ボリューム上に作成すると、mkfs.xfs によって最適な配列が選択されます。配列情報をオペレーティングシステムにエクスポートするハードウェア RAID の場合、同様に最適な配列の選択を行うものがあります。
ストライプの配列を指定する場合は以下の mkfs.xfs サブオプションを使用します。
su=value
ストライプユニットまたは RAIDのチャンクサイズを指定します。value はバイト単位で指定します。オプションで kmg などを後ろに付けます。
sw=value
1 RAID デバイス内のデータディスク数または 1 ストライプ内のストライプユニット数を指定します。
以下の例では、チャンクサイズが 64k、ストライプユニット数が 4 つの RAID デバイスを指定しています。
# mkfs.xfs -d su=64k,sw=4 /dev/device
XFS ファイルシステムの作成方法についてさらに詳しくは、man mkfs.xfs を参照してください。