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

XFS は、拡張性とパフォーマンスが高いファイルシステムで、元々は Silicon Graphics, Inc. で設計されたファイルシステムでした。XFS は、Red Hat Enterprise Linux 7 のデフォルトのファイルシステムです。
主な特長
XFS は、クラッシュからの迅速なリカバリーを容易にする メタデータジャーナリング に対応します。また、XFS ファイルシステムは、マウント後のアクティブな状態でのデフラグや拡張も可能にします。さらに Red Hat Enterprise Linux 7 では、XFS 固有のバックアップや復元を行うユーティリティーにも対応しています。
割り当て機能
XFS には以下のような割り当てスキームが備わっています。
  • エクステント (領域) ベースの割り当て
  • ストライプを認識できる割り当てポリシー
  • 遅延割り当て
  • 領域の事前割り当て
遅延割り当てやその他のパフォーマンス最適化は、ext4 だけでなく XFS ファイルシステムにも影響を与えます。つまり、プログラムによる XFS ファイルシステムへの書き込みは、書き込み後にそのプログラムが fsync() 呼び出しを実行しない限り、オンディスクになるとは限りません。
ファイルシステム (ext4 および XFS) での遅延割り当ての影響に関する詳細は、5章Ext4 ファイルシステムの 『割り当て機能』 を参照してください。

注記

ディスク領域に空きがある場合でも、ファイルの作成および展開を実行すると、ENOSPIC で予期しない書き込みエラーが出て失敗する場合があります。これは XFS の設計がパフォーマンス志向型であるために生じます。ただし、これは残りの領域が数ブロック程度である場合にのみ生じるため、実際には問題にはなりません。
XFS ファイルシステムのその他の機能
XFS ファイルシステムは次のような機能にも対応しています。
拡張属性 (xattr)
このシステムにより、各ファイルの、名前と値の組み合わせを追加で関連付けられるようになります。これはデフォルトで有効になります。
クォータのジャーナリング
クラッシュ後に行なわれる時間がかかるクォータの整合性チェックが不要になります。
プロジェクト/ディレクトリーのクォータ
ディレクトリーツリー全体にクォータ制限を適用することができます。
サブセカンド (1 秒未満) のタイムスタンプ
タイムスタンプをサブセカンド (1 秒未満) 単位にできます。
デフォルトの atime の動作は relatime
XFS のデフォルトでは Relatime が有効になっています。noatime と比較すると Relatime のオーバヘッドはほとんどなく、同じ atime の値を維持します。

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

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

例3.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 (ext3、ext4、および xfs 用) がこの配列を自動的に使用します。ストライプの配列が、ストレージにストライプの配列があるにもかかわらず mkfs によって検出されない場合は、以下のオプションを使用し、mkfs の実行時にストライプの配列を手動で指定することができます。
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 および 『Red Hat Enterprise Linux パフォーマンスチューニングガイド』 の 『Basic Tuning for XFS』 の章を参照してください。