XFS (eXtents File System) の詳細解説
XFSは、
シリコングラフィックスが同社の
IRIXオペレーティングシステムのために開発した、高性能な
ジャーナリングファイルシステムです。その設計は、大規模なデータ管理と高い信頼性を目指しており、多くの
Linuxディストリビューションで採用されています。
歴史
XFSは、
UNIXシステムにおける最古の
ジャーナリングファイルシステムの一つであり、その成熟度と安定性には定評があります。
1993年に開発が開始され、翌年には
IRIX 5.3に初搭載されました。
2000年5月にはGPLライセンスで公開され、
Linuxへの移植が始まりました。
2001年から
2002年頃には、いくつかの
ディストリビューションでサポートが開始されました。
Red Hat Enterprise
Linux(RHEL)では、以前は有償のアドオンとして提供されていましたが、RHEL7以降は標準
ファイルシステムとして採用されています。
Linuxカーネルへの統合は、
2002年に開発版、
2004年に安定版へと進みました。
現在では、
SUSE、Gentoo、
Mandriva、
Slackware、KateOS、Zenwalk、
Ubuntu、Debian、
Fedora、
Arch Linuxなど、ほぼすべての
Linuxシステムで利用可能です。FreeBSDでも、
2005年12月から読み込みサポート、
2006年6月からは実験的な書き込みサポートが開始されています。
ただし、XFSは
ファイルシステムの先頭ブロックをスーパーブロックとして使用するため、ブートローダーをインストールすることができません。この仕様は
IRIXとの互換性を維持するために変更の予定はないとされています。
仕様
容量
XFSは64
ビットの
ジャーナリングファイルシステムであり、最大8EiBまでの
ファイルシステムサイズをサポートします。ただし、ホストOSの仕様により、より少ない容量に制限されることがあります。例えば、32
ビットLinuxでは最大16TiBです。
ジャーナリング
XFSは
ファイルシステムの
メタデータをジャーナリングします。これにより、
ファイルシステムへの変更はまずジャーナルに書き込まれ、その後で実際のブロックが更新されます。ジャーナルは
リングバッファとしてディスク上の特定の領域に確保されます。内部ジャーナルと外部ジャーナルの2種類があり、外部ジャーナルを使用するとディスク操作の競合を避けることができます。
XFSのジャーナルは、「論理的な」エントリで構成されており、変更内容が高レベルで表現されます。これにより、高速な復旧が可能になります。システムクラッシュ時には、ジャーナルを利用してクラッシュ直前の操作を再実行し、
ファイルシステムの整合性を保ちます。復旧は
マウント時に自動的に行われ、
ファイルシステムのサイズに依存しません。未書き込みのデータブロックは、復旧時にゼロで置換されます。
アロケーショングループ
XFS
ファイルシステムは、複数のアロケーショングループに分割されます。各グループは独立したinode空間と空き領域を持ち、並列処理とスケーラビリティを向上させます。これにより、複数のスレッドや
プロセスが同時に
ファイルシステムにアクセスでき、マルチプロセッサ環境でのI/Oパフォーマンスが向上します。
ストライプアロケーション
RAIDアレイ上にXFS
ファイルシステムを作成する際には、ストライプ単位を
RAIDアレイのストライプ単位と一致させることで、
スループットを最大化できます。
エクステントの利用
XFSでは、ファイルデータを格納するブロックをエクステントと呼ばれる構造で管理します。エクステントは連続したブロックの範囲を指し示すことができ、
ファイルシステム全体のスペース効率を向上させます。アロケーション管理にはB+木が使用されており、効率的なエクステントの探索と管理が可能です。
可変ブロックサイズ
ファイルシステムのブロックサイズは、512バイトから64
キロバイトまで可変であり、
ファイルシステムの作成時に用途に合わせて指定できます。小さなファイルを多数扱う場合は小さなブロックサイズ、大きなファイルが中心の場合は大きなブロックサイズが適しています。
遅延アロケーション
XFSは遅延書き込みの技術を用いてファイルアロケーションを行います。バッファキャッシュにファイルが書き込まれると、直ちにエクステントを割り当てるのではなく、ディスクにフラッシュされるタイミングで割り当てます。これにより、ファイルの連続性を高め、
フラグメンテーションを減少させます。
スパースファイル
XFSでは、各ファイルに64
ビットのスパースな
アドレス空間が利用可能です。これにより、大きなサイズのファイルに「穴」を持たせることができ、ディスクスペースを効率的に利用できます。ファイルのアロケーションマップはB+木で管理され、巨大な空間でも迅速なアクセスが可能です。
拡張属性
XFSでは、複数のデータストリームを一つのファイルに格納できる拡張属性が利用可能です。これにより、name/valueのペアをファイルに付加でき、最大256バイトのnameと最大64
キロバイトの
バイナリデータを格納できます。拡張属性はrootとuserの2つの
名前空間に分けて記録でき、アクセス権限を制御できます。これらの拡張属性は、シンボリックリンク、
デバイスノード、
ディレクトリなど、あらゆる種類のinodeに付加できます。
ダイレクトI/O
ディスク
スループットを必要とするアプリケーションのために、キャッシュされないダイレクトI/Oが提供されます。これにより、アプリケーションのバッファからディスクにデータを直接転送でき、
デバイスのI/O帯域を最大限に利用できます。
I/O帯域保証
XFSは、保証された帯域幅でのファイル
入出力を可能にするAPIを提供します。帯域保証にはhardとsoftの2種類があり、hardはディスクサブシステムがサポートしている場合のみ利用可能です。この機能は、ビデオ
ストリーミングのようなリアルタイムアプリケーションで利用されます。
DMAPI
XFSは、
階層型ストレージ管理をサポートするためのDMAPIインタフェースを実装しています。
スナップショット
XFSはスナップショット機能は提供しておらず、OSやボリュームマネージャによって提供されることを想定しています。XFSは
ファイルシステムの凍結機能(xfs_freeze)を提供しており、スナップショット作成を補助します。
オンラインデフラグ
XFSは、エクステントと遅延アロケーションにより断片化に強いですが、デフラグツール(xfs_fsr)も用意されています。これは
マウントされたままの
ファイルシステムをデフラグできます。
オンラインリサイズ
XFSには、オンラインリサイズツール(xfs_growfs)があり、未使用スペースがある場合に
ファイルシステムを拡張できます。
ネイティブなバックアップ/復元ツール
XFSには、
バックアップツール(xfsdump)とリストアツール(xfsrestore)が用意されています。xfsdumpはinode順を保持したまま
バックアップが可能で、オンラインでの
バックアップとリストアをサポートします。
欠点
x86 Linux環境では、ブート可能パーティションにできない(先頭セクタがXFSに使用されるため)。
削除されたファイルの復元が困難である。
異なるCPUアーキテクチャ間での互換性の問題が発生する場合がある。
電源断時には
メタデータは保護されるが、データの変更は保証されない(他の
ファイルシステムも同様)。
ディレクトリエントリの作成と削除が遅い場合がある。
SE
Linux環境下で、拡張属性がinodeに収まらない場合に性能劣化が起こりやすい。
これらの欠点は、一部の特殊な状況下でのみ問題となるものであり、XFSの基本的な信頼性や高性能を損なうものではありません。
出典
脚注