| 開発者 | |
|---|---|
| フルネーム | XFS |
| 紹介された | 1994年、IRIX 5.3 (1994年) |
| パーティションID | |
| 構造 | |
| ディレクトリの内容 | B+ツリー |
| ファイルの割り当て | B+ツリー |
| 制限 | |
| 最大ボリュームサイズ | 8 エクスビバイト − 1バイト |
| 最大ファイルサイズ | 8 エクスビバイト − 1バイト |
| 最大ファイル数 | 2 64 [ 2 ] |
| ファイル名の最大長 | 255 バイト |
| ファイル名に使用できる文字 | NULと「/」を除くすべて |
| 特徴 | |
| 記録された日付 | atime、mtime、ctime、[ 3 ]バージョン5: crtime [ 4 ] |
| 日付範囲 | 1901年12月13日 – 2486年7月2日[ 5 ] |
| 日付解決 | 1ナノ秒 |
| 属性 | はい |
| ファイルシステムの権限 | はい |
| 透過的な圧縮 | いいえ |
| 透過的な暗号化 | いいえ(ブロックデバイスレベルで提供) |
| データ重複排除 | 実験的、Linuxのみ[ 6 ] |
| 他の | |
| サポートされているオペレーティングシステム | |
XFSは、1993年にSilicon Graphics, Inc (SGI)によって作成された高性能な64ビットジャーナリングファイルシステムです。 [ 7 ] SGIのIRIXオペレーティングシステムのバージョン5.3以降では、デフォルトのファイルシステムでした。XFSは2001年にLinuxカーネルに移植され、2014年6月現在、ほとんどのLinuxディストリビューションでサポートされており、Red Hat Enterprise Linuxではデフォルトのファイルシステムとして使用されています。
XFS は、アロケーション グループ(XFS が使用される物理ボリュームの一種の細分化で、AGとも略される)に基づいた設計により、並列入出力(I/O) 操作の実行に優れています。このため、XFS では、複数の物理ストレージ デバイスにまたがる場合の I/O スレッド、ファイル システムの帯域幅、ファイル サイズ、およびファイル システム自体のサイズの極めて高いスケーラビリティが実現されます。XFS は、メタデータジャーナリングを使用し、書き込みバリアをサポートすることで、データの一貫性を保証します。スペース割り当ては、 B+ ツリーに格納されたデータ構造を持つエクステントによって実行されるため、特に大きなファイルを処理する場合に、ファイル システム全体のパフォーマンスが向上します。遅延割り当てによってファイル システムの断片化を防ぐことができ、オンラインでのデフラグもサポートされています。
シリコングラフィックスは、1993年にUNIX System VベースのIRIXオペレーティングシステム向けにXFS [ 8 ](「X」は後から埋められる予定だったが、結局埋められなかった)の開発を開始した。このファイルシステムは1999年5月にGNU General Public License (GPL)の下でリリースされた。[ 9 ]
SGIのスティーブ・ロード率いるチームがXFSをLinuxに移植し[ 10 ] 、 Linuxディストリビューションによる最初のサポートは2001年に開始されました。このサポートは徐々にほぼすべてのLinuxディストリビューションで利用できるようになりました。[ 11 ]
LinuxカーネルにおけるXFSの初期サポートは、SGIからのパッチを通じて実現しました。XFSは2.6シリーズでLinuxカーネルのメインラインに統合され、2004年2月には2.4シリーズのバージョン2.4.25に別途統合されました。 [ 12 ]これにより、XFSはほぼすべてのLinuxシステムで利用可能になりました。[ 13 ] Gentoo Linuxは、 2002年半ばにXFSをデフォルトのファイルシステムとして選択できるオプションを導入した最初のLinuxディストリビューションとなりました。[ 14 ]
FreeBSDは2005年12月にXFSの読み取り専用サポートを追加し、2006年6月には試験的に書き込みサポートを導入しました。しかし、これはLinuxからの移行を支援するためのものであり、「メイン」ファイルシステムとして採用されることはありませんでした。FreeBSD 10ではXFSのサポートが削除されました。[ 15 ]
2009年、64ビット版Red Hat Enterprise Linux(RHEL)Linuxディストリビューションのバージョン5.4には、XFSファイルシステムの作成と使用に必要なカーネルサポートが含まれていましたが、対応するコマンドラインツールがありませんでした。CentOSで提供されているツールはXFSファイルシステムの作成と使用に使用でき、Red HatはRHELの顧客からのリクエストに応じてこれらのツールを提供していました。[ 16 ] 2010年にリリースされたRHEL 6.0には、Red Hatの「スケーラブル・ファイルシステム・アドオン」の一部として、XFSサポートが有料で含まれています。[ 17 ] 2011年にリリースされたOracle Linux 6にも、XFSを使用するオプションが含まれています。[ 18 ]
2014年6月にリリースされたRHEL 7.0では、デフォルトのファイルシステムとしてXFSが採用されており[ 19 ] 、パーティションにXFSを使用するサポートも含まれていますが、これは以前はGRUB/bootブートローダのバグのために実用的ではありませんでした[ 20 ]。
2016年8月のLinuxカーネル4.8では、「リバースマッピング」という新機能が追加されました。これは、スナップショット、コピーオンライト(COW)データ、データ重複排除、reflinkコピー、オンラインデータおよびメタデータスクラビング、データ損失または不良セクタの高精度レポート、そして破損または破壊されたファイルシステムの再構築機能の大幅な改善といった、今後予定されている多数の機能の基盤となります。この作業には、XFSのオンディスクフォーマットの変更が必要でした。[ 21 ] [ 22 ]

