JFFS2
構造化ログの設計により、JFFS2の欠点は次のとおりです:
マウント時にすべてのノードをスキャンする必要があります。これは遅く、フラッシュデバイスがギガバイト単位にスケールアップするにつれてますます深刻な問題になりつつあります。この問題を克服するために、Linuxカーネルのバージョン2.6.15でErase Block Summary(消去ブロックの概要, EBS)が導入されました。EBSは各ブロックの最後に配置され、ブロックへの書き込みごとに更新され、ブロックの内容が要約され; マウント中に、ブロック全体をスキャンする代わりにEBSが読み取られます。
データの小さなブロックを多数書き込むと圧縮率がマイナスになる可能性もあるため、アプリケーションでは大きな書き込みバッファを使用することが不可欠です。
追加のデータをどれだけうまく圧縮できるか、および書き込みシーケンスの両方に依存するため、デバイスに残っている使用可能な空き領域を知る実用的な方法はありません。
JFFS2で導入された新機能:
NANDフラッシュデバイスのサポート。NANDデバイスはシーケンシャルI / Oインターフェイスを備えており、読み取り用にメモリマップすることができないため、これにはかなりの作業が必要でした。
ハードリンク。オンディスクフォーマットの制限により、これはJFFSでは不可能でした。
圧縮。 zlib、rubin、rtime、およびlzoの4つのアルゴリズムを使用できます。
よりよい性能。JFFSはディスクを純粋な循環ログとして扱いました。これにより大量の不要なI/Oが生成されました。JFFS2のガベージコレクション アルゴリズムにより、これはほとんど不要になります。
ブロックは、一度に1つずつ、下から上にノードで埋められます。クリーンブロックは、有効なノードのみを含むブロックです。 ダーティブロックには、少なくとも1つの廃止されたノードが含まれています。 空きブロックにはノードが含まれていません。
ガベージコレクタはバックグラウンドで実行され、ダーティブロックを空きブロックに変換します。これは、有効なノードを新しいブロックにコピーし、廃止されたノードをスキップすることによって行われます。これが完了すると、ダーティブロックが消去され、空きブロックとして指定する特別なマーカーでタグ付けされます(消去操作中に電源が失われた場合の混乱を防ぐため)。
ウェアレベリングをより均一にし、消去がほとんど静的なファイルシステムに集中しすぎないようにするために、ガベージコレクタはクリーンなブロックを消費することもあります。