フラッシュファイル システムは、フラッシュ メモリベースのストレージ デバイスにファイルを格納するために設計されたファイル システムです。フラッシュ ファイル システムは一般的なファイル システムと密接に関連していますが、フラッシュ メモリの性質と特性 (書き込み増幅の回避など) に合わせて最適化されており、特定のオペレーティング システムでの使用にも適しています。
概要
ブロック デバイスレイヤーはディスク ドライブをエミュレートして、フラッシュベースのストレージ デバイスで汎用ファイル システムを使用できるようにしますが、これはいくつかの理由から最適ではありません。
- ブロックの消去: フラッシュ メモリ ブロックは、書き込む前に明示的に消去する必要があります。ブロックの消去にはかなりの時間がかかる可能性があるため、デバイスがアイドル状態のときに未使用のブロックを消去すると効果的です。
- ランダム アクセス: 汎用ファイル システムは、シークのコストが高いため、可能な限りディスク シークを回避するように最適化されています。フラッシュ メモリ デバイスでは、シークの待ち時間は発生しません。
- ウェアレベリング: フラッシュ メモリ デバイスは、単一のブロックが繰り返し上書きされると消耗する傾向があります。フラッシュ ファイル システムは、書き込みを均等に分散するように設計されています。
ログ構造化ファイルシステムは、フラッシュファイルシステムに求められるすべての特性を備えています。[1]このようなファイルシステムには、JFFS2やYAFFSなどがあります。
フラッシュ メモリの特殊な特性のため、ウェア レベリングとエラー修正を実行するコントローラ、または書き込みをメディア全体に分散し、NAND フラッシュ ブロックの長い消去時間を処理する特別に設計されたフラッシュファイル システムのいずれかと組み合わせて使用するのが最適です。フラッシュ ファイル システムの基本的な概念は、フラッシュ ストアを更新するときに、ファイル システムが変更されたデータの新しいコピーを新しいブロックに書き込み、ファイル ポインタを再マップし、後で時間ができたときに古いブロックを消去することです。
実際には、フラッシュファイルシステムは、コントローラを持たない組み込みフラッシュメモリであるメモリテクノロジーデバイス(MTD)にのみ使用されます。リムーバブルフラッシュメモリカードとUSBフラッシュドライブには、ウェアレベリング、不良ブロック回復、電源喪失回復、ガベージコレクション、エラー訂正などの専用アルゴリズム[2] [3]を使用してMTDを管理するためのコントローラが組み込まれているため、フラッシュファイルシステムを使用する利点は限られています。ただし、 APFSやF2FSなどの一部のフラッシュファイルシステムは、 SSDやeUFSなどのFTLベースのフラッシュデバイスで使用できます。
モバイルデバイスの数が増加し、メモリサイズあたりのコストが低下し、フラッシュメモリチップの容量が増加するにつれて、フラッシュベースのメモリデバイスが普及しつつあります。
起源
最も初期のフラッシュファイルシステムは、フラッシュアレイを自由に書き込み可能なディスクとして管理するもので、イスラエルのM-Systems社によるTrueFFSであり、1992年7月にカリフォルニア州サンタクララで開催されたPC-Card Expoでソフトウェア製品として発表され、1993年に特許を取得しました。[4]
最も初期のフラッシュファイルシステムの1つは、1992年秋にリリースされたMS-DOS用のMicrosoftのFFS2でした。 [5] FFS2の前には「FFS」と呼ばれる以前の製品がありましたが、これはフラッシュファイルシステムには至らず、フラッシュアレイを自由に書き込み可能なディスクとしてではなく、 一度書き込み、何度も読み取りができる(WORM)空間として管理していました。
1994年頃、業界団体のPCMCIAは、 M-SystemsのTrueFFSの設計に基づいて、Flash Translation Layer (FTL)仕様を承認しました。この仕様は、M-SystemsとSCM Microsystemsによって作成され、共同で提案されました。SCM Microsystemsは、FTLの最初の実用的な実装も提供しました。Intelの承認を得て、 [6] FTLは、PCMCIA以外のメディアでも人気のあるフラッシュファイルシステム設計になりました。
Linux フラッシュ ファイルシステム
- JFFS、JFFS2、YAFFS
- JFFS はLinux向けの最初のフラッシュ専用ファイルシステムでしたが、当初 NOR フラッシュ用に開発されたJFFS2にすぐに置き換えられました。その後、 2002 年に NAND フラッシュに特化したYAFFSがリリースされ、JFFS2 も NAND フラッシュをサポートするように更新されました。
- ユービーアイエフエス
- UBIFSは2008年のLinux 2.6.22 [7]から統合されてきました。UBIFSは最初の統合以来活発に開発されてきました。[8] UBIFSのドキュメントはJFFS2およびMTDドライバとともにinfradead.orgでホストされています。初期の比較では、UBIFSの圧縮がF2FSよりも高速であることが示されています。[9]
- ログFS
- 別の Linux フラッシュ固有のファイルシステムであるLogFS は[アップデート]、現在、 JFFS2 のスケーラビリティの問題に対処するために開発されています。
- F2FS
- F2FS(フラッシュフレンドリーファイルシステム)は、Linuxカーネル3.8に追加されました。[10] F2FSは、生のフラッシュデバイスと直接通信することを目的としたものではなく、 SDカード などのフラッシュ変換レイヤーがすでに含まれているフラッシュベースのストレージデバイスで使用するように設計されています。[11]
ユニオンファイルシステム
Overlayfs、Unionfs、aufs はユニオンファイルシステムであり、複数のファイルシステムを結合して、ユーザーに単一のツリーとして表示できます。これにより、システム設計者は、名目上は読み取り専用のオペレーティングシステムの一部を、通常の読み取り/書き込み領域とは異なるメディアに配置できます。OpenWrtは通常、FTL のない生のフラッシュチップにインストールされます。OpenWrt は、圧縮された読み取り専用のSquashFSとJFFS2を結合するために overlayfs を使用します。
翻訳レイヤー
参照
参考文献
- ^ Arnd Bergmann (2011-02-18). 「安価なフラッシュドライブで Linux を最適化する」LWN.net . 2013-01-26閲覧。
- ^ 「Phison の USBkey コントローラ PS2251-63」。2011 年 7 月 28 日時点のオリジナルよりアーカイブ。2011 年 5 月 26 日閲覧。
- ^ OpenNFM: SSD および組み込みストレージモジュール用のオープンソース NAND FTL
- ^ 米国特許 5404485、「フラッシュファイルシステム、Amir Ban」
- ^ 「Microsoft FFS2 patent」。2016年12月19日時点のオリジナルよりアーカイブ。2009年1月9日閲覧。
- ^ 「Flash Translation Layer (FTL) 仕様の理解」(PDF)。Intel 。1998年 12 月。2014 年 7 月 19 日のオリジナル(PDF)からアーカイブ。2015年 7 月 27 日に取得。
- ^ ジョナサン・コーベット (2008-04-02)。 「ユビフス」。 LWN。
- ^ Richard Weinberger (2012-09-24). 「UBI: Fastmap の収録リクエスト」LKML。
- ^ Neil Brown (2012-12-11). 「JFFS2、UBIFS、そしてフラッシュストレージの成長」 LWN.
- ^ 「ファイルシステムとストレージ」。カーネルログ - 3.8 で登場。The H。2013年 1 月 21 日。2013年 1 月 23 日閲覧。
- ^ Neil Brown (2012-10-10). 「An f2fs teardown」. LWN.net . 2014-04-09閲覧。
外部リンク
- さまざまなフラッシュ ファイル システムに関するプレゼンテーション – 2007-09-24
- さまざまなフラッシュ ファイル システムに関する記事 – 2005 USENIX 年次会議
- さまざまなフラッシュ ファイル システムの調査 – 2005-08-10
- Linux フラッシュ ファイル システムの解剖 – 2008-05-20