2020年12月にリリースされたLinuxカーネル5.10には、新しいオンディスクフォーマットであるXFS v5が含まれていました。これは大きな変更でした。廃止されたXFS v4はXFS v5に変換できないためです。XFS v4でフォーマットされたパーティションのデータは、古いパーティションをXFS v5でフォーマットした後に復元するために、別のパーティションまたはメディアにバックアップする必要があります。XFS v4のサポートは、2030年9月にLinuxカーネルから削除されます。[ 23 ] [ 24 ]
XFS v5では「bigtime」が導入され、従来の32ビット秒カウンタではなく、64ビットナノ秒カウンタとしてinodeタイムスタンプを保存できるようになりました。これにより、2038年問題は2486年まで延期されます。 [ 5 ]また、メタデータチェックサムも導入されました。
Gentoo Linuxの公式インストールマニュアルであるGentooハンドブックは、2023年6月28日からExt4の後継としてXFSを「汎用・全プラットフォームファイルシステム」として推奨している。[ 25 ]
XFSは64ビットファイルシステム[ 26 ]であり、最大8エクスビバイトマイナス1バイト(2の63乗 −1バイト)のファイルシステムサイズをサポートしていますが、ホストオペレーティングシステムによって課せられる制限により、この制限が減少する可能性があります。32ビットLinuxシステムでは、ファイルとファイルシステムの両方のサイズが16テビバイトに制限されています。
現代のコンピューティングにおいて、ジャーナリングとは、停電やシステムクラッシュといった状況下でもファイルシステム内のデータの一貫性を確保する機能です。XFSはファイルシステムメタデータのジャーナリング機能を提供します。XFSでは、ファイルシステムの更新は、実際のディスクブロックが更新される前に、まずシリアルジャーナルに書き込まれます。ジャーナルはディスクブロックの循環バッファであり、通常のファイルシステム操作では読み込まれません。
XFS ジャーナルは、ファイルシステムのデータセクション内 (内部ログとして) に保存することも、ディスクの競合を最小限に抑えるために別のデバイスに保存することもできます。
XFSでは、ジャーナルには主に、ファイルシステム操作によって変更されたディスクブロックの部分を記述するエントリが含まれます。ジャーナルの更新は、パフォーマンスの低下を防ぐため、非同期的に実行されます。
システムクラッシュが発生した場合、クラッシュ直前に実行されたファイルシステム操作はジャーナルに記録された通りに再適用され、完了します。これにより、XFSファイルシステムに格納されたデータの一貫性が維持されます。リカバリは、クラッシュ後にファイルシステムが最初にマウントされたときに自動的に実行されます。リカバリの速度はファイルシステムのサイズに依存せず、再適用されるファイルシステム操作の量に依存します。
XFSファイルシステムは、内部的にアロケーショングループに分割されます。アロケーショングループは、ファイルシステム内の均等なサイズの線形領域です。ファイルとディレクトリは、アロケーショングループをまたいで配置できます。各アロケーショングループは、独自のinodeと空き領域を個別に管理することで、スケーラビリティと並列性を実現し、複数のスレッドとプロセスが同じファイルシステムに対して同時にI/O操作を実行できます。
このアーキテクチャは、メタデータの更新も並列化できるため、複数のプロセッサやコアを搭載したシステムにおける並列I/Oパフォーマンスの最適化に役立ちます。アロケーショングループによる内部パーティショニングは、ファイルシステムが複数の物理デバイスにまたがる場合に特に効果的であり、基盤となるストレージコンポーネントのスループットを最適に活用できます。
ストライプ化されたRAIDアレイ上にXFSファイルシステムを作成する場合、ファイルシステムの作成時にストライプユニットを指定できます。これにより、データ割り当て、inode割り当て、および内部ログ(ジャーナル)がストライプユニットに整合され、スループットが最大化されます。
XFSファイルシステムに保存されたファイルで使用されるブロックは、可変長エクステントで管理されます。1つのエクステントは、1つまたは複数の連続したブロックを表します。これにより、ファイルで使用されるすべてのブロックを個別にリストするファイルシステムと比較して、ブロックのリストを大幅に短縮できます。
ブロック指向ファイルシステムは、1つまたは複数のブロック指向ビットマップを用いて空間割り当てを管理します。XFSでは、これらの構造は、ファイルシステム割り当てグループごとに2つのB+ツリーで構成されるエクステント指向構造に置き換えられます。B+ツリーの1つは空きエクステントの長さでインデックス付けされ、もう1つは空きエクステントの開始ブロックでインデックス付けされます。この二重インデックス方式により、ファイルシステム操作において空きエクステントを非常に効率的に割り当てることができます。
ファイルシステムのブロックサイズは、最小の割り当て単位を表します。XFSでは、512バイトから64KBまでのブロックサイズでファイルシステムを作成できるため、予想される使用頻度に合わせてファイルシステムを調整できます。小さなファイルが多く使用されることが予想される場合、通常は小さなブロックサイズで容量を最大化できますが、主に大きなファイルを扱うシステムでは、大きなブロックサイズの方がパフォーマンス効率が向上する場合があります。
XFSはファイル割り当てに遅延評価技術を採用しています。ファイルがバッファキャッシュに書き込まれる際、XFSはデータのエクステントを割り当てるのではなく、メモリに保持されているデータに対して適切な数のファイルシステムブロックを予約するだけです。実際のブロック割り当ては、データが最終的にディスクにフラッシュされた時点でのみ行われます。これにより、ファイルが連続したブロックグループに書き込まれる可能性が高まり、断片化の問題が軽減され、パフォーマンスが向上します。
XFSは各ファイルに64ビットのスパースアドレス空間を提供します。これにより、非常に大きなファイルサイズと、ファイル内にディスク領域が割り当てられていない「ホール」の両方を許容します。ファイルシステムは各ファイルにエクステントマップを使用するため、ファイルアロケーションマップのサイズは小さく抑えられます。アロケーションマップのサイズが大きすぎてinodeに格納できない場合は、マップはB+ツリーに移動されます。これにより、ファイルに提供される64ビットアドレス空間内の任意の場所にあるデータに高速にアクセスできます。
XFSはファイルに複数のデータストリームを提供します。これは、拡張属性の実装によって可能になります。これにより、ファイルに複数の名前と値のペアを関連付けて保存できます。名前は最大256バイトのNULL終端された印刷可能な文字列であり、関連付けられた値には最大64KBのバイナリデータを含めることができ ます。
これらはさらに と の 2 つの名前空間に分割されますroot。userルート名前空間に格納された拡張属性はスーパーユーザーのみが変更できますが、ユーザー名前空間の属性はファイルへの書き込み権限を持つすべてのユーザーが変更できます。
拡張属性は、シンボリックリンク、デバイスノード、ディレクトリなど、あらゆる種類のXFS inodeに付加できます。このattrユーティリティを使用すると、コマンドラインから拡張属性を操作できます。また、xfsdumpおよびxfsrestoreユーティリティは拡張属性を認識し、その内容をバックアップおよび復元します。他の多くのバックアップシステムは、拡張属性の操作をサポートしていません。
ディスクへの高スループットを必要とするアプリケーション向けに、XFSはダイレクトI/O実装を提供します。これにより、キャッシュされないI/O操作をユーザー空間に直接適用できます。データはアプリケーションのバッファとディスク間でDMAを使用して転送され、基盤となるディスクデバイスのI/O帯域幅全体を利用できます。
XFSはまだスナップショットを直接サポートしていません[ 27 ]。xfs_freezeこれは、スナップショット処理がボリュームマネージャによって実装されることを想定しているためです。XFSファイルシステムのスナップショットを取得するには、ユーティリティを使用してファイルシステムへのI/Oを一時的に停止し、ボリュームマネージャに実際のスナップショットを実行させ、その後I/Oを再開して通常の操作を続行します。その後、スナップショットはバックアップ目的で読み取り専用でマウントできます。
IRIXのXFSリリースには、XLVと呼ばれる統合ボリュームマネージャが組み込まれていました。このボリュームマネージャはLinuxには移植されておらず、XFSはLinuxシステムの 標準LVMで動作します。
最近のLinuxカーネルでは、このxfs_freeze機能はVFS層に実装されており、ボリュームマネージャのスナップショット機能が呼び出されると自動的に実行されます。これはかつて、ext3ファイルシステムをサスペンドすることができず[ 28 ]、ボリュームマネージャが高負荷のデータベースをバックアップするための一貫性のある「ホット」スナップショットを作成できなかったため、大きな利点でした[ 29 ] 。幸いなことに、これはもはや当てはまりません。Linux 2.6.29以降、ファイルシステムext3、ext4、GFS2、JFSにもフリーズ機能が搭載されています[ 30 ] 。
XFSのエクステントベースの性質とそれが使用する遅延割り当て戦略は、ファイルシステムの断片化問題に対する耐性を大幅に向上させますが、XFSは、マウントされたアクティブなXFSファイルシステム上のファイルをデフラグできるファイルシステムデフラグユーティリティ(xfs_fsr、XFSファイルシステムリオーガナイザーの略)を提供します。[ 31 ]
XFSは、xfs_growfsXFSファイルシステムのオンライン拡張を実行するユーティリティを提供します。XFSファイルシステムは、ファイルシステムを保持するデバイスに未割り当て領域が残っている限り拡張できます。この機能は通常、ボリューム管理と組み合わせて使用されます。そうでない場合、ファイルシステムを保持するパーティションを別途拡張する必要があります。
XFSは、 IRIXの階層型ストレージ管理をサポートするためにDMAPIインターフェースを実装しました。2010年10月時点で、XFSのLinux実装はDMAPI実装に必要なディスク上のメタデータをサポートしていましたが、カーネルのサポートは使用できないと報告されていました。SGIはしばらくの間、DMAPIフックを含むカーネルツリーをホストしていましたが、カーネル開発者はこのサポートを最新のものにする意向を表明しているにもかかわらず、このサポートは適切にメンテナンスされていませんでした。[ 32 ]
XFS 保証レート I/O システムは、アプリケーションがファイルシステムへの帯域幅を予約できる API を提供します。XFS は、基盤となるストレージデバイスから利用可能なパフォーマンスを動的に計算し、指定された時間、要求されたパフォーマンスを満たすのに十分な帯域幅を予約します。これは XFS ファイルシステム固有の機能です。保証レートは「ハード」または「ソフト」のいずれかに設定でき、信頼性とパフォーマンスのトレードオフを表します。ただし、XFS は、基盤となるストレージサブシステムがサポートしている場合にのみ「ハード」保証を許可します。この機能は、主にビデオストリーミングなどのリアルタイムアプリケーションで使用されます。
保証レートI/OはIRIXでのみサポートされており、そのためには特別なハードウェアが必要でした。[ 33 ]
カーネル3.17以降でIRIX XFSボリュームをマウントし、書き込みやFsckの実行を試みると、ファイルシステムが破損します。IRIXはディレクトリ構造v2のままですが、XFSはそれ以降のバージョンでv3~v5を導入し、カーネル3.17あたりでディレクトリ構造v2を廃止しました。[ 34 ]以降のLinuxカーネルでは、データの損失や破損が発生します。[ 35 ]
Extents File System (XFS)
を作成し、[...] 後にそのコードを Linux に寄贈しました。
Linux 6には、[...] XFS [:] Oracle Linux 6には、オプションのファイルシステムとしてXFSが含まれています。