YAFFS
「ライトワンスルール」(「ライトワンスプロパティ」)を適用するストレージシステムを設計することには、いくつかの利点があります。
YAFFS2はこれらのより新しいチップに対応するようデザインされた。YAFFS2はYAFFS1のソースコードに基づいていて、大きな違いとしては内部構造は512バイトサイズに固定されておらず、ブロックシーケンス番号は各々の書き込まれたページに置かれている。これにより古いページは「ライトワンス」ルールに違反すること無く論理的に上書きされる。2003年後半にリリースされました。
YAFFSは頑丈なログ構造ファイルシステムであり、データ完全性に高い優先度が設定されている。YAFFSの2番目の目標はハイパフォーマンスである。YAFFSはほとんどの代替よりも通常効率が良いだろう。またポータブルなデザインとなっており、Linux、WinCE、pSOS(英語版)、RTEMS、eCos、ThreadXを始めとして様々な専用目的のOSで使用可能である。変種である「YAFFS/Direct」はOSを持たない環境、組み込みOS、ブートローダで使用され、中枢のファイルシステムとしてだけでなくOSとNANDフラッシュとのシンプルなインターフェイスとしての役割も持つ。
このファイルシステムはGPLおよびAleph Oneとのプロダクトライセンスの両方でライセンスされている。
フラッシュメモリを単に消去する以外に、YAFFSファイルシステムを初期化するための特別な手順はない。不良ブロックが検出されると、YAFFSはブロックのスペア領域の5番目のバイトをマークするスマートメディアスキームに従う。そのようにマークされたブロックは、それ以降は未割り当てのままである。
ファイルデータを書き込むために、YAFFSは最初にタイムスタンプ、名前、パスなどのファイルメタデータを説明するページ全体(YAFFS用語ではチャンク)を書き込む。新しいファイルには、一意のオブジェクトID番号が割り当てられ; ファイル内のすべてのデータチャンクには、スペア領域内にこの一意のオブジェクトIDが含まれる。YAFFSは、これらのチャンクの物理的な場所のツリー構造をRAMに維持する。チャンクが無効になると(ファイルが削除されるか、ファイルの一部が上書きされ)、YAFFSはチャンクのスペア領域の特定のバイトを「ダーティ」としてマークする。ブロック全体(32ページ)がダーティとしてマークされている場合、YAFFSはブロックを消去してスペースを再利用できる。 ファイルシステムの空き領域が少ない場合、YAFFSは適切なページのグループを新しいブロックに統合する。 次に、YAFFSは、元の各ブロック内のダーティページによって使用されていたスペースを再利用する。
YAFFSシステムがNANDフラッシュデバイスをマウントする場合、各ブロックにアクセスして、スペア領域をスキャンして有効なデータを確認する必要がある。次に、この情報を使用して、メモリに常駐するツリーデータ構造を再構成する。