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

フラッシュファイルシステム（）は、フラッシュメモリを使用した記憶装置にファイルを格納するためのファイルシステムである。

フラッシュファイルシステムは一般的なファイルシステムと密接に関連があるが、フラッシュメモリの性質と特性に合わせて最適化されており（ライトアンプリフィケーションの回避など）、特定のオペレーティングシステムの中で使用されている。

 概要 
汎用ファイルシステムがフラッシュベースの記憶装置で使えるように、ブロックデバイス層はディスクドライブをエミュレートすることができるが、これは、以下の理由により最適状態に及ばない。

 ブロック消去: フラッシュメモリブロックは、書き込みの前に完全に消去する必要がある。ブロックを消去するのに掛かる時間は重要となることもあり得るので、装置がアイドル状態の間に使っていないブロックを消去することも有益である。
 ランダムアクセス: 汎用ファイルシステムは、シークに時間がかかるため、可能な限りシークを避けるために最適化される。フラッシュメモリ装置は、シークの待機時間を気にする必要がない。
 ウェアレベリング: 一つのブロックが繰り返し上書きされると、フラッシュメモリ装置は劣化する傾向がある。フラッシュファイルシステムは均一に書き込むように設計されている。

ログ構造ファイルシステムの特性は、フラッシュファイルシステムに望ましい。そのようなファイルシステムにはJFFS2、YAFFSがある。

フラッシュメモリの特性のため、ウェアレベリングと誤り訂正を実施するコントローラか、メディア全体に渡って書き込みを行いNANDフラッシュブロックの長い消去時間を考慮して設計されたフラッシュファイルシステムが最も使われる。フラッシュ・ファイルシステムの基本的な概念は、次の通りである。フラッシュのデータを更新するとき、ファイルシステムはそのフラッシュブロックの変更後のデータを別のブロックに書き込み、ファイルへのポインタを変更し、後で時間があるときに古いブロックを消去する。

実際には、フラッシュファイルシステムはMemory Technology Device (MTD) のために使用される。MTDはフラッシュメモリに組み込まれており、コントローラは持たない。取り外し可能なフラッシュメモリーカードやUSBメモリは、専用のアルゴリズムでMTDを管理するために、内蔵コントローラを持っているPhison's USBkey controller PS2251-63OpenNFM: An open source NAND FTL for SSD and embedded storage module。

モバイル機器の数が増加し、メモリ容量当たりの単価が減少し、フラッシュメモリ・チップの容量は増加するにつれ、フラッシュベースのメモリデバイスはより一般的になっている。

 歴史 
世界初のフラッシュファイルシステムは、イスラエルのが開発したTrueFFSであった。これはフラッシュの配列を自由に書き込みのできるディスクのように管理するものである。1992年7月にカリフォルニア州サンタクララで開かれたPCカードエキスポで発表され、1993年に特許が取られた。

最も古いフラッシュファイルシステムの一つに、1992年秋にリリースされたMS-DOSで使われたマイクロソフトのFFS2があるMicrosoft FFS2 patent 。FFS2はそれ以前の製品である"FFS"の後継であるが、FFSはフラッシュファイルシステムと呼べるものではなかった。FFSはフラッシュの配列を、自由に書き込みのできるディスクではなくWORM（write once, read many: 書き込みは一度だけ、読み出しは何度でも可能）な空間として管理していた。

1994年ごろ、業界団体PCMCIAが、M-SystemsのTrueFFSの設計を元にしたFlash Translation Layer（FTL、フラッシュ変換レイヤ）の仕様を採択した。この仕様は、M-SystemsとSCMマイクロシステムズが共同で執筆し提案したものである。SCMマイクロシステムズはFTLの初の動作する実装も提供した。インテルの支持により、FTLはPCMCIA以外のメディアでも一般的なフラッシュファイルシステムとなった。

 Linuxのフラッシュファイルシステム 
 JFFS, JFFS2, YAFFS
 JFFSはLinuxで初のフラッシュに特化したファイルシステムである。しかし、すぐにJFFS2に置き換えられた。当初はNOR型フラッシュメモリ用に開発されていた。2002年に、NAND型フラッシュメモリ用に開発されたYAFFSがリリースされた。後に、JFFS2もNANDフラッシュに対応するようになっている。
 UBIFS
 UBIFSは2008年10月にLinux 2.6.22向けにリリースされた。UBIFSは最初から活発に開発が行われている。いくつかの最初の比較では、UBIFSがF2FSより速く圧縮を行うことを示している。
 LogFS
 LogFSは、JFFS2のスケーラビリティ問題に対処するために開発されている。
 F2FS
 F2FS（Flash-Friendly File System）はLinuxカーネル3.8でリリースされた。F2FSは、生のフラッシュ装置を直接扱うのではなく、Flash Translation Layerを内蔵するフラッシュベースの記憶装置（SDカードなど）の上で使われるように設計されている。

 出典 

 関連項目 

 ウェアレベリング
 ライトアンプリフィケーション

 外部リンク 
 Presentation on various Flash File Systems – 2007-09-24
 Article regarding various Flash File Systems – 2005 USENIX Annual Conference
 Survey of various Flash File Systems – 2005-08-10
 Anatomy of Linux Flash File Systems – 2008-05-20

*
Category:記憶装置
Category:OSのファイルシステム