(Translated by https://www.hiragana.jp/)
XFS - Wikipedia コンテンツにスキップ

XFS

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
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ファイルシステムが存在そんざいするディスクサブシステムがそれをサポートするときのみ利用りよう可能かのうである。 この帯域たいいき保証ほしょう機能きのうは、ビデオストリーミングのようなリアルタイムアプリケーションでよくもちいられる。

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では利用りようできる。 xfsdumpはXFSファイルシステムをinodeじゅん保持ほじしたままバックアップすることが出来できる。 UNIXのほかのファイルシステムではバックアップまえにマウントを解除かいじょすることが必要ひつようとなることがほとんどであるが、xfsdumpもちいるXFSファイルシステムのバックアップを使用しようちゅうることが出来できる。 さらにこれらツールをもちいたバックアップとリストアは、それぞれ実行じっこうちゅう一時いちじ中断ちゅうだんしたり再開さいかいしたりすることが自在じざい可能かのうである。 また、xfsdump複数ふくすうスレッドを使つかって実行じっこうすることが可能かのうで、複数ふくすうのストリームに分割ぶんかつしつつ高速こうそくにバックアップを取得しゅとくできる。その場合ばあいかくストリームはことなるメディアむことも出来できる。(しかし、この複数ふくすうストリームによるバックアップ機能きのうは、現在げんざいところLinuxでは完全かんぜん実装じっそうされていない。)

欠点けってん

[編集へんしゅう]

x86マシンのLinuxで使用しようする場合ばあいPBR英語えいごばんひとしばれる、レガシーなブートシーケンスに使用しようされるパーティションの先頭せんとうセクタ(のファイルシステムとうでは通常つうじょう使つかわれない)をXFSは使用しようしているため、ブート可能かのうパーティションにできない。この仕様しようは IRIX との互換ごかんせい維持いじのため、変更へんこうされない[6]

削除さくじょされたファイルの復元ふくげんはほぼ不可能ふかのうである(これは長所ちょうしょでもある)。

Linuxでの実装じっそうでは、ことなるCPUアーキテクチャあいだで、ジャーナリング最適さいてきのために互換ごかんせい問題もんだい発生はっせいする。しかしこの問題もんだいは、ことなるアーキテクチャでマウントするまえxfs_repair実行じっこうし、ジャーナルを消去しょうきょすることで、回避かいひ可能かのうである。

「XFSはメタデータをジャーナリングする。」これは電源でんげんコードを不意ふいいても、さい起動きどうには整合せいごうせいのある状態じょうたい復元ふくげんすることを意味いみする(たとえば、ディレクトリやそこにふくまれるファイルリスト表示ひょうじできるということである)。これはなに表示ひょうじされなくなるよりはよい。しかし、XFSはデータの変更へんこうについてはジャーナルしないから、電源でんげんコードをいたときにデータをうしな可能かのうせいはある[8]。このてんについてはXFSだけではなく、のファイルシステム(たとえばJFS)についてもおなじであり、メタデータのみのジャーナリングはアクセス速度そくど安全あんぜんせいのバランスのとれたすぐれた妥協だきょうてんであるからである。

XFSは遅延ちえん最適さいてきと、データとメタデータのディスク順序じゅんじょてんについてはSuS解釈かいしゃくあまさがある。同様どうように、ext3やdata=orderedモードのReiserFS動作どうさする操作そうさが、データ破壊はかいこす場合ばあいがある。

echo "original data here" > data
echo "new data goes here" > data.new
mv data.new data
*crash*

この3つの操作そうさ実行じっこうされた直後ちょくごにクラッシュや電源でんげんちたりすると、ファイルがランダムデータやNullコードにわったりする可能かのうせいがある。なお、bug report in Ubuntuposting from a XFS developer on linux-xfs にこのてんかんする反対はんたい意見いけんがある。

ディレクトリエントリの作成さくせいそらファイル、サブディレクトリなど)と削除さくじょのファイルシステムにくらべておそいという指摘してきがある。詳細しょうさいについては以下いか参照さんしょうFilesystem performance tweaking with XFS on Linux。この問題もんだい解決かいけつするため、メタデータジャーナルにも遅延ちえん技術ぎじゅつ適用てきようされ、バージョン3.12以降いこうのLinuxカーネルで標準ひょうじゅんとなった。詳細しょうさいについては[1]およびカーネルドキュメントの"filesystems/xfs-delayed-logging-design.txt"を参照さんしょう

SELinux登場とうじょうした当初とうしょ、XFSで使用しようすると性能せいのう劣化れっかこすこと沙汰ざたされた。[9] これはXFSの「拡張かくちょう属性ぞくせいがinodeないおさめられる場合ばあい追加ついかのディスクI/Oがらないため高速こうそくだが、そうでない場合ばあいはinodeがい個別こべつのブロックをてるため拡張かくちょう属性ぞくせい参照さんしょう通常つうじょうのデータとおなじだけのディスクI/Oをともなう」という特性とくせいたいしてSELinuxが使用しようする拡張かくちょう属性ぞくせいがinodeないおさめられないサイズであったためきた。 このこと自体じたいはinodeにおさめきれない拡張かくちょう属性ぞくせいすべてにこるものでSELinux固有こゆうのものではないが、「おおくのファイルが拡張かくちょう属性ぞくせい付加ふかされている」、「いたところ暗黙あんもくてきされること」という事情じじょうがあり性能せいのう劣化れっかこした。この問題もんだいは「attr2とばれるあたらしい拡張かくちょう属性ぞくせい格納かくのうポリシーを使用しようする」、「inodeのおおきさをデフォルトよりおおきくする」のいずれかの行動こうどうることで回避かいひできる。xfsprogs バージョン2.7 以降いこうでは attr2 の使用しようがデフォルトになっており、問題もんだい回避かいひのための対処たいしょおこな必要ひつようはない。

出典しゅってん

[編集へんしゅう]
  1. ^ 1.2. A Brief History of XFS”. XFS User Guide. xfs.org. 2015ねん11月11にち閲覧えつらん
  2. ^ Porting XFS to Linux”. Olstrans.sourceforge.net (2000ねん7がつ21にち). 2015ねん11月11にち閲覧えつらん
  3. ^ a b 1.3. XFS on Linux”. XFS User Guide. xfs.org. 2015ねん11月11にち閲覧えつらん
  4. ^ Hellwig, Christoph (2003). "XFS for Linux". XFS for Linux. UKUUG Linux Conference. Edinburgh, United Kingdom. 2016ねん10がつ24にち閲覧えつらん2001/09/27 Mandrake 8.1 is available with native XFS support. 2002/04/18 SuSE 8.0 is available, with XFS filesystem support.
  5. ^ Bug 250843 -grub-install hangs on xfs”. Bug report. Redhat.com (2009ねん5がつ4にち). 2011ねん11月6にち閲覧えつらん
  6. ^ a b Q: Does LILO work with XFS?”. 2014ねん8がつ13にち閲覧えつらん
  7. ^ a b XFS Overview”. Silicon Graphics International Corp (2013ねん7がつ2にち). 2013ねん7がつ2にち閲覧えつらん
  8. ^ SGI. “XFS FAQ”. 2008ねん5がつ8にち閲覧えつらん
  9. ^ EA and ACL Performance