XFS

From Wikipedia, the free encyclopedia

正式名 XFS
導入 1994年 (IRIX v5.3)
ディレクトリ B+ 木
XFS
開発者 シリコングラフィックス
正式名 XFS
導入 1994年 (IRIX v5.3)
構造
ディレクトリ B+ 木
領域管理 extent based
限度
最大ファイル サイズ 8EiB
最大ファイル名長 255バイト
最大ボリューム サイズ 8EiB
ファイル名の文字 NULと / 以外使用可能
特徴
タイムスタンプ あり
日付分解能 1ナノ秒
フォーク あり(条件付)
パーミッション あり
透過的圧縮 なし
透過的暗号化 なし(ブロック デバイス レベルでの実装を想定)
重複排除 無し
対応OS IRIX, Linux, FreeBSD
テンプレートを表示

XFS (eXtents File System)は、シリコングラフィックスが同社のIRIXオペレーティングシステムのために開発した高性能ジャーナリングファイルシステムである。

XFSは(JFSと共に)UNIXシステムで最古のジャーナリングファイルシステムの一つであり、 成熟し安定し、コードはよくデバッグされている[要出典]。 XFSの開発はシリコングラフィックスにより1993年に開始され、翌年[要出典]IRIX 5.3において初めて搭載された[1]

XFSは2000年5月GPLで公開されると共にLinuxへの移植が開始され[2][3]2001 - 2002年ごろにはサポートするディストリビューションが現れた[4]Red Hat Enterprise Linux(RHEL)ではバージョン5.4以降「Scalable File Systemアドオン」という名前でXFSの有償サポートを行っていたが、RHEL7では/bootを含めた標準ファイルシステムとしてXFSを採用した。 XFSは2002年に開発版メインラインであるLinux 2.5 カーネルに、次いで2004年に安定版メインラインである2.4 カーネルにマージされた[3]。 ほとんどすべてのLinuxシステムにおいて利用可能で、SUSEGentooMandrivaSlackwareKateOS英語版Zenwalk英語版UbuntuDebianFedoraArch Linuxの各ディストリビューションでXFSの利用を選択することができる[要出典][いつ?]

FreeBSDでは、2005年12月から読み込みのみのサポートを開始し、2006年6月には FreeBSD-7.0-CURRENTにおいて実験的書き込みが可能となった[要出典]

XFSはファイルシステムの先頭ブロックをスーパーブロックとして使っておりブートローダーを先頭ブロックにインストールすることはできない。これはIRIXとの互換性の為であり変更の予定はないとしている[5][6]

仕様

容量

XFSは64ビットのジャーナリングファイルシステムであり、ファイルシステムの整合性が保証されている[7]。ファイルシステムサイズは最大で8EiBであるが[7]、通常ホストオペレーティングシステムの仕様によりそれよりも少ない容量に制限される。たとえば32ビット Linuxにおいては、最大16TiBである[要出典]

ジャーナリング

XFSはファイルシステムメタデータをジャーナリングする。つまり、ファイルシステムへの変更が発生した際は、直列化されたジャーナルに書き込まれた後に、実ブロック の更新が行われる。ジャーナルは、通常のディスク操作では読み込まれることのないディスク領域にリングバッファとして確保される。ジャーナルは、ファイルシステムのデータ部に置くこともできれば(内部ジャーナル)、ディスク操作の競合を避けるために別個のデバイス上に置くこともできる(外部ジャーナル)。 XFSのジャーナルは、ファイルシステム操作が高水準に表現された「論理的な」エントリ から成る。それに対して、他のファイルシステムのジャーナルでは、トランザクション中で変更される ブロックのコピーをそのまま保持した、「物理的な」エントリから成る。 ジャーナルの更新は、性能の低下を避けるために非同期的に行われる。 システムクラッシュが起きると、ジャーナルを利用することでクラッシュの直前の操作を再実行することが出来、 これによりXFSファイルシステムの整合性は保たれる。 この再実行による復旧は、ファイルシステムのマウント時に自動的に行われ、それに要する時間はファイルシステムのサイズに依存しない。 クラッシュに際し、未書き込みのデータブロックがジャーナル上に残っている場合には、復旧時にゼロで置換されて書き込まれる。 これはセキュリティ上の問題を回避するためである。

