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

フラッシュファイルシステム(flash file system)は、フラッシュメモリを使用した記憶装置にファイルを格納するためのファイルシステムである。 フラッシュファイルシステムは一般的なファイルシステムと密接に関連があるが、フラッシュメモリの性質と特性に合わせて最適化されており（ライトアンプリフィケーションの回避など）、特定のオペレーティングシステムの中で使用されている。 汎用ファイルシステムがフラッシュベースの記憶装置で使えるように、ブロックデバイス層はディスクドライブをエミュレートすることができるが、これは、以下の理由により最適状態に及ばない。 ブロック消去: フラッシュメモリブロックは、書き込みの前に完全に消去する必要がある。ブロックを消去するのに掛かる時間は重要となることもあり得るので、装置がアイドル状態の間に使っていないブロックを消去することも有益である。 ランダムアクセス: 汎用ファイルシステムは、シークに時間がかかるため、可能な限りシークを避けるために最適化される。フラッシュメモリ装置は、シークの待機時間を気にする必要がない。 ウェアレベリング: 一つのブロックが繰り返し上書きされると、フラッシュメモリ装置は劣化する傾向がある。フラッシュファイルシステムは均一に書き込むように設計されている。 ログ構造ファイルシステムの特性は、フラッシュファイルシステムに望ましい。そのようなファイルシステムにはJFFS2、YAFFSがある。 フラッシュメモリの特性のため、ウェアレベリングと誤り訂正を実施するコントローラ（英語版）か、メディア全体に渡って書き込みを行いNANDフラッシュブロックの長い消去時間を考慮して設計されたフラッシュファイルシステムが最も使われる。フラッシュ・ファイルシステムの基本的な概念は、次の通りである。フラッシュのデータを更新するとき、ファイルシステムはそのフラッシュブロックの変更後のデータを別のブロックに書き込み、ファイルへのポインタを変更し、後で時間があるときに古いブロックを消去する。 実際には、フラッシュファイルシステムはMemory Technology Device(MTD)のために使用される。MTDはフラッシュメモリに組み込まれており、コントローラは持たない。取り外し可能なフラッシュメモリーカードやUSBメモリは、専用のアルゴリズムでMTDを管理するために、内蔵コントローラを持っている。 モバイル機器の数が増加し、メモリ容量当たりの単価が減少し、フラッシュメモリ・チップの容量は増加するにつれ、フラッシュベースのメモリデバイスはより一般的になっている。 世界初のフラッシュファイルシステムは、イスラエルのM-Systems（英語版）が開発したTrueFFSであった。これはフラッシュの配列を自由に書き込みのできるディスクのように管理するものである。1992年7月にカリフォルニア州サンタクララで開かれたPCカードエキスポで発表され、1993年に特許が取られた。 最も古いフラッシュファイルシステムの一つに、1992年秋にリリースされたMS-DOSで使われたマイクロソフトのFFS2がある。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以外のメディアでも一般的なフラッシュファイルシステムとなった。 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カードなど）の上で使われるように設計されている。 フラッシュファイルシステムの一覧（英語版） ウェアレベリング ライトアンプリフィケーション ^ Arnd Bergmann (2011年2月18日). “Optimizing Linux with cheap flash drives”. LWN.net. 2013年1月26日閲覧。 ^ Phison's USBkey controller PS2251-63 ^ OpenNFM: An open source NAND FTL for SSD and embedded storage module ^ US patent 5404485, "Flash file system, Amir Ban"  ^ Microsoft FFS2 patent Archived 2016年12月19日, at the Wayback Machine. ^ “Understanding the Flash Translation Layer (FTL) Specification (PDF)”. Intel (1998年12月). 2014年7月19日時点のオリジナルよりアーカイブ。2015年7月27日閲覧。 ^ Jonathan Corbet (2008年4月2日). “UBIFS”. LWN. 2016年3月3日閲覧。 ^ Richard Weinberger (2012年9月24日). “UBI: Fastmap request for inclusion”. LKML. 2016年3月3日閲覧。 ^ Neil Brown (2012年12月11日). “JFFS2, UBIFS, and the growth of flash storage”. LWN. 2016年3月3日閲覧。 ^ “Filesystems and storage”. Kernel Log - Coming in 3.8. The H (2013年1月21日). 2013年1月23日閲覧。 ^ Neil Brown (2012年10月10日). “An f2fs teardown”. LWN.net. 2014年4月9日閲覧。 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