仮想ファイルシステム(VFS)または仮想ファイルシステムスイッチは、より具体的なファイルシステムの上に構築された抽象的なレイヤーです。VFSの目的は、クライアントアプリケーションが異なる種類の具体的なファイルシステムに統一された方法でアクセスできるようにすることです。たとえば、VFSを使用すると、クライアントアプリケーションが違いに気づくことなく、ローカルストレージデバイスとネットワークストレージデバイスに透過的にアクセスできます。また、 Windows、従来のMac OS / macOS、Unixファイルシステム間の違いを橋渡しするためにも使用でき、アプリケーションはアクセスしているファイルシステムの種類を意識することなく、これらの種類のローカルファイルシステム上のファイルにアクセスできるようになります。
VFSは、カーネルと具体的なファイルシステム間のインターフェース(または「契約」)を規定します。そのため、契約を満たすだけで、カーネルに新しいファイルシステムタイプのサポートを簡単に追加できます。契約の条件はリリースごとに互換性のない形で変更される可能性があり、その場合は具体的なファイルシステムのサポートを再コンパイルし、場合によっては再コンパイル前に修正して、新しいバージョンのオペレーティングシステムで動作するようにする必要があります。あるいは、オペレーティングシステムの提供元が契約に対して後方互換性のある変更のみを行い、特定のバージョンのオペレーティングシステム向けに構築された具体的なファイルシステムのサポートが将来のバージョンのオペレーティングシステムでも動作するようにすることも可能です。

Unix ライクなシステムにおける最初の仮想ファイルシステム機構の 1 つは、 1985 年にSun MicrosystemsがSunOS 2.0で導入しました。 [ 2 ]これにより、Unix システム コールがローカルUFSファイルシステムとリモートNFSファイルシステムに透過的にアクセスできるようになりました。このため、Sun から NFS コードのライセンスを取得した Unix ベンダーは、Sun の VFS の設計をコピーすることがよくありました。他のファイルシステムもプラグインできました。Sunで開発されたMS-DOS FATファイルシステムの実装は SunOS VFS にプラグインできましたが、製品として出荷されたのは SunOS 4.1 以降でした。SunOS の実装は、 System V Release 4の VFS 機構の基礎となりました。
ジョン・ハイデマンは、実験的なFicusファイルシステムのために、SunOS 4.0上でスタッキングVFSを開発しました。この設計により、意味論は異なるものの類似したファイルシステム間でのコードの再利用が可能になりました(例えば、暗号化ファイルシステムは、非暗号化ファイルシステムの命名およびストレージ管理コードをすべて再利用できます)。ハイデマンはこの成果を学位論文研究の一環として4.4BSD向けに改良しました。このコードの子孫は、 macOSを含む現代のBSD派生システムのファイルシステム実装の基盤となっています。
Unixの他の仮想ファイルシステムには、System V Release 3のファイルシステムスイッチ、 Ultrixの汎用ファイルシステム、 LinuxのVFSなどがあります。OS /2とMicrosoft Windowsでは、仮想ファイルシステムの仕組みはインストール可能ファイルシステムと呼ばれています。
FUSE(Filesystem in Userspace)メカニズムにより、Linux 、NetBSD、FreeBSD、OpenSolaris、およびmacOSの仮想ファイルシステムメカニズムにユーザーランドコードを組み込むことが可能になります。
Microsoft Windowsでは、仮想ファイルシステムはユーザーランドのシェル名前空間拡張を介して実装することもできます。ただし、Windowsの最も低レベルのファイルシステムアクセスアプリケーションプログラミングインターフェイスをサポートしていないため、名前空間拡張として実装されたファイルシステムにアクセスできるアプリケーションはすべてではありません。KIO とGVfs / GIOは、それぞれKDEとGNOMEデスクトップ環境で同様のメカニズムを提供し、同様の制限がありますが、FUSE技術を使用するように設定することで、システムにスムーズに統合できます。
仮想ファイルシステムとは、ソフトウェアを使用して具体的なファイルシステムの機能を提供する管理可能なコンテナとして機能するファイルまたはファイル群(必ずしも具体的なファイルシステム内とは限らない)を指す場合があります。このようなコンテナの例としては、Callback Technologies社のCBFS Connectや、PCTaskやいわゆるWinUAE、Oracle社のVirtualBox、Microsoft社のVirtual PC、VMwareなどのエミュレータ内の単一ファイル仮想ファイルシステムが挙げられます。
このタイプのファイルシステムの主な利点は、一元管理されており、削除が容易であることです。単一ファイル仮想ファイルシステムには、あらゆるファイルシステム(仮想ファイルシステムか否かを問わず)に期待される基本的な機能がすべて含まれている可能性がありますが、これらのファイルシステムの内部構造へのアクセスは、多くの場合、単一ファイル仮想ファイルシステムを利用するために特別に作成されたプログラムに限定されています(汎用的なアクセスを可能にするドライバによる実装ではなく)。もう1つの大きな欠点は、他の仮想ファイルシステムと比較してパフォーマンスが比較的低いことです。パフォーマンスが低い主な理由は、仮想ファイルシステムへのデータの書き込みや削除時に仮想ファイルをシャッフルするコストがかかるためです。
単一ファイル仮想ファイルシステムの具体的な例としては、PCTaskやWinUAEといったエミュレーターが挙げられます。これらはファイルシステムデータだけでなく、エミュレートされたディスクレイアウトもカプセル化しています。そのため、OSのインストールを他のソフトウェアと同様に扱いやすく、リムーバブルメディアやネットワーク経由で簡単に転送できます。
AmigaエミュレータPCTask は、 4.77 MHzで動作するIntel PC 8088ベースのマシン(後に25 MHz で動作する80486 SX も)をエミュレートしました。PCTask のユーザーは、Amiga ファイルシステム上に大きなサイズのファイルを作成することができ、このファイルは、まるで実際の PC ハードディスクであるかのようにエミュレータから仮想的にアクセスされました。ファイルは、通常の MS-DOS または Windows ファイルを保存するために FAT16 ファイルシステムでフォーマットすることができました。[1] [2]
Windows用UAEであるWinUAEを使用すると、Windows 上の大きな単一ファイルを Amiga ファイルシステムとして扱うことができます。WinUAE では、このファイルはハードファイルと呼ばれます。[3]
UAE はホストファイルシステム ( Windows、Linux、macOS、AmigaOS )上のディレクトリをAmiga ファイルシステムとして扱うこともできます。[4]