ジャーナリング
ファイルシステム(Journaling file system)は、
ファイルシステムの
メタデータ変更を
トランザクションとして扱い、その情報をジャーナルと呼ばれる領域に記録する機能を持つ
ファイルシステムです。これにより、予期せぬシステムクラッシュや電源断が発生した場合でも、
ファイルシステムの一貫性を保ち、データ損失のリスクを低減します。ジャーナル
ファイルシステムとも呼ばれます。
従来の
ファイルシステムでは、データの実体(実データ)と、そのデータの場所や属性などの情報(
メタデータ)を別々に記録していました。ファイルを更新する際、まず実データを書き込み、その後
メタデータを更新する必要がありました。しかし、
メタデータの書き込み中にシステムが中断した場合、実データと
メタデータの間で不整合が生じ、データへのアクセスが不可能になる可能性がありました。
例えば、非常に小さいファイル群を大量に記録する場合や、巨大なファイルを記録する場合、
メタデータの量が増加し、書き込みに時間がかかります。その最中に電源断などが起こると、
メタデータが破損し、
ファイルシステム全体が壊れてしまう可能性があります。
初期の回避策
この問題を回避するために、システム再起動時にディスク全体をスキャンし、矛盾を修正するプログラムが用いられてきました。Unix系ではfsck、Windowsではchkdskやscandisk、Mac OSではDisk First Aidなどが該当します。これらのツールは起動時に自動的に実行されることもありますが、以下の問題点がありました。
ディスク全体のスキャンに時間がかかる。
スキャン中に想定外の問題が見つかった場合、データが失われる可能性がある。
ジャーナリングによる解決
ジャーナリング
ファイルシステムは、上記の問題を解決するために導入されました。
メタデータの更新をジャーナルに記録することで、システムが中断しても、ジャーナルを参照して更新をやり直すことができ、
ファイルシステムの整合性を保つことが可能です。
具体的には、ファイル更新時に以下の手順を踏みます。
1. 更新内容をジャーナルに記録する(
メタデータのみ)。
2. 実データを更新する。
3. ジャーナルに記録した
メタデータを
ファイルシステムに反映する。
この方式により、どの段階でシステムが中断しても、ジャーナルに記録された内容を元に、
ファイルシステムを整合性のある状態に戻すことができます。
ただし、一般的にはジャーナルで保護されるのは
メタデータのみであり、ファイルの中身(実データ)までは保護されません。つまり、ジャーナリング
ファイルシステムであっても、システムクラッシュ時に、保存したはずのデータが保存されていないという状況が起こり得ます。しかし、
Linuxのext3やネットアップのWAFLなど、一部のジャーナリング
ファイルシステムでは実データの保護も行っています。
経緯
ジャーナリング
ファイルシステムは、元々汎用機で重要なデータを扱う際に考案された技術です。その設計思想をPCにも取り入れる形で、オープン系ではIBMのJFS(1990年)とTolerant Software(現
VERITAS)のVxFS(1989年)が最初の実装例です。
JFS: 当初OS/2向けに開発が進められましたが、1990年にIBMの商用UNIXであるAIXに実装されました。
VxFS: 1989年にTolerant Softwareが
UNIX System V向けに開発し、商用パッケージとして提供を開始しました。
その後、
UNIXライクなOSの発展に伴い、多くのジャーナリング
ファイルシステムが考案され、実装されています。
以下に、代表的なジャーナリング
ファイルシステムとその対応OSを示します。VxFS以外は無償、または標準搭載されているものがほとんどです。
商用UNIX: AIX (JFS, VxFS), HP-UX (VxFS), Solaris (UFS logging, ZFS, VxFS), IRIX (XFS)
Linux: ext3, ext4, JFS, ReiserFS, XFS, VxFS,
ZFS
FreeBSD: GEOM gjournal, ZFS, Journaled Soft updates
NetBSD: WAPBL
Windows: NTFS
Mac: HFS+ (Mac OS X 10.2.2からジャーナリング機能が追加)
*
その他:
BeOS (BFS), NetWare5 (NSS), Spiralog, WAFL (ネットアップONTAP)
ジャーナリング
ファイルシステムは、現代のコンピュータシステムにおいて、データの信頼性を維持するために不可欠な技術となっています。