LogFSについて
LogFSは
Linux向けに開発されたログ構造フラッシュ
ファイルシステムで、特に大容量デバイスに対応することを目的としています。これは、Jörn Engelによって設計され、家電
Linuxフォーラムの一部の支援を受けて開発されました。最初に登場したのは2010年5月16日、
Linuxカーネルのバージョン2.6.34に追加された際であり、以後広く利用されるようになりました。しかし、2016年12月にはメンテナンスが行われず、ほとんど使用されなかったことから、カーネルから削除されました。
歴史
2008年11月の時点で、LogFSは十分に成熟しており、多くのテストスイートをクリアしました。2010年にリリースされた際には「実験的」とされましたが、大規模なユーザーベースを持っていました。しかし、6年後の2016年にメンテナンスが行われていないことが判明し、カーネルから除外されました。
操作方法
LogFSは、従来の
ファイルシステムである
JFFS2が抱えるいくつかの課題を解決するために設計されました。特に、大規模なフラッシュメモリドライブに対応することが重要です。
JFFS2はドライブ全体をスキャンして全てのiノードツリーをメモリにキャッシュする必要があり、これには時間がかかります。そのため、大型のドライブでは数十秒のスキャンが必要で、その間メモリを大量に消費します。LogFSでは、このようなスキャンの手間を省き、ドライブの一部のスペースにiノードツリーを保持して使用します。これにより、リアルタイムでの操作が可能になります。
LogFSはファイルのiノードツリーを直接ドライブに保存します。この方法により、ファイルに新しいデータを書き込む際に、ツリー内の各関連ノードが再書き込みされる必要があります。最下位ノードからじょじょに書き込まれ、最終的にルートiノードが更新されます。これにより、更新操作の原子性が維持されます。
フラッシュメモリブロックの取り扱いについてもLogFSは工夫しています。フラッシュメモリブロックは通常、
ファイルシステムブロックよりも大きく、これを効率的に使う方法としてLogFSは複数の
ファイルシステムブロックを1つのフラッシュメモリブロックにまとめて保存します。また、各フラッシュメモリブロックの最後には、そのブロックに格納されているデータの情報が記録されます。全ての
ファイルシステムブロックが移動または削除されると、ブロックは消去され、新しいデータの保存に使用できるようになります。
LogFSでは、フラッシュメモリドライブのストレージ効率を底上げするため、データの圧縮を行います。これは
ガベージコレクションによって実現され、特定の方法でフラッシュメモリブロックにデータが配置されることが前提です。
ガベージコレクションは、iノードツリーの同じレベルのファイルデータのみを同一のフラッシュメモリブロックに保持し、これにより効率的に空のブロックを利用することができます。
ガベージコレクションでは、例えば空のフラッシュメモリブロックを一つ使ってツリーのトップレベルだけを整理したり、二つのブロックで上位二つのレベルを整理することが可能です。また、N個の空のブロックを利用することで、ツリーのNレベル全てを収集することも実現できます。最悪のケースでは処理が非常に遅くなることもありますが、頻繁には起こらず、システム全体の効率を高めるために数個のフラッシュメモリブロックを確保するだけで済みます。
関連項目
参考