ジャーナリングファイルシステムとは?
ジャーナリングファイルシステム(JFS)は、1990年にIBMが開発したファイルシステムの一種です。ファイルシステムのメインパートにまだコミットされていない変更を追跡するために、「ジャーナル」と呼ばれるデータ構造に変更の目的を記録します。通常、「ジャーナル」は循環ログです。
システムクラッシュや停電が発生しても、ジャーナリングファイルシステムを使用することでオンライン復旧がより迅速に行われるため、データ破損の可能性を抑えられます。実装によっては、JFSは格納されたメタデータのみを追跡する場合があり、データ破損のリスクが高くなりますがパフォーマンスが向上します。
一方で、ジャーナリングファイルシステムの一部の実装ではこの点において選択可能な動作を可能にしながら、保存されたデータと関連するメタデータの両方を追跡することがあります。
ジャーナリングファイルシステムの利点と欠点
ジャーナリングファイルシステムにはいくつかの利点と欠点があります。
ジャーナリングファイルシステムの利点
- システムクラッシュや停電時におけるデータ破損や損失の可能性を最小限に抑える
- クラッシュ後のファイルシステムのオンライン復旧を高速化
- アクティブに書かれたファイルで行われた変更を追跡して記録する
- ジャーナルログとファイルシステムを同じデバイスに置く必要がない
ジャーナリングファイルシステムのデメリット
- ハードドライブの一定のストレージスペースを占有する
- 追加の処理、メモリ、ディスクアクセスを占有する
- 古いストレージメディアや古いコンピューターに対応していない
ジャーナリングファイルシステムの種類
技術的には、ジャーナリングファイルシステムは2種類に分けられます。
物理ジャーナリングファイルシステム
物理ジャーナルは、後でメインファイルシステムに書き込まれるすべてのブロックの事前コピーを記録します。データが変更されたブロックごとに2回ストレージにコミットするため、大きなパフォーマンスペナルティが課せられますが、絶対的な障害保護が必要な場合には許容されるでしょう。
論理ジャーナリングファイルシステム
論理ジャーナルは、ジャーナル内でファイルメタデータの変更のみを保存し、耐障害性と引き換えに書き込み性能を大幅に向上させます。論理ジャーナリングファイルシステムは、クラッシュ後も迅速に回復しますが、ジャーナル付きのメタデータとジャーナルなしのファイルデータが同期しないことで、データの破損を引き起こすことがあります。
ジャーナリングを採用しているファイルシステム
- NTFS (New Technology file system)
- EXT2/EXT3/EXT4 (extended file system)
- APFS (Apple file system)
- XFS
- OpenZFS
- F2FS (Flash-friendly file system)
- GFS2 (global file system 2)
関連記事: Ext4とNTFSとHFS+の比較: どう違うのか&どれを使うべきか
ジャーナリングファイルシステムの代替手段
ログ構造ファイルシステム
ログ構造ファイルシステムはストレージデバイス全体を占有します。通常のファイルシステムと同様に操作できるよう構造化されているので、ログ構造ファイルシステムでは、書き込みを2回行う必要がありません。
Copy-on-writeファイルシステム
ゼタバイトファイルシステム(ZFS)などの完全なCopy-on-writeファイルシステムやBtrfsは、ファイルデータへのインプレース変更を回避するために、新しく割り当てられたブロックにデータを書き込みます。その後、新しいデータを指し示す更新されたメタデータを書き込み、その前のデータを無効化します。そして、そのメタデータを指し示すメタデータを、上位のスーパーブロックまたはファイルシステム階層のルートまで続くように書き込みます。2回書き込むオーバーヘッドがないため、ジャーナルと同じ正確性を維持することが特徴です。
ソフト更新
一部のUnixファイルシステム(UFS)の実装はジャーナリングを回避し、ソフト更新を実装しています。ディスク上のファイルシステムに一貫性を持たせるために書き込みを順番に並べます。クラッシュ時に作成される唯一の不整合がストレージリークという場合があります。このようなリークから回復するために、次回のマウント時に空き領域のマッピングがファイルシステムの完全な走査と照合されます。
ジャーナリングファイルシステム よくある質問
データ損失・破損を回避するプロ向けソフトウェア
ジャーナリングファイルシステムを活用する他にも、MiniTool ShadowMakerのような堅牢で信頼性の高いプログラムを使用して、システムクラッシュや停電によるデータ損失や破損に備えて重要なファイルをバックアップするという方法があります。