XFS

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、MandrivaSlackware、KateOS、Zenwalk、Ubuntu、Debian、FedoraArch 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アーキテクチャ間での互換性の問題が発生する場合がある。
電源断時にはメタデータは保護されるが、データの変更は保証されない(他のファイルシステムも同様)。
ディレクトリエントリの作成と削除が遅い場合がある。
SELinux環境下で、拡張属性がinodeに収まらない場合に性能劣化が起こりやすい。

これらの欠点は、一部の特殊な状況下でのみ問題となるものであり、XFSの基本的な信頼性や高性能を損なうものではありません。

出典


脚注

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。