高速にデータを読み書きするために用いられるのが「キャッシュ」機構です。ただ,キャッシュを用いると停電時などファイルを破損させる恐れがあります。そこで,一部のファイル・システムは,ジャーナルという仕組みを用います。

 多くのファイル・システムは,入出力性能を向上させるために,読み書きするデータ(とその近くのデータ)を主メモリーに一時格納する「ファイル・キャッシュ」の仕組みを持ちます*1

 ファイル・キャッシュが有効なのは,2次記憶装置の入出力性能が1次記憶装置に比べて極めて低いためです。それに加えてコンピュータのデータには,一度使われたデータは近いうちにまた使われやすいという「時間的局所性」と,使われたデータの近くのデータは使われやすいという「空間的局所性」の2つの性質があります。そのためキャッシュ中のデータが使われる可能性が高いのです。必要なデータがキャッシュにあれば,2次記憶装置よりもはるかに高速に読み書きできます。

 キャッシュを効率的に利用する方法の一つに「非同期書き込み」があります。これは,ファイル更新時にキャッシュ上のデータだけを更新する方法です。変更されたデータは,タイミングを見計らって2次記憶装置に書き出します。

 データの書き換え時に2次記憶装置への書き込み操作が完了するのを待たずに済む上,短時間に再度書き換えが生じた場合には2次記憶装置への書き出し処理の回数を減らせることから非常に効果の高い高速化方法です。

 ただし,停電などによる突然のシステム・ダウンが発生した場合,キャッシュ中のデータが2次記憶装置に書き出されないまま失われる危険があります。ファイル中のデータが失われれば,ファイルが破損します。また,ファイルの管理情報が失われれば,ファイル・システム全体に深刻な影響を及ぼす可能性もあります。

 この問題を低減するために,一部のファイル・システムでは,データを変更する前に,ファイルの管理情報あるいはデータの変更内容を「ジャーナル」と呼ばれるログに同期的に(キャッシュを通さずに)書き込んでおきます。

 こうすれば,非同期書き込みによるデータの書き出しもれがあったとしても,対処しやすくなります。このようなファイル・システムを「ジャーナル・ファイル・システム」と呼びます。

 さらにジャーナル・ファイル・システムには,ジャーナルにどのようなデータを書き込むかによって「メタデータ・ジャーナリング」と「フル・データ・ジャーナリング」の2つの方式があります。

 一般的なのが「メタデータ・ジャーナリング」です。これは,ファイルの管理情報についての更新内容だけをジャーナルに記録する方式です。ファイルの内容は保護されませんが,ファイル・システム全体の破損は防げます。また,管理情報だけを記録するので,性能低下が比較的少ないのも特徴です。

 「フル・データ・ジャーナリング」は,管理情報に加えてファイルへの変更内容もジャーナルに記録する方式です。ファイルの内容も保護されますが,同じデータを複数回書き出すことになり著しく性能が低下します。安全に実装した場合,キャッシュを使わない同期書き込みより性能が低下すると考えられます。そのため,通常は利用されません。

 代表的なジャーナル・ファイル・システムにはWindowsの「NTFS」やMacOSの「HFS+」があります。また,Linuxで良く使われる「ext3」や「ReiserFS」もジャーナル・ファイル・システムです。