ジャーナリングファイルシステム

ジャーナリングファイルシステム（Journaling file system）とは、書き換え処理要求（トランザクション）単位で内包するファイル構成情報を含むメタデータを管理および保持できる機能を持ったファイルシステムのこと。ジャーナルファイルシステムともいう。

概要 
重要なデータを扱うシステムにおいて、細分化されたファイルや大規模なファイルなどの更新を行う際、ファイルシステムのメタデータ書き換え処理において比較的長い時間が必要となり、その書き換え中に電源断や処理中断が発生した場合、ファイル構成情報に矛盾が発生し、最悪データへのアクセスが不可能となってしまう。
このような状況を避けるため、UNIXでいうinode情報やWindowsのSuperBlock、FNODEといったファイルシステム上のメタデータを書き換え処理（トランザクション）単位で管理・保持する事ができる機能を持ったファイルシステムのことである。

既存ファイルシステムの問題点 
一般にディスク上のファイルシステムに書き込まれるデータには、データ自体を現す実データ部分とその実データのディスク上の位置、ファイル名/更新日時、アクセス権限などの管理情報を現すメタデータ部分の2種類に分類される。

実際にハードディスクにデータを書き込む際のファイルシステムの動きを追ってみる。
ファイルシステムがデータを記録する場合、まず実データの書き込みを行い、その上でその実データを管理するメタデータを書き出さなくてはならない。

このメタデータの記録に時間が掛かる場合、つまり非常に小さいファイル群の記録(管理データが増える)やその逆の非常に大きなファイル（実データがどこにあるかの管理データが増える）を記録するような場合において、メタデータの書き込みを行っている最中に何らかの原因（例えば電源切断）により書き込み処理が中断したとする。
その場合、メタデータとして記録した情報に不整合が発生し、実データの配置や管理情報矛盾などが起こり、実データへのアクセス手段を失ってしまう事になる。

初期の回避策 
この問題を回避する方法として、システムが再起動した際にハードディスク全体をスキャンするプログラムを実行して、矛盾を修正する方法が用意された。

このチェックプログラムと各オペレーティングシステムは以下の様。
 UNIX系: fsck
 Windows: chkdsk, scandisk
 Mac OS: Disk First Aid
これらのプログラムは起動時に自動的にチェックするような対応が取られている。

しかし、これらのツールを使用して、起動時にチェックする方法には以下のような問題点が残される。
 実データとメタ情報の突合せ確認を行うため、全ディスクの情報を検証するための処理とディスク全体の再スキャンに非常に時間がかかる。
 スキャンプログラムによるチェック時に想定以外の問題を検出した場合、不整合なデータを削除するため、実データ自体が失われてしまう可能性が残る。

この問題を解決するため、ジャーナリングファイルシステムが導入された。

ジャーナリングによる解決 
以上の問題点に対し、それぞれの実データ書き込みよりもメタデータの書き込みを先行的に行い、書き込み要求に従ってそのメタデータを「ジャーナル」と呼ばれる領域に逐次記録し、更新する事で対処するジャーナリングが考案され、実装された。

メタデータを先行的に書き込み、実データ書き込み要求に従ってその変更点を反映し、複数回分のメタデータをジャーナルに保持・管理する事で、ファイル更新中の書き込み中断に対処する事ができる。

この方法を取る事により、メタデータと実データ間の矛盾が発生しても、矛盾が発生する前のメタデータに強制的に戻す事により、実データを含むファイル自体の消失を避ける事ができる。この方法は、ハードディスク全体を詳細にスキャンするより遥かに処理時間を短くする事が可能である。

他の解決方法として、いかなるタイミングで連続する書き込みが中断されても矛盾が起きないよう、ディスクへの書き込み順を制御する、という解決がある。FreeBSDではそちらが採用された（soft updates）。

一般にジャーナルによって保護されるのはメタデータまでで、ファイルの中身までは保護されない。つまり、ジャーナリングファイルシステムを導入することで、システムクラッシュにともなうファイルシステムの破壊という事態は避けられるものの、保存したはずの内容が保存されていなかったという事態が起こる可能性は十分に考えられる。

ただし、Linuxのext3やネットアップのWAFL等、いくつかのジャーナリングファイルシステムでは実データの保護も行っている。

経緯 
元々、汎用機において重要な業務データを扱う際のファイルのメタデータ保持方法から考案されたものであり、汎用機のファイル管理ツールの設計思想をPCで取り入れるべく考慮された。
そのため、オープン系での最初のジャーナリングファイルシステムは、汎用機及び高可用トレラントコンピュータ向けのOSを作っていたIBMのJFS（AIX V3.1向け1990年)及び、Tolerant Software(VERITAS)のVxFS(UNIX System V向け1989年)である。

JFS
当初はOS/2に開発が進み、実際のリリースは、1990年にIBMの商用UNIXであるAIXのV3.1に行われた。

VxFS
 また、ほぼ同時期に、UNIXの汎用機置き換え需要に合わせ、1987年にTolerant Software（VERITAS社の前身）がAT&T UNIX System Laboratoriesの協力を得て、自社のハイアベイラビリティ・オペレーティングシステムからUNIX System V向けに価値あるコードを抽出し、トランザクションベースのボリュームマネージャと共にUNIX向けジャーナリングファイルシステムを業界で初めて開発した。その後、商用パッケージとして1989年にVxFSとして提供された。

その後、UNIXライクなOSの発展に伴い、多くのジャーナリングファイルシステムが考案され、実装されている。

ジャーナリングファイルシステム製品 
以下、VxFSのみ有償であり、それ以外は無償または標準搭載である。

商用UNIX 
 AIX: JFS、VxFS
 HP-UX: VxFS
 Solaris: UFS logging、ZFS（Solaris10から使用可能）、VxFS
 IRIX: XFS

Linux 
 ext3、ext4
 JFS
 ReiserFS
 XFS
 VxFS
 ZFS
 NTFS

FreeBSD 
 GEOM gjournal
 ZFS
 Journaled Soft updates (FreeBSD 9 の途中以降)

NetBSD 
 WAPBL

Windows 
 NTFS

Mac 
 HFS+ - ジャーナリングはMac OS X 10.2.2から加わった

その他のOSでのジャーナリングファイルシステム 

 BeOS: BFS
 NetWare5: NSS
 Spiralog
 WAFL - ネットアップの統合ストレージ管理マイクロカーネルONTAPに実装

OSのファイルシステム