アロケーショングループ

XFSファイルシステムは内部的に複数のアロケーショングループ英語版に分割することが可能である。アロケーショングループとは、等しいサイズの連続的なディスク領域である。1つのファイルやディレクトリは複数のアロケーショングループに跨って存在することが可能である。 それぞれのアロケーショングループが固有のinode空間と固有の空き領域を持つことで、拡張性と並列処理性が生み出される。(複数の異なるスレッドプロセスが同一のファイルシステムに同時にアクセス可能である) この特性により、メタデータの更新も並列に行うことができ、マルチプロセッサシステムやマルチコアシステムにおいて、I/O性能を向上させることができる。 ファイルシステムが複数の物理デバイスに渡るときに、この強みは発揮され、すべての物理ストレージの性能が最大限発揮される。

ストライプアロケーション

RAIDアレイ上にXFSファイルシステムを作成するときには、ストライプ単位をRAIDアレイのストライプ単位と一致させることにより、スループットを最大化することができる。

エクステントの利用

XFSではファイルデータを格納するブロックは、エクステント英語版と呼ばれる構造により管理される。個々のエクステントがポイントするブロック数は可変で、一つあるいは複数の連続したブロックを指し示すことが出来る。あるファイルに使われているブロックを単純に列挙して保持するファイルシステムに比べ、スペースを大きく削減できる。 他の多くのファイルシステムでは、ブロックのアロケーションのために、一つあるいは複数のビットマップを使用しているが、XFSではこれらビットマップは、エクステントを利用した(各アロケーショングループごとに)一対のB+木による管理構造に置き換えられている。 そのB+木の対の内、片方の木は利用できるエクステントの長さを管理し、他方はエクステントの開始ブロックを記録している。このデュアルインデックス構造により、種々のファイルシステム操作の中で効率高く利用可能なエクステントを探索することが可能となっている。

可変ブロックサイズ

ファイルシステムのブロックサイズは、アロケーションの最小単位のサイズである。 XFSではブロックサイズは512バイトから64キロバイトまで可変であり、用途に合わせてファイルシステムの作成時に指定できる。 小さなサイズのファイルを多数個使うのならば、ブロックサイズを小さくすれば利用可能な容量が大きくなるし、主に大きなサイズのファイルしか扱わないのであれば、ブロックサイズを大きくすることで読み書き性能が向上する。

遅延アロケーション

XFSはファイルアロケーションに遅延書き込みの技術を用いている。 バッファーキャッシュにファイルが書き込まれると、すぐにエクステントをアロケートするのではなく、記録に必要な数のブロックを予約するに止める。実際にエクステント(ブロック)がアロケートされるのはディスクにフラッシュされる時である。これにより、ファイルがなるべく連続したブロックに書き込まれるようにし、フラグメンテーションを減少させ、性能を向上させている。

スパースファイル

XFSでは、64ビットのスパースアドレス空間が各ファイルごとに利用可能で、すなわち、極めて大きいサイズのファイルを扱うと同時に、ファイル中に実ディスクスペースの割り当てのない「穴」を持たせることが出来る。 XFSはファイルのデータブロックの管理に可変長のエクステントを用いるため、ファイルアロケーションマップのサイズは小さく保持できる。 アロケーションマップのサイズが一つのinodeに収まり切らなくなった場合でも、そのアロケーションマップはB+木上に移される。 以上により64ビットの広大な空間であっても迅速にアクセスすることが可能となっている。

拡張属性

