仮想ファイルシステム

仮想ファイルシステム (VFS) とは



仮想ファイルシステム(Virtual File System、VFS)は、実際のファイルシステムの上に位置する抽象化レイヤーです。その主な目的は、クライアントアプリケーションが異なる種類のファイルシステムに対して、統一された方法でアクセスできるようにすることです。

例えば、VFSを使用することで、アプリケーションはローカルストレージとネットワークストレージの違いを意識せずにアクセスできます。また、Windows、macOS、UNIXなどの異なるオペレーティングシステム(OS)間でのファイルシステムの違いも吸収し、透過的にファイル操作を行うことが可能になります。

VFSは、カーネルと実際のファイルシステム間のインターフェース(規約)を定義します。これにより、新しいファイルシステムカーネルに追加することが容易になります。ただし、規約はOSのリリースごとに変更される可能性があり、ファイルシステム側は新しいリリースに対応するために修正や再コンパイルが必要になる場合があります。一方、OS側が下位互換性を維持するよう設計されていれば、既存のファイルシステムはそのまま新しいOSでも動作します。

VFSの実装



Unix系システム


Unix系システムにおける最初のVFS機構は、1985年にSun Microsystems(Sun)がSunOS 2.0に導入しました。これにより、ローカルのUFSファイルシステムとリモートのNFSファイルシステムを透過的に利用できるようになりました。このSunのVFS設計は、NFSコードのライセンスを受けた他のUNIXベンダーにも広く採用されました。

サンはVFS機構を利用してMS-DOSのFATファイルシステムの実装も行いました。また、John Heidemannは、SunOS 4.0で実験的なFicusファイルシステムのために「スタッキング」VFSを開発しました。この設計により、暗号化ファイルシステムなどが、ファイル名管理やストレージ管理のコードを再利用することが可能になりました。

他のUnix系システムでは、System V Release 3のFile System Switch、UltrixのGeneric File System、LinuxのVFSなどがVFS機構として存在します。

その他のOS


OS/2とWindowsでは、VFSに相当する機構をInstallable File Systemと呼びます。また、Filesystem in Userspace (FUSE) は、LinuxNetBSD、FreeBSD、Open[[Solaris]]、macOSで、ユーザーランドのコードを仮想ファイルシステム機構にプラグインすることを可能にする機構です。

Windowsでは、シェル名前空間拡張を使ってユーザーランドのコードで仮想ファイルシステムのように実装できますが、低レベルなファイルシステムアクセスAPIをサポートしないため、すべてのアプリケーションからアクセスできるわけではありません。KDEのKIOやGNOMEのGVfs/GIOも同様の機構ですが、FUSEを活用することでシステムに円滑に統合できます。Windowsにはサードパーティ製のDokanというFUSEに相当する機構も存在します。


単一ファイルによる仮想ファイルシステム



「仮想ファイルシステム」という用語は、単一のファイルやファイル群をコンテナとして扱い、特定のソフトウェアを通してアクセスすることで、その中身がファイルシステムのように操作できる機構を指すこともあります。

例として、PCTaskやWinUAEなどのエミュレータや、Oracle VirtualBox、Microsoft Virtual PC、VMwareなどの仮想化ソフトウェアにおけるハードディスクエミュレーションがあります。これらの機構の利点は、集中管理が可能で削除が容易である点です。

単一ファイルによる仮想ファイルシステムは、通常のファイルシステムと同等の機能を備えていますが、内部構造にアクセスするには専用のプログラムが必要です(ドライバ経由で実装することで汎用的にアクセスすることも可能です)。欠点としては、通常のファイルアクセスに比べて性能が若干低下する点が挙げられます。特に、書き込みや削除の際には、仮想ファイルシステムを構成する単一ファイルの内容を広範囲に書き換える必要が生じるため、性能が低下しやすくなります。

実装例



エミュレータ仮想化ソフトウェア


エミュレータ仮想化ソフトウェアは、単にファイルシステムをエミュレートするだけでなく、ハードディスクのレイアウトもエミュレートします。

PCTask: Amiga上で動作するエミュレータで、PCのハードディスクをファイルとして扱います。FAT16でフォーマットすることで、MS-DOSやWindowsを動作させることができます。
WinUAE: Windows版のUAEで、Windowsマシン上で作成したファイルをAmigaファイルシステムとして扱います。WinUAEでは、このファイルを「hardfile」と呼びます。また、ホストOSのファイルシステム上のディレクトリをAmigaファイルシステムとしてアクセスすることも可能です。

その他の例


セキュリティや利便性の観点から、特定のアプリケーションでのみ単一ファイルをファイルシステムとしてアクセスしたいというニーズがあり、以下のような例があります。

whefs: POSIX準拠のOSで使用可能なオープンソースのC言語ライブラリで、1つのファイルをファイルシステムとして扱うアプリケーションをC/C++で作成できます。
Embedded File System (EFS): オープンソースでクロスプラットフォームのC++による実装です。
Solid File System (SolFS): クロスプラットフォームで暗号化と圧縮機能を備えた単一ファイルによる仮想ファイルシステムです。

Javaでアーカイブファイルを展開せずにディレクトリやファイル群としてアクセスできるソフトウェアや、FTP/HTTPでサーバ上のディレクトリをローカルファイルシステムのようにアクセスできるソフトウェアも、単一ファイルによる仮想ファイルシステムの一種と見なすことができます。

TrueZIP: Apache CommonsのVFS機能です。
* MillScript VFS

まとめ



VFSは、多様なファイルシステムを抽象化し、アプリケーション開発の複雑さを軽減する重要な技術です。Unix系システムを中心に発展し、その応用範囲は広く、エミュレータ仮想化ソフトウェア、さらには特定のアプリケーションで単一ファイルをファイルシステムとして扱うなど、多岐にわたります。性能面での課題は残るものの、その柔軟性と利便性から今後も重要な役割を担うでしょう。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。