Введение
Абстрактный слой над более конкретной файловой системой. Виртуальная файловая система (VFS) или виртуальный переключатель файловой системы — это абстрактный слой над более конкретной файловой системой. Цель VFS — предоставить клиентским приложениям единый способ доступа к различным типам конкретных файловых систем. Например, VFS может использоваться для прозрачного доступа к локальным и сетевым устройствам хранения, не требуя от клиентского приложения осознания различий. VFS позволяет преодолеть различия между файловыми системами Windows, классической Mac OS/macOS и Unix, чтобы приложения могли получать доступ к файлам на локальных файловых системах этих типов, не зная, с какой файловой системой они работают. VFS определяет интерфейс (или «контракт») между ядром и конкретной файловой системой. Благодаря этому легко добавить поддержку новых типов файловых систем в ядро, просто реализовав этот контракт. Условия контракта могут изменяться несовместимым образом от версии к версии, что потребует перекомпиляции, а возможно, и модификации поддержки конкретной файловой системы для работы с новой версией операционной системы. Либо поставщик операционной системы может вносить в контракт только изменения, обеспечивающие обратную совместимость, чтобы поддержка конкретной файловой системы, разработанная для определенной версии операционной системы, работала и с будущими версиями.
A virtual file system (VFS) or virtual filesystem switch is an abstract layer on top of a more concrete file system. The purpose of a VFS is to allow client applications to access different types of concrete file systems in a uniform way. A VFS can, for example, be used to access local and network storage devices transparently without the client application noticing the difference. It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing. A VFS specifies an interface (or a "contract") between the kernel and a concrete file system. Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract. The terms of the contract might change incompatibly from release to release, which would require that concrete file system support be recompiled, and possibly modified before recompilation, to allow it to work with a new release of the operating system; or the supplier of the operating system might make only backward compatible changes to the contract, so that concrete file system support built for a given release of the operating system would work with future versions of the operating system.
Реализация
Один из первых механизмов виртуальной файловой системы в Unix-подобных системах был представлен Sun Microsystems в SunOS 2.0 в 1985 году. Он позволял Unix-системным вызовам прозрачно обращаться к локальным файловым системам UFS и удаленным файловым системам NFS. По этой причине поставщики Unix, лицензировавшие код NFS у Sun, часто копировали конструкцию VFS от Sun. К нему можно было подключать и другие файловые системы: в Sun была разработана реализация файловой системы MS DOS FAT, которая подключалась к SunOS VFS, хотя она не поставлялась как продукт до SunOS 4.1. Реализация SunOS стала основой механизма VFS в System V Release 4. Джон Хайдеманн разработал многоуровневую VFS под SunOS 4.0 для экспериментальной файловой системы Ficus. Эта конструкция обеспечивала повторное использование кода между типами файловых систем с различной, но схожей семантикой (например, шифрующая файловая система могла повторно использовать весь код управления именами и хранением нешифрующей файловой системы). Хайдеманн адаптировал эту работу для использования в 4.4BSD в рамках своего диссертационного исследования; потомки этого кода лежат в основе реализации файловых систем в современных производных BSD, включая macOS. Другие виртуальные файловые системы Unix включают File System Switch в System V Release 3, Generic File System в Ultrix и VFS в Linux. В OS/2 и Microsoft Windows механизм виртуальной файловой системы называется Installable File System. Механизм Filesystem in Userspace (FUSE) позволяет подключать пользовательский код к механизму виртуальной файловой системы в Linux, NetBSD, FreeBSD, OpenSolaris и macOS. В Microsoft Windows виртуальные файловые системы также могут быть реализованы через расширения пространства имен Shell в пользовательском режиме; однако они не поддерживают низкоуровневые программные интерфейсы приложений для доступа к файловым системам в Windows, поэтому не все приложения смогут получить доступ к файловым системам, реализованным как расширения пространства имен. KIO и GVfs/GIO предоставляют аналогичные механизмы в средах рабочего стола KDE и GNOME (соответственно), с аналогичными ограничениями, хотя их можно настроить на использование методов FUSE и, следовательно, обеспечить плавную интеграцию в систему.
Виртуальные файловые системы с одним файлом
Иногда под виртуальной файловой системой понимают файл или группу файлов (не обязательно находящихся внутри конкретной файловой системы), которые выступают в роли управляемого контейнера, призванного предоставлять функциональность полноценной файловой системы посредством программного обеспечения. Примерами таких контейнеров служат CBFS Storage или виртуальная файловая система, реализованная в виде одного файла в эмуляторах, таких как PCTask или WinUAE, Oracle VirtualBox, Microsoft Virtual PC, VMware. Главное преимущество этого типа файловой системы – её централизованность и простота удаления. Виртуальная файловая система, реализованная в виде одного файла, может включать в себя все основные функции, ожидаемые от любой файловой системы (виртуальной или физической), однако доступ к её внутренней структуре часто ограничен программами, специально разработанными для работы с этой файловой системой (в отличие от реализации через драйвер, обеспечивающий универсальный доступ). Еще одним существенным недостатком является относительно низкая производительность по сравнению с другими виртуальными файловыми системами. Низкая производительность в основном обусловлена затратами на перемещение виртуальных файлов при записи или удалении данных из виртуальной файловой системы.
Внедрение виртуальных файловых систем с одним файлом
Прямые примеры однофайловых виртуальных файловых систем включают эмуляторы, такие как PCTask и WinUAE, которые заключают в себе не только данные файловой системы, но и эмулированную структуру диска. Это позволяет легко рассматривать установку операционной системы как обычную программу — переносить её на съемных носителях или по сети.
PCTask
Эмулятор Amiga PCTask эмулировал компьютер на базе Intel PC 8088 с тактовой частотой 4,77 МГц (а позднее – 80486SX с тактовой частотой 25 МГц). Пользователи PCTask могли создавать файл большого размера в файловой системе Amiga, который затем эмулятор воспринимал как реальный жесткий диск ПК. Этот файл можно было отформатировать в файловую систему FAT16 для хранения обычных файлов MS DOS или Windows.
WinUAE
ОАЭ для Windows, WinUAE, позволяет рассматривать большие отдельные файлы в Windows как файловые системы Amiga. В WinUAE такой файл называется hardfile. ОАЭ также может использовать каталог на хост-файловой системе (Windows, Linux, macOS, AmigaOS) в качестве файловой системы Amiga.