XFSは拡張属性として複数のデータストリームを一つのファイルに格納することが出来る。 これにより複数のname/valueの対を一つのファイルに付け加えることが出来る。 nameは最大で256バイトのヌル終端文字列で、valueは最大で64キロバイトのバイナリデータである。 さらにrootとuserの2つの名前空間に分けて記録できる。root名前空間に記録された属性はスーパーユーザーのみが変更可能であり、user名前空間の属性はそのファイルの書き込みパーミッションを持つユーザーのみが変更できる。 この拡張属性は、シンボリックリンクデバイスノードディレクトリなどあらゆる種類のXFSのinodeに付加することが可能である。 attrツールを使用して、コマンドラインから操作することが出来る。 xfsdump/xfsrestoreツールは拡張属性をサポートしており、拡張属性も併せてバックアップ/リストアされる。 他の多くのバックアップツールはXFS拡張属性に対応していない物が多い。

ダイレクトI/O

高いディスクスループットが必要なアプリケーションのために、キャッシュされない入出力をユーザ空間で可能にするダイレクトI/Oが提供される。ファイルデータはDMAによりアプリケーションのバッファからディスクに直接転送されるため、ディスクデバイスのI/O帯域をそのまま利用できる。

I/O帯域保証

XFSは保証された帯域幅でのファイル入出力を可能にするAPIを提供する。XFSは、接続されているストレージデバイスの利用可能な帯域幅を動的に計算し、要求された性能に見合った帯域幅を確保する。これは現在XFSのみがもつ機能である。 帯域保証にはhardとsoftの2種類があり、帯域保証の確実性とI/O性能のトレードオフにより使い分けることができる。ただし、hardはそのXFSファイルシステムが存在するディスクサブシステムがそれをサポートする時のみ利用可能である。 この帯域保証の機能は、ビデオストリーミングのようなリアルタイムアプリケーションでよく用いられる。

DMAPI

XFSは階層型ストレージ管理をサポートするためのDMAPI英語版インタフェースを実装している。 この機能はLinux上で実装されているものの、主なカーネルソースには組み入れられていない。

スナップショット

XFSはスナップショットを取るための機能そのものは提供しておらず、OS等のボリュームマネージャにより用意されることが想定されている。 そのようなボリュームマネージャによりスナップショットを取るための補助機能として、XFSはxfs_freezeにより、ファイルシステムの凍結機能を提供している。 なお、2.6系のLinuxではスナップショット作成にxfs_freezeは不要である。(実行した場合、デッドロックが発生し正常にスナップショットが作成できない。)

オンラインデフラグ

XFSは、可変長のエクステントを利用し遅延アロケーションをする為に、断片化に対してもともと高い耐性を持つが、XFSには独自のデフラグツール(xfs_fsr、XFS filesystem repackerの略)が用意されている。 これはマウントされていてアクティブなファイルシステムをデフラグすることが出来る。 (xfs_fsrは通常、xfsprogsパッケージではなく、xfsdumpパッケージの一部として提供される。)

オンラインリサイズ

XFSにはxfs_growfsという、オンラインリサイズのためのツールがある。 そのXFSファイルシステムが存在するディスク上に未使用のスペースがある場合には、ファイルシステムサイズを拡張することが出来る。 この機能は通常ボリュームマネージャと組み合わせて用いられる。

ネイティブなバックアップ/復元ツール

バックアップのためにxfsdumpxfsrestoreというツールがXFSでは利用できる。[8] xfsdumpはXFSファイルシステムをinode順を保持したままバックアップすることが出来る。 UNIXの従来のファイルシステムでは書き込み可能としてマウントしたファイルシステムのバックアップを実行するとバックアップ中に更新されたファイルの整合性に問題が出ることがあるが、XFSではxfsdumpを用いてファイルシステムのバックアップをマウント中に取ることが出来る。[注 1] さらにこれらツールを用いたバックアップとリストアは、それぞれ実行中に一時中断したり再開したりすることが自在に可能である。 また、xfsdumpは複数スレッドを使って実行することが可能で、複数のストリームに分割しつつ高速にバックアップを取得できる。その場合、各ストリームは異なるメディアに書き込むことも出来る。(しかし、この複数ストリームによるバックアップ機能は、現在の所Linuxでは完全に実装されていない。)

欠点

出典

脚注

Related Articles

Wikiwand AI