JFFS

Journaling Flash File System（または JFFS）は Linux オペレーティングシステム上の NOR フラッシュメモリデバイス上における利用向けのログ構造ファイルシステムである。JFFS は JFFS2 によって置き換えられてきている。

設計 
フラッシュメモリは磁気ディスクとはまったく異なるアクセス上の制約がある。特に、フラッシュメモリを消去することは
 書き込む前に必要である
 遅い
 大きな（通常 64 KiB 以上）セグメントで行わなければならない
 ある回数だけ行うことができる（典型的には100万回未満）

ext2 のようなファイルシステムは典型的には、すべての更新の後に inode やディレクトリのようなデータ構造をディスク上で更新して、適当な位置でデータ構造を更新する。このようにウェアレベリングが大きく欠落しているため、従来のファイルシステムがフラッシュデバイス上での読み書きの利用に対して不向きになっている。
 
JFFS はフラッシュデバイスを循環ログとして扱うことでウェアレベリングを強化している。ファイルやディレクトリへのすべての変更はノード内のログの末尾に書き込まれる。個々のノード内では、メタデータを含むヘッダが最初に書き込まれ、次にファイルデータがあれば書き込まれる。ノードはヘッダ内のオフセットポインタでつながれている。ノードは最初有効として始まり、より新しいバージョンのノードが作成されたとき廃止になる。

ファイルシステムに残っている自由空間はログの先頭と末尾の間のすき間である。これが少なくなると、ガベージコレクタが先頭から末尾まで有効なノードをコピーし、廃止されたノードを飛ばす。このようにして空間を回収する。

欠点 
 マウント時に、ファイルシステムのドライバは inode チェーン全体を読み込んで、メモリ中に保たなければならない。これは非常に遅くなりうる。JFFS のメモリ消費はファイルシステム内のファイル数にも比例する。
 循環ログの設計は、静的かどうかにかかわらず、ファイルシステム内のすべてのデータが再書き込みされるという意味である。これは多くの必要ない消去を生み出し、フラッシュ媒体の寿命を減らす。

関連項目 
 フラッシュファイルシステム
 JFFS2
 YAFFS

脚注 
 Woodhouse, David. JFFS2: The Journalling Flash File System, version 2.

外部リンク 

JFFS documentation and official mailing list

Linuxのファイルシステム
フラッシュファイルシステム