仮想ファイルシステム
Channel: 宇宙のすべての知識 プリンシピア
Date: 25/01/2020

仮想ファイルシステム, by Wikipedia https://ja.wikipedia.org/wiki?curid=621449 / CC BY SA 3.0

#OSのファイルシステム
#仮想化
仮想ファイルシステム

仮想ファイルシステム（、VFS）は、実際のファイルシステムの上位に位置する抽象化層である。VFSの目的はクライアントアプリケーションが様々なファイルシステムに同じ方法でアクセスできるようにすることである。例えば VFS を使うと、クライアントアプリケーションはローカルな記憶装置にもネットワーク上の記憶装置にも透過的にアクセスできるため、その違いを意識する必要がない。あるいは、Windows、Mac OS、UNIXといったオペレーティングシステム (OS) の違いを超えてファイルシステムの違いを意識することなくアクセスすることが可能となる。

VFSは、カーネルと実際のファイルシステムとのインタフェースあるいは規約を定義している。従って、その規約に従うことで簡単に新たなファイルシステムをカーネルに追加することができる。規約の条件はリリースの度に非互換な変更を加えられる可能性があり、ファイルシステムは新たなリリースに対応するために修正を施したり、再コンパイルする必要がある。あるいは、OS側で規約変更を下位互換を保つように行っていれば、各ファイルシステムは新たなバージョンのOSでもそのまま使用可能となる。

Unix系システムでの最初のVFS機構は、1985年サン・マイクロシステムズ（サン）が SunOS 2.0 に導入した。その時点で、ローカルなUFSファイルシステムとリモートのNFSファイルシステムを透過的に使用することができた。このため、サンからNFSのコードをライセンス供与されたUNIXベンダー各社は、サンのVFSの設計をコピーすることが多かった。他のファイルシステムを追加することが容易になり、サンはVFS機構を利用してMS-DOSのFATファイルシステムを実装した（SunOS 4.1まで出荷されなかった）。SunOSの実装はSystem V Release 4のVFS機構の基盤となった。

John Heidemannは、実験的なFicusファイルシステムのために SunOS 4.0で 「スタッキング (stacking)」VFSを開発した。この設計は、実装は異なるが意味的には同等のファイルシステム間でコードの再利用を可能にした（例えば、暗号化ファイルシステムは暗号化されていない他のファイルシステムのファイル名管理とストレージ管理のコードを利用することができた）。Heidemann はこの成果を4.4BSDでも使用した。macOSを含むBSD系のOSでは、彼の Stacking VFS のコードが使われている。

その他のUnix系システムでのVFS機構として、System V Release 3の File System Switch、Ultrixの Generic File System、LinuxのVFSなどがある。OS/2と Windows では、VFSと同等の機構を と呼ぶ。

Filesystem in Userspace (FUSE) は、Linux、NetBSD、FreeBSD、OpenSolaris、macOSにおいて、ユーザーランドのコードを仮想ファイルシステム機構にプラグインすることを可能にする機構である。

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

仮想ファイルシステムという用語は、単一のファイルやファイル群（必ずしも具体的なファイルシステム内にある必要は無い）をコンテナとして扱い、何らかのソフトウェアを通してアクセスすることで、その中身があたかもファイルシステムであるかのように操作できる機能を提供する機構を指すこともある。例えば、PCTaskやといったエミュレータ、オラクルのVirtualBox、マイクロソフトの Virtual PC、VMwareといった仮想化ソフトウェアのハードディスク・エミュレーションが例として挙げられる。

このような機構の利点は、集中管理でき...