JFS (Journaled File System) について
JFS(Journaled File System)は、
IBMが開発した64ビット
ジャーナリングファイルシステムです。当初は
IBMの商用
UNIXである
AIX v3.1に実装されました。その後、OS/2、eComStationにも採用され、オープンソース化を経て
Linuxにも移植されました。
HP-UXにもJFSという名称の
ファイルシステムが存在しますが、これはVxFSの
OEM提供によるものです。
AIXのJFSには、JFS(JFS1)とJFS2の2つの世代があります。他のOSでは、第2世代のJFSが実装され、単にJFSと呼ばれています。
AIXにおけるJFSは、特にJFS1を指すことがあります。
歴史
1990年2月、
IBMは
AIX 3.1向けにJFSをリリースしました。これが現在のJFS1 on
AIXです。JFSはその後10年間、
AIXのメイン
ファイルシステムとして広く利用されました。JFS1は
AIXのメモリ管理と密接に統合されており、これはプロプライエタリOSにおける典型的な設計です。
1995年、マルチプロセッサのサポート、性能向上、および移植性を高めるための改良が開始されました。1999年4月には、新しいJFSがOS/2 Warp Server for e-businessに、2000年10月にはOS/2 Warpクライアント向けにリリースされました。
1999年12月、OS/2版JFSのソースコードがオープンソースコミュニティに提供され、
Linuxへの移植が始まりました。2001年6月には、JFS for
Linuxの最初の安定版がリリースされました。この並行して、1997年には、JFS開発チームの一部が
AIX OS開発チームに戻り、新しいJFS(JFS2)を
AIXに移植する作業を開始しました。2001年5月には、改良されたJFS(JFS2)が
AIX 5Lで利用可能となりました。
2008年初頭には、JFSのメンテナンスに対する
IBMの関心が薄れているという噂が流れましたが、
IBMの
LinuxテクノロジーセンターのメンバーでありJFSコアチームのメンバーでもあるDave Kleikamp氏は、JFSの
Linuxカーネル変更への追従、バグ修正に尽力しており、いくつかのディストリビューションはさらなるコミットメントを期待していると述べました。
特徴
JFSは、以下の特徴を持つ
ファイルシステムです。
ジャーナリング
JFSは初期から
ジャーナリングファイルシステムとして実装されています。ジャーナルデータの最大サイズは128MiBです。JFSのジャーナリングはinodeの一部をジャーナルする点でXFSに似ています。ただし、JFSはメタデータのみを保護するため、クラッシュ後のユーザーデータの整合性は保証されません。
B+木
ディレクトリ参照の高速化のためにB+木を使用しています。ディレクトリのエントリは、inode内に8個まで格納された後、B+木に移動されます。エクステントもB+木でインデックス化されています。
動的inode割り当て
JFSはinodeを保存するディスクスペースとinodeの数を静的に割り当てるのではなく、必要に応じて動的に割り当てます。各inodeは512バイトの大きさで、16KBのエクステントに32個のinodeを割り当てることができます。
エクステント
JFSはディスク割り当てにエクステントを使用します。エクステントは可変長のブロック管理により、連続したブロック割り当てを少ないメタデータで管理できます。エクステントは複数のアロケーショングループに跨って割り当てられる場合があり、エクステントの配置検索性能向上のため、B+木でインデックス化されます。
圧縮
AIXのJFS1のみが
LZ77による圧縮をサポートしています。ただし、CPU使用率の増加や断片化の増加を理由に、シングルユーザーでの使用やオフラインバックアップ以外での使用は推奨されていません。
コンカレントI/O (CIO)
コンカレントI/Oは、ファイルの書き込みロックを緩和するオプションです。通常のJFSのファイルロックは、読み込みは共有ロック、書き込みは排他ロックであるため、ファイルレベルの一貫性は保たれますが、書き込みは直列化されます。CIOオプションを使用することで、アプリケーションレベルで一貫性を管理するRDBなどのアプリケーションにおいて、ロックによるオーバーヘッドを削減できます。
アロケーショングループ (AG)
アロケーショングループは、複数のディスク領域からなる集合体であるアグリゲートを分割する単位です。JFSはAGに対してリソースアロケーションポリシーを適用し、I/O性能の向上に利用します。リソースアロケーションポリシーには、ディスクブロックを分割して、ファイルのディスクinodeを同じAGに所属させようとするものと、関連のないデータを同じAGに割り当てるものがあります。ファイルが開かれているとき、JFSはそのファイルが所属するAGをロックし、ファイルの拡大のみを許可します。これにより、ファイルのフラグメンテーションを抑制します。
JFS スーパーブロック
スーパーブロックは
ファイルシステム全体に関する情報を保持し、以下のフィールドが含まれています。
ファイルシステムのサイズ
ファイルシステムに含まれるブロック数
ファイルシステムの状態
アロケーショングループのサイズ
*
ファイルシステムのブロックサイズ
カーネルバージョン2.4.18pre9-ac4以降のカーネルモジュールと、ユーザーランドの
ファイルシステムメンテナンスツール(JFSutils)によってサポートされ、主要な
Linuxディストリビューションで利用可能です。
ベンチマークでは、様々な負荷や使用パターン、ファイルの大小に関わらず、一貫して安定した性能と信頼性を示し、高負荷下でもCPU使用率は低く、システムリソースを有効活用できるとされています。
JFS for
Linux プロジェクトは、JFSコアチームによってメンテナンスされています。
脚注
JFS for Linux project website
JFS1 File System Layout, IBM.
JFS2 File System Layout, IBM.
JFSRec: 損傷したJFS
ファイルシステムからファイルとディレクトリを読み取り専用で抽出するコンソールプログラム