Введение

Абстрактный слой над более конкретной файловой системой. Виртуальная файловая система (VFS) или виртуальный переключатель файловой системы — это абстрактный слой над более конкретной файловой системой. Цель VFS — предоставить клиентским приложениям единый способ доступа к различным типам конкретных файловых систем. Например, VFS может использоваться для прозрачного доступа к локальным и сетевым устройствам хранения, не требуя от клиентского приложения осознания различий. VFS позволяет преодолеть различия между файловыми системами Windows, классической Mac OS/macOS и Unix, чтобы приложения могли получать доступ к файлам на локальных файловых системах этих типов, не зная, с какой файловой системой они работают. VFS определяет интерфейс (или «контракт») между ядром и конкретной файловой системой. Благодаря этому легко добавить поддержку новых типов файловых систем в ядро, просто реализовав этот контракт. Условия контракта могут изменяться несовместимым образом от версии к версии, что потребует перекомпиляции, а возможно, и модификации поддержки конкретной файловой системы для работы с новой версией операционной системы. Либо поставщик операционной системы может вносить в контракт только изменения, обеспечивающие обратную совместимость, чтобы поддержка конкретной файловой системы, разработанная для определенной версии операционной системы, работала и с будущими версиями.

Реализация

Один из первых механизмов виртуальной файловой системы в 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.