コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
XFSのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
XFS
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
{{出典の明記|date=2012年10月}} {{Infobox filesystem | name = XFS| developer = [[シリコングラフィックス]]| full_name = XFS| introduction_date = [[1994年]]| introduction_os = [[IRIX]] v5.3| partition_id = | directory_struct = [[B+ 木]]| file_struct = extent based| bad_blocks_struct = | max_file_size = 8[[エクスビバイト|EiB]]| max_files_no = | max_filename_size = 255バイト| max_volume_size = 8[[エクスビバイト|EiB]]| filename_character_set = NULと / 以外使用可能| dates_recorded = あり| date_range = | date_resolution = 1ナノ秒| forks_streams = あり(条件付)| attributes = | file_system_permissions = あり| compression = なし| encryption = なし(ブロック デバイス レベルでの実装を想定)| single_instance_storage = 無し| OS = [[IRIX]], [[Linux]], [[FreeBSD]] }} '''XFS'''は、[[シリコングラフィックス]]が同社の[[IRIX]][[オペレーティングシステム]]のために開発した高性能[[ジャーナリングファイルシステム]]である。 == 歴史 == XFSは([[Journaled File System|JFS]]と共に)[[UNIX]]システムで最古のジャーナリングファイルシステムの一つであり、 成熟し安定し、[[プログラム (コンピュータ)|コード]]はよく[[デバッグ]]されている。 XFSの開発はシリコングラフィックスにより[[1993年]]に開始され、 翌年IRIX 5.3において初めて搭載された。 XFSは[[2000年]][[5月]]に[[GNU General Public License|GPL]]で公開されると共に[[Linux]]への移植が開始され、 [[2001年|2001]] - [[2002年]]ごろにはサポートする[[ディストリビューション]]が現れた。 現在ではほとんどすべてのLinuxディストリビューションで利用できる。 XFSはファイルシステムの先頭ブロックをスーパーブロックとして使っておりブートローダーを先頭ブロックにインストールすることはできない。これはIRIXとの互換性の為であり変更の予定はないとしている。<ref>{{cite web |title= Bug 250843 -grub-install hangs on xfs |work= Bug report |date= May 4, 2009 |publisher= Redhat.com |url= http://bugzilla.redhat.com/show_bug.cgi?id=250843 |accessdate= November 6, 2011 }} </ref><ref>{{cite web |title= Q: Does LILO work with XFS? |url= http://xfs.org/index.php/XFS_FAQ#Q:_Does_LILO_work_with_XFS.3F |accessdate= 2014/08/13 }} </ref> [[Red Hat Enterprise Linux]](RHEL)ではバージョン5.4以降「Scalable File Systemアドオン」という名前でXFSの有償サポートを行っていたが、RHEL7では/bootを含めた標準ファイルシステムとしてXFSを採用した。 XFSはLinux 2.4に[[マージ]]され、次いで2.6 [[カーネル]]にマージされた。 ほとんどすべてのLinuxシステムにおいて利用可能である。 [[SuSE]]、[[Gentoo Linux|Gentoo]]、[[Mandriva]]、[[Slackware]]、{{仮リンク|KateOS|en|Kate OS}}、{{仮リンク|Zenwalk|en|Zenwalk}}、[[Ubuntu]]、[[Debian]]、 [[Fedora]]、[[Arch Linux]]の各ディストリビューションでXFSの利用を選択することができる。 [[FreeBSD]]では、[[2005年]][[12月]]から読み込みのみのサポートを開始し、 [[2006年]][[6月]]には FreeBSD-7.0-CURRENTにおいて実験的書き込みが 可能となった。 == 仕様 == === 容量=== XFSは64[[ビット]]のジャーナリングファイルシステムであり、ファイルシステムの整合性が保証されている。ファイルシステムサイズは最大で8[[エクスビバイト|EiB]]であるが、通常[[ホスト]][[オペレーティングシステム]]の仕様によりそれよりも少ない容量に制限される。たとえば32ビット Linuxにおいては、最大16[[テビバイト|TiB]]である。 === ジャーナリング === XFSはファイルシステム[[メタデータ]]をジャーナリングする。つまり、ファイルシステムへの変更が発生した際は、直列化されたジャーナルに書き込まれた後に、実ブロック の更新が行われる。ジャーナルは、通常のディスク操作では読み込まれることのないディスク領域に環状[[バッファ]]として確保される。ジャーナルは、ファイルシステムのデータ部に置くこともできれば(内部ジャーナル)、ディスク操作の競合を避けるために別個の[[デバイス]]上に置くこともできる(外部ジャーナル)。 XFSのジャーナルは、ファイルシステム操作が高水準に表現された「論理的な」エントリ から成る。それに対して、他のファイルシステムのジャーナルでは、[[トランザクション]]中で変更される ブロックのコピーをそのまま保持した、「物理的な」エントリから成る。 ジャーナルの更新は、性能の低下を避けるために[[非同期]]的に行われる。 システム[[クラッシュ]]が起きると、ジャーナルを利用することでクラッシュの直前の操作を再実行することが出来、 これによりXFSファイルシステムの整合性は保たれる。 この再実行による復旧は、ファイルシステムの[[マウント]]時に自動的に行われ、それに要する時間はファイルシステムのサイズに依存しない。 クラッシュに際し、未書き込みのデータブロックがジャーナル上に残っている場合には、復旧時にゼロで置換されて書き込まれる。 これは[[コンピュータセキュリティ|セキュリティ]]上の問題を回避するためである。 === アロケーショングループ === XFSファイルシステムは内部的に複数の{{仮リンク|アロケーショングループ|en|Allocation group}}に分割することが可能である。アロケーショングループとは、等しいサイズの連続的なディスク領域である。1つのファイルやディレクトリは複数のアロケーショングループに跨って存在することが可能である。 それぞれのアロケーショングループが固有の[[Inode|inode]]空間と固有の空き領域を持つことで、拡張性と[[並列コンピューティング|並列処理]]性が生み出される。(複数の異なる[[スレッド (コンピュータ)|スレッド]]や[[プロセス]]が同一のファイルシステムに同時にアクセス可能である) この特性により、メタデータの更新も並列に行うことができ、[[マルチプロセッサ]]システムや[[マルチコア]]システムにおいて、[[入出力|I/O]]性能を向上させることができる。 ファイルシステムが複数の物理デバイスに渡るときに、この強みは発揮され、すべての物理[[ストレージ]]の性能が最大限発揮される。 === ストライプアロケーション === [[RAID]]アレイ上にXFSファイルシステムを作成するときには、[[ストライプ]]単位をRAIDアレイのストライプ単位と一致させることにより、[[スループット]]を最大化することができる。 === エクステントの利用 === XFSではファイルデータを格納するブロックは、{{仮リンク|エクステント|en|Extent_(file_systems)}}と呼ばれる構造により管理される。個々のエクステントがポイントするブロック数は可変で、一つあるいは複数の連続したブロックを指し示すことが出来る。あるファイルに使われているブロックを単純に列挙して保持するファイルシステムに比べ、スペースを大きく削減できる。 他の多くのファイルシステムでは、ブロックのアロケーションのために、一つあるいは複数の[[ビットマップ]]を使用しているが、XFSではこれらビットマップは、エクステントを利用した(各アロケーショングループごとに)一対の[[B+木]]による管理構造に置き換えられている。 そのB+木の対の内、片方の木は利用できるエクステントの長さを管理し、他方はエクステントの開始ブロックを記録している。このデュアル[[インデックス]]構造により、種々のファイルシステム操作の中で効率高く利用可能なエクステントを探索することが可能となっている。 === 可変ブロックサイズ === ファイルシステムのブロックサイズは、アロケーションの最小単位のサイズである。 XFSではブロックサイズは512[[バイト (情報)|バイト]]から64[[キロバイト]]まで可変であり、用途に合わせてファイルシステムの作成時に指定できる。 小さなサイズのファイルを多数個使うのならば、ブロックサイズを小さくすれば利用可能な容量が大きくなるし、主に大きなサイズのファイルしか扱わないのであれば、ブロックサイズを大きくすることで読み書き性能が向上する。 === 遅延アロケーション === XFSはファイルアロケーションに遅延書き込みの技術を用いている。 バッファーキャッシュにファイルが書き込まれると、すぐにエクステントをアロケートするのではなく、記録に必要な数のブロックを予約するに止める。実際にエクステント(ブロック)がアロケートされるのはディスクにフラッシュされる時である。これにより、ファイルがなるべく連続したブロックに書き込まれるようにし、[[フラグメンテーション]]を減少させ、性能を向上させている。 === スパースファイル === XFSでは、64ビットの[[スパース]]な[[アドレス空間]]が各ファイルごとに利用可能で、すなわち、極めて大きいサイズのファイルを扱うと同時に、ファイル中に実ディスクスペースの割り当てのない「穴」を持たせることが出来る。 XFSはファイルのデータブロックの管理に可変長のエクステントを用いるため、ファイルアロケーションマップのサイズは小さく保持できる。 アロケーションマップのサイズが一つのinodeに収まり切らなくなった場合でも、そのアロケーションマップはB+木上に移される。 以上により64ビットの広大な空間であっても迅速にアクセスすることが可能となっている。 {{See also|{{仮リンク|スパースファイル|en|Sparse file}}}} === 拡張属性 === XFSは[[拡張ファイル属性|拡張属性]]として複数のデータ[[ストリーム]]を一つのファイルに格納することが出来る。 これにより複数のname/valueの対を一つのファイルに付け加えることが出来る。 nameは[[番兵|Nullで終端された]]256バイトまでの長さの[[プリンタブル]][[文字列]]で、valueは64キロバイトまでの[[バイナリ|バイナリデータ]]である。 さらにrootとuserの2つの[[名前空間]]に分けて記録できる。root名前空間に記録された属性は[[スーパーユーザー]]のみが変更可能であり、user名前空間の属性はそのファイルの書き込み[[ファイルパーミッション|パーミッション]]を持つユーザーのみが変更できる。 この拡張属性は、[[ソフトリンク|シンボリックリンク]]や[[スペシャルファイル|デバイスノード]]、[[ディレクトリ]]などあらゆる種類のXFSのinodeに付加することが可能である。 <code>attr</code>ツールを使用して、[[コマンドライン]]から操作することが出来る。 <code>xfsdump</code>/<code>xfsrestore</code>ツールは拡張属性をサポートしており、拡張属性も併せて[[バックアップ]]/[[リストア]]される。 他の多くのバックアップツールはXFS拡張属性に対応していない物が多い。 === ダイレクトI/O === 高いディスク[[スループット]]が必要な[[アプリケーションソフトウェア|アプリケーション]]のために、[[キャッシュ]]されない入出力を[[アドレス空間#ユーザ空間|ユーザ空間]]で可能にするダイレクトI/Oが提供される。ファイルデータは[[Direct Memory Access|DMA]]によりアプリケーションのバッファからディスクに直接転送されるため、ディスクデバイスのI/O帯域をそのまま利用できる。 === I/O帯域保証 === XFSは保証された帯域幅でのファイル入出力を可能にする[[アプリケーションプログラミングインタフェース|API]]を提供する。XFSは、接続されているストレージデバイスの利用可能な帯域幅を動的に計算し、要求された性能に見合った帯域幅を確保する。これは現在XFSのみがもつ機能である。 帯域保証にはhardとsoftの2種類があり、帯域保証の確実性とI/O性能のトレードオフにより使い分けることができる。ただし、hardはそのXFSファイルシステムが存在するディスクサブシステムがそれをサポートする時のみ利用可能である。 この帯域保証の機能は、ビデオ[[ストリーミング]]のような[[リアルタイム]]アプリケーションでよく用いられる。 === DMAPI === XFSは{{仮リンク|階層記憶管理|en|Hierarchical storage management}}をサポートするための{{仮リンク|DMAPI|en|DMAPI}}・[[インタフェース (情報技術)|インタフェース]]を実装している。 この機能はLinux上で実装されているものの、主なカーネルソースには組み入れられていない。 === スナップショット === XFSは[[スナップショット]]を取るための機能そのものは提供しておらず、OS等の[[論理ボリュームマネージャ|ボリュームマネージャ]]により用意されることが想定されている。 そのようなボリュームマネージャによりスナップショットを取るための補助機能として、XFSは<code>xfs_freeze</code>により、ファイルシステムの凍結機能を提供している。 なお、2.6系のLinuxではスナップショット作成に<code>xfs_freeze</code>は不要である。(実行した場合、デッドロックが発生し正常にスナップショットが作成できない。) === オンラインデフラグ === XFSは、可変長のエクステントを利用し遅延アロケーションをする為に、断片化に対してもともと高い耐性を持つが、XFSには独自のデフラグツール(<code>xfs_fsr</code>、XFS filesystem repackerの略)が用意されている。 これは[[マウント]]されていてアクティブなファイルシステムをデフラグすることが出来る。 (<code>xfs_fsr</code>は通常、<code>xfsprogs</code>パッケージではなく、<code>xfsdump</code>パッケージの一部として提供される。) === オンラインリサイズ === XFSには<code>xfs_growfs</code>という、[[オンライン]][[リサイズ]]のためのツールがある。 そのXFSファイルシステムが存在するディスク上に未使用のスペースがある場合には、ファイルシステムサイズを拡張することが出来る。 この機能は通常ボリュームマネージャと組み合わせて用いられる。 === ネイティブなバックアップ/復元ツール === バックアップのために<code>xfsdump</code>と<code>xfsrestore</code>というツールがXFSでは利用できる。 xfsdumpはXFSファイルシステムをinode順を保持したままバックアップすることが出来る。 UNIXの他のファイルシステムではバックアップ前にマウントを解除することが必要となることがほとんどであるが、<code>xfsdump</code>を用いるXFSファイルシステムのバックアップを使用中に取ることが出来る。 さらにこれらツールを用いたバックアップとリストアは、それぞれ実行中に一時中断したり再開したりすることが自在に可能である。 また、<code>xfsdump</code>は複数スレッドを使って実行することが可能で、複数のストリームに分割しつつ高速にバックアップを取得できる。その場合、各ストリームは異なる[[電子媒体|メディア]]に書き込むことも出来る。(しかし、この複数ストリームによるバックアップ機能は、現在の所Linuxでは完全に実装されていない。) == 欠点 == x86マシンのLinuxで使用する場合、PBR等と呼ばれる、レガシーなブートシーケンスに使用されるパーティションの先頭セクタ(他のファイルシステム等では通常使われない)を、XFSは使用しているためブート可能パーティションにできない。この仕様は IRIX との互換性の維持のため、変更されない。<ref>[http://xfs.org/index.php/XFS_FAQ#Q:_Does_LILO_work_with_XFS.3F XFS FAQ Q: Does LILO work with XFS?]</ref> 削除されたファイルの復元はほぼ不可能である(これは長所でもある)。 Linuxでの実装では、異なるCPUアーキテクチャ間で、ジャーナリング最適化のために互換性の問題が発生する。しかしこの問題は、異なるアーキテクチャでマウントする前に<code>xfs_repair</code>を実行し、ジャーナルを消去することで、回避可能である。 「XFSはメタデータをジャーナリングする。」これは電源コードを不意に抜いても、再起動後には整合性のある状態に復元することを意味する(例えば、ディレクトリやそこに含まれる[[ファイルリスト]]を表示できるということである)。 これは何も表示されなくなるよりはよい。しかし、XFSはデータの変更についてはジャーナルしないから、電源コードを抜いたときにデータを失う可能性はある。{{cite web|url = http://oss.sgi.com/projects/xfs/faq.html#wcache|author = SGI|title = XFS FAQ|accessdate = 2008-05-08}} この点についてはXFSだけではなく、他のファイルシステム(例えば[[Journaled File System|JFS]])についても同じであり、メタデータのみのジャーナリングはアクセス速度と安全性のバランスのとれた優れた妥協点であるからである。 XFSは遅延書き込み最適化と、データとメタデータのディスク書き込み順序の点については [[Single UNIX Specification|SuS]]の解釈に甘さがある。同様に、[[ext3]]やdata=orderedモードの[[ReiserFS]]で動作する操作が、データ破壊を引き起こす場合がある。 <pre>echo "original data here" > data echo "new data goes here" > data.new mv data.new data *crash*</pre> この3つの操作が実行された直後にクラッシュや電源が落ちたりすると、ファイルがランダムデータやNullコードに置き換わったりする可能性がある。 なお、[https://launchpad.net/ubuntu/+bug/37435 bug report in Ubuntu] と [http://marc.theaimsgroup.com/?l=linux-xfs&m=109030382432326&w=2 posting from a XFS developer on linux-xfs] にこの点に関する反対意見がある。 ディレクトリエントリの作成(空ファイル、サブディレクトリなど)と削除は他のファイルシステムに比べて遅いという指摘がある。 詳細については以下を参照。[http://everything2.com/index.pl?node_id=1479435 Filesystem performance tweaking with XFS on Linux] [[SELinux]]が登場した当初、XFSで使用すると性能劣化を引き起こす事が取り沙汰された。<ref>[http://www.suse.de/~agruen/acl/linux-acls/online/#SECTION000100000000000000000 EA and ACL Performance]</ref> これはXFSの「拡張属性がinode内に収められる場合は追加のディスクI/Oが要らない為高速だが、そうでない場合はinode外に個別のブロックを割り当てる為に拡張属性の参照に通常のデータと同じだけのディスクI/Oを伴う」という特性に対してSELinuxが使用する拡張属性がinode内の収められないサイズであった為に起きた。 この事自体はinodeに収めきれない拡張属性全てに起こるものでSELinux固有のものではないが、「多くのファイルが拡張属性を付加されている」、「至る所で暗黙的に読み出される事」という事情があり性能劣化を引き起こした。 この問題は「attr2と呼ばれる新しい拡張属性の格納ポリシーを使用する」、「inodeの大きさをデフォルトより大きくする」のいずれかの行動を取ることで回避できる。 xfsprogs バージョン2.7 以降では attr2 の使用がデフォルトになっており、問題回避のための対処を行う必要はない。 == 注 == <references/> {{ファイルシステム}} [[Category:Linuxのファイルシステム]] [[Category:UNIX]] {{Software-stub}} {{Computer-stub}}
このページで使用されているテンプレート:
テンプレート:Cite web
(
ソースを閲覧
)
テンプレート:Computer-stub
(
ソースを閲覧
)
テンプレート:Infobox filesystem
(
ソースを閲覧
)
テンプレート:See also
(
ソースを閲覧
)
テンプレート:Software-stub
(
ソースを閲覧
)
テンプレート:ファイルシステム
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:出典の明記
(
ソースを閲覧
)
XFS
に戻る。
検索
検索
XFSのソースを表示
話題を追加