現在地

今から始めるRHEL 7 第2回 標準ファイルシステムとなったXFS


RHEL 7では、標準のファイルシステムとしてXFSが採用されました。RHEL 6以前の標準ファイルシステムには長い間ext系ファイルシステムが使われてきましたが、XFSに切り替わったことでファイルシステムの設定、運用の方法などが従来とは異なってきます。

今回はXFSの概要、主な特徴、ext系ファイルシステムとの管理コマンドの違い、設定のポイントについて紹介していきます。

XFSの概要

XFSは、もともと旧SGI(Silicon Graphics Inc.)社がIRIX上で動くハイエンド向けのファイルシステムとして開発していました。

RHEL 6以前の標準ファイルシステムにはext2、ext3、ext4が採用されてきました(*1)が、これらのファイルシステムとXFSが異なる点は、XFSは初期の段階からスケーラビリティを考慮し、ハイエンドシステムをターゲットとしていたことです。昨今では、多数のプロセッサーやディスクアレイを搭載したサーバーに大容量ファイルシステムを構築するなどの要件もあり、ext系ファイルシステムではスケーラビリティの限界が見えつつあります。

RHEL 7の標準ファイルシステムとしてXFSが採用されたのはこのような背景によるもので、十分な実績とスケーラビリティをもつXFSは多くのシステムに活用されることが期待されています。

*1:RHEL 5、6でも有償のアドオンとしてXFSは利用可能です。RHEL 7のXFSは無償でサポートを受けられるようになりました。

RHEL 7 XFSの主な特徴

RHEL 7 XFSの主な特徴として、以下のようなものが挙げられます。

  • サポート上限の向上
    RHEL 6 ext4ではファイルサイズ、ファイルシステムサイズともにサポート上限が16TBであったのに対し、RHEL 7 XFSでは両者ともに500TBまでサポートされます。
  • ジャーナリング
    ext3、ext4と同様に、メタデータ更新中に不意の電源断・リブートなどが発生した場合でも、ファイルシステムの整合性が保証されます。
  • アロケーショングループ
    ファイルシステム全体を複数のアロケーショングループと呼ばれる領域に分割し、それぞれのアロケーショングループ単位でinodeや空き領域を管理することで、マルチプロセッサーによる並列処理が可能になります。
  • エクステント
    ファイルデータはエクステントと呼ばれる可変長の連続ブロック領域に格納され、各エクステントは開始ブロックとブロック数、ファイル内での論理オフセットの3つの値により管理されます。連続ブロックに格納することでシーク時間の短縮などの効果が得られます。
  • 遅延アロケーション
    ページキャッシュへの書き込み時にはディスク上のブロック割り当てを行わず、ダーティページがディスクへ書き出される時に適切なブロックの配置を決定することで、ディスクフラグメンテーションの回避や、I/Oの高速化を実現します。

XFSとext系ファイルシステムの管理コマンドの比較

XFSに対して使用するコマンドは、多くがext系ファイルシステムとは異なります。XFSとext4で使用するコマンドの対応を、表1に示します。

表1 XFSとext4で機能ごとに使用するコマンドの対応

機能 XFS ext4
ファイルシステムの作成 mkfs.xfs, (mkfs -t xfs) mke2fs, mkfs.ext4, (mkfs -t ext4)
ファイルシステムの情報表示 xfs_info dumpe2fs
ファイルシステムのマウント mount mount
ファイルシステムのメタデータの変更 xfs_admin tune2fs
ファイルシステムのチェック、修復 xfs_repair e2fsck, fsck.ext4
ファイルシステムのバックアップ xfsdump dump
ファイルシステムのリストア xfsrestore restore
ファイルシステムの拡張 xfs_growfs resize2fs
ファイルシステムのクォータ設定 xfs_quota quota, quotaon, repquotaなど
ファイルのディスク上のブロック一覧表示 xfs_bmap filefrag
ファイルシステムのデフラグ xfs_fsr e4defrag
ファイルシステムの一時停止 xfs_freeze, fsfreeze fsfreeze

これらの各コマンドにはさまざまなオプションが存在しますが、ここでは説明は割愛します。詳細についてはRHEL同梱のオンラインマニュアル(manコマンド)、Red Hat 社のドキュメント(*2)、XFS.org(*3)などを参照してください。

*2:Red Hat Enterprise Linux 7 ストレージ管理ガイド 第6章 XFS ファイルシステム(日本語)
       Red Hat Enterprise Linux 7 PERFORMANCE TUNING GUIDE 5.3.7. Configuring file systems for performance(英語)

*3:XFS User Guide(英語)

XFSの設定のポイント

ほとんどのシステムでは特別なチューニングを行うことなくデフォルトの状態でXFSを利用できますが、要件によっては設定次第で性能が向上する可能性があります。例えば、RAIDアレイ上にXFSを構築する場合、ストライプユニットをRAIDアレイのストライプユニットと一致させることにより、性能向上が期待できます。ストレージデバイスがOSに自身のストライプユニットを通知している場合は、特にユーザーが設定する必要はありません。手動でストライプユニット、ストライプ幅を設定する場合、以下のようにしてファイルシステムを作成します。

# mkfs.xfs -d su=64k,sw=4 /dev/sda1

suはファイルシステムのストライプユニット、swはストライプ幅を意味します。swにはストライピングを構成するハードディスクの数(パリティディスクは含まない)を設定します。

上記の設定をした場合、ジャーナル領域へのログ書き込みのストライプユニットも同様の値に設定されます(上記の例では64kB)。もし同期書き込みが多いワークロードでXFSを使用する場合、ログ書き込みのストライプユニットが大きいと性能低下の原因となることがあります。そのような場合、以下のようにログ書き込みのストライプユニットを最小値(1ブロックサイズ:通常は4kB)に設定すると性能が改善するかもしれません。

# mkfs.xfs -d su=64k,sw=4 -l su=4k /dev/sda1

また、ログ書き込みのオーバヘッドを改善する対処策としては、ログが書き出されるジャーナル領域を、データ用の領域として使用するデバイスとは別に用意するという方法も考えられます。
その場合、以下のようにしてファイルシステムを作成します。

# mkfs.xfs -d su=64k,sw=4 -l logdev=/dev/sdb1 /dev/sda1

上記コマンドでは、データ用の領域を/dev/sda1に、ジャーナル領域を/dev/sdb1に作成しています。

まとめ

駆け足ではありましたが、今回はXFSについての概要、主な特徴、管理コマンド、設定のポイントについて解説しました

次回はsystemdについて説明します。

(鈴木 章太)