ジャーナリング
from ファイルシステム
Claude Code.icon
ファイルシステムのメタデータ(およびオプションでデータ本体)の変更を、実際にディスクへ書き込む前に、専用のログ領域(ジャーナル領域)に記録する仕組み。
なぜ必要か
ファイルの書き込みは複数のディスク操作(inode更新、ブロック割当、ディレクトリエントリ更新など)で構成される。これらの途中でクラッシュや電源断が起きると、ディスク上のデータ構造が不整合な状態になる。
ジャーナリングがない場合(例: 古いext2)、起動時にfsckでディスク全体をスキャンして整合性を検証する必要があり、大容量ディスクでは非常に時間がかかる。
仕組み
1. トランザクション開始
変更に必要な操作をジャーナル領域に書き出す
2. コミット
ジャーナルにコミットレコードを書く(この時点で変更が確定)
3. チェックポイント
ジャーナルの内容を本来の場所に反映する
4. ジャーナル解放
反映済みのジャーナル領域を再利用可能にする
クラッシュ後のリカバリでは、ジャーナルを再生(replay)するだけで済むので、fsckの全スキャンが不要になり、数秒で復旧できる。
ジャーナリングのモード
ext4を例にとると3つのモードがある:
table:_
モード 記録対象 安全性 性能
journal メタデータ + データ 最高 低い(全データを二重書き)
ordered(デフォルト) メタデータのみ。ただしデータを先にディスクに書いてからメタデータをジャーナルに記録 高い 中間
writeback メタデータのみ。データの書き込み順序は保証しない 低い(クラッシュ後にゴミデータが見える可能性) 高い
ジャーナリングと他のアプローチの比較
CoW
ZFSやBtrfsが採用。既存ブロックを上書きせず、新しい場所に書いてからポインタを切り替える。ジャーナル不要で整合性を保てる
Log-structured FS
ディスク全体をログとして扱う。書き込みは常にシーケンシャル。SSD/フラッシュ向け(F2FSなど)
/mrsekut-book-477419607X/218