Journaled File System
JFS | |
---|---|
開発者 | IBM et al. |
正式名 | IBM Journaled File System |
導入 | 1990 and 1999 (JFS1 in AIX 3.1 and JFS in OS/2 4.5) |
パーティション識別子 | 0x35 (MBR) |
構造 | |
ディレクトリ | B+木 |
領域管理 | ビットマップ、エクステント |
限度 | |
最大ファイル サイズ | 4 PiB |
最大ファイル数 | 制限無し |
最大ファイル名長 | 255 バイト |
最大ボリューム サイズ | 32 PiB |
ファイル名の文字 | NULと/以外使用可能 |
特徴 | |
タイムスタンプ | 変更 (mtime), 属性変更 (ctime), アクセス (atime) |
日付分解能 | ナノ秒 |
フォーク | 有り |
属性 | 有り |
パーミッション | POSIX, ACL |
透過的圧縮 | AIX上のJFS1のみ |
透過的暗号化 | 無し (ブロックデバイスレベルの提供を想定) |
重複排除 | 無し |
対応OS | AIX, OS/2, Linux |
JFS (Journaled File System) は、IBM が同社の商用 UNIX である AIX v3.1 に実装した 64ビットジャーナリングファイルシステムである。 OS/2、eComStation にも実装され、その後オープンソースとして公開、Linux に移植されている。HP-UX にも JFS という名称のファイルシステムがあるが、これは VxFS の OEM である。
AIX の JFS には JFS(JFS1)、JFS2 と呼ばれる2つの世代の JFS がある。[1][2]他の OS では第2世代の JFS が実装され単に JFS と呼ばれている。[3] JFS in AIXと呼ばれるものは、JFS1を指す。
歴史
[編集]1990年2月 IBM は AIX 3.1 向けに JFS をリリースした(現在 JFS1 on AIX と呼ばれているもの)。JFS はその後10年間 AIX のメインのファイルシステムとして多数の AIX システム内で用いられた。JFS1 は AIX のメモリ管理と深く結びついている。こうした設計はプロプライエタリの OS でよく見られるものであり、ファイルシステムが一つの OS だけでサポートされる典型例である[要出典]。
1995年、マルチプロセッサのサポートと性能向上、複数の OS で使用可能な移植性の高いファイルシステムにするための改良が始まる。1999年4月、新しい JFS が OS/2 Warp Server for e-business に、2000年10月には OS/2 Warp クライアントに向けてリリースされた。
1999年12月、OS/2 の JFS ソースコードがオープンソースコミュニティに提供され、それを受け JFS の Linux への移植が始まった。2001年6月、JFS for Linux の最初の安定版がリリースされた。[3]この活動と平行して1997年、 JFS 開発チームの数名が AIX OS の開発チームに戻り、新しい JFS を AIX に移植する作業を始めた。2001年5月、改良された JFS(JFS2) は AIX 5L で利用可能となった。[1][3]
2008年初頭、JFS のメンテナンスに IBM は関心が無いので、商用環境では用いるべきでないという噂が流れた。[4] これに対し IBM の Linux テクノロジーセンターのメンバーであり JFS コアチームのメンバーでもある Dave Kleikamp は、彼らはJFSについて Linux カーネルの変更に追従し、潜在するバグを直そうとしており、いくつかのディストリビューションはさらなるコミットメントを彼らに期待していると説明した。[5]
特徴
[編集]ジャーナリング
[編集]JFS は最初期からジャーナリングファイルシステムとして実装されている。ジャーナルデータは最大で 128MiB を持つ。JFS のジャーナリングは inode の一部をジャーナルする点で XFS に類似する。JFS はメタデータのみをジャーナル保護するため、クラッシュ後ユーザーデータの整合性は保証しない。
B+木
[編集]ディレクトリ参照の高速化のためにB+木を使用している。エントリをB+木に移動するまでに、ディレクトリiノード内にディレクトリエントリ8個を格納できる。エクステントについてもB+木でインデックス化している。
動的Inode割り当て
[編集]JFS は inode を保存するディスクスペースと inode の数をファイルシステム作成時に静的に割り当てるのではなく必要に応じて動的に割り当てている。個々の inode は512バイトの大きさを持ち、16KBの1エクステントに32個の inode を割り当てられる。
エクステント
[編集]JFS ディスク割り当てにエクステントを使用している。エクステントは可変長のブロック管理により連続したブロック割り当てを少ないメタデータで管理できる。エクステントは複数のアロケーショングループに跨って割り当てられる場合があり、エクステントの配置検索の性能向上のため、エクステントはB+木にインデックス化される。
圧縮
[編集]AIX の JFS1 のみ LZ77 による圧縮をサポートしている。CPU使用率の増加や断片化の増加を理由に、シングルユーザーでの使用やオフラインバックアップ以外での使用は推奨されていない。[2][8]
コンカレントI/O
[編集]コンカレントI/O (CIO) は、ファイルの書き込みロックを緩和するオプションである。JFSのファイルロックは通常、読み込みは共有ロック、書き込みは排他ロックのため、ファイルレベルでの一貫性は保てるが書き込みは直列化される。そのため、一貫性をアプリケーションレベルで管理するRDB等のアプリケーションでJFSを利用する場合、CIOオプションを利用することでロックによるオーバーヘッドを削減できる。[9]
アロケーショングループ
[編集]アロケーショングループ (AG) は、アグリゲート(複数のディスク領域からなる集合体)を分割する単位である。JFSはAGに対しリソースアロケーションポリシーを適用し、I/O性能の向上に利用する。
リソースアロケーションポリシーは、1つはディスクブロックを分割し、ファイルのディスクiノードを同じAGに所属させようとするポリシー、もう1つは関連のないデータを同じAGに割り当てるポリシーである。ファイルが開かれている時、JFSはそのファイルが所属するAGをロックし、そのファイルが大きくなることのみを許可する。これにより、単にファイルにAGへの書き込みを許可するのみよりも、ファイルのフラグメンテーションを抑える。
JFS スーパーブロック
[編集]スーパーブロックはファイルシステム全体に関する情報を保持し、次のフィールドを含む。
- ファイルシステムのサイズ
- ファイルシステムに含まれるブロック数
- ファイルシステムの状態
- アロケーショングループのサイズ
- ファイルシステムのブロックサイズ
Linuxでの利用
[編集]カーネルバージョン2.4.18pre9-ac4以降のカーネルモジュールと、ユーザランドのファイルシステムメンテナンスツール(JFSutils)によってサポートされ、著名な Linux ディストリビューションで利用できる。
ベンチマークでは、様々な負荷や使用パターン、ファイルの大小に関わらず一貫して安定した性能と信頼性を示し、高負荷下においてもCPU使用率は低く、利用可能なシステムリソースが残る程度とされる[要出典]。
JFS for Linux プロジェクトは JFS コアチーム [10] によってメンテナンスされている。
脚注
[編集]- ^ a b “A mini-FAQ for JFS”. JFS for Linux project. 2011年11月20日閲覧。
- ^ a b “Comparison of JFS1 and JFS2 on AIX”. IBM. 2011年11月20日閲覧。
- ^ a b c “Interview With the People Behind JFS, ReiserFS & XFS”. 2011年11月20日閲覧。
- ^ Re: which to use: ext3, JFS, XFS, ReiserFS?
- ^ SourceForge.net: jfs-discussion
- ^ “JFS overview”. Steve Best, IBM. 2008年1月29日時点のオリジナルよりアーカイブ。2011年11月20日閲覧。
- ^ “JFS Layout”. Steve Best, IBM. 2011年11月20日閲覧。
- ^ “AIX Wiki: JFS”. IBM. 2011年11月20日閲覧。
- ^ Improving Database Performance With AIX Concurrent I/O - White Paper
- ^ JFS for Linux project website
外部リンク
[編集]- JFS for Linux project website
- JFS1 File System Layout, IBM.
- JFS2 File System Layout, IBM.
- JFSRec, a console program that performs a read only extraction of files and directories from a damaged JFS filesystem