Виртуальная файловая система ( VFS ) или виртуальный коммутатор файловой системы — это абстрактный слой поверх более конкретной файловой системы . Целью VFS является предоставление клиентским приложениям возможности доступа к различным типам конкретных файловых систем единообразно. Например, VFS может использоваться для прозрачного доступа к локальным и сетевым устройствам хранения данных, при этом клиентское приложение не будет замечать разницу. Его можно использовать для преодоления различий в файловых системах Windows , классических Mac OS / macOS и Unix , чтобы приложения могли получать доступ к файлам в локальных файловых системах этих типов, не зная, к какому типу файловой системы они обращаются.
VFS определяет интерфейс (или «контракт») между ядром и конкретной файловой системой. Поэтому легко добавить поддержку новых типов файловых систем в ядро, просто выполнив контракт. Условия контракта могут несовместимо меняться от выпуска к выпуску, что потребует перекомпиляции конкретной поддержки файловой системы и, возможно, изменения перед перекомпиляцией, чтобы она могла работать с новым выпуском операционной системы; или поставщик операционной системы может внести только обратно совместимые изменения в контракт, так что конкретная поддержка файловой системы, созданная для данного выпуска операционной системы, будет работать с будущими версиями операционной системы.
Один из первых механизмов виртуальной файловой системы в Unix-подобных системах был представлен Sun Microsystems в SunOS 2.0 в 1985 году. [2] Он позволял системным вызовам Unix прозрачно получать доступ к локальным файловым системам UFS и удаленным файловым системам NFS . По этой причине поставщики Unix, лицензировавшие код NFS у Sun, часто копировали дизайн VFS Sun. К нему также можно было подключать другие файловые системы: существовала реализация файловой системы MS-DOS FAT, разработанная в Sun, которая подключалась к 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 .
Механизм файловой системы в пользовательском пространстве (FUSE) позволяет пользовательскому коду подключаться к механизму виртуальной файловой системы в Linux, NetBSD , FreeBSD , OpenSolaris и macOS.
В Microsoft Windows виртуальные файловые системы также могут быть реализованы через пользовательские расширения пространства имен Shell ; однако они не поддерживают интерфейсы прикладного программирования доступа к файловой системе самого низкого уровня в Windows, поэтому не все приложения смогут получить доступ к файловым системам, реализованным как расширения пространства имен. KIO и GVfs / GIO предоставляют аналогичные механизмы в средах рабочего стола KDE и GNOME (соответственно) с аналогичными ограничениями, хотя их можно заставить использовать методы FUSE и, следовательно, плавно интегрировать в систему.
Иногда Virtual File System относится к файлу или группе файлов (не обязательно внутри конкретной файловой системы), которые действуют как управляемый контейнер, который должен обеспечивать функциональность конкретной файловой системы посредством использования программного обеспечения. Примерами таких контейнеров являются CBFS Storage или однофайловая виртуальная файловая система в эмуляторе, таком как PCTask или так называемый WinUAE , Oracle's VirtualBox , Microsoft's Virtual PC , VMware .
Основным преимуществом этого типа файловой системы является то, что она централизована и легко удаляется. Виртуальная файловая система с одним файлом может включать все основные функции, ожидаемые от любой файловой системы (виртуальной или иной), но доступ к внутренней структуре этих файловых систем часто ограничен программами, специально написанными для использования виртуальной файловой системы с одним файлом (вместо реализации через драйвер, обеспечивающий универсальный доступ). Другим серьезным недостатком является относительно низкая производительность по сравнению с другими виртуальными файловыми системами. Низкая производительность в основном обусловлена стоимостью перетасовки виртуальных файлов при записи или удалении данных из виртуальной файловой системы.
Прямыми примерами однофайловых виртуальных файловых систем являются эмуляторы, такие как PCTask и WinUAE, которые инкапсулируют не только данные файловой системы, но и эмулированную структуру диска. Это позволяет легко обрабатывать установку ОС как любую другую часть программного обеспечения — перенося ее с помощью сменных носителей или по сети.
Эмулятор Amiga PCTask эмулировал машину на базе Intel PC 8088 с тактовой частотой 4,77 МГц (а позже и 80486 SX с тактовой частотой 25 МГц). Пользователи PCTask могли создать файл большого размера в файловой системе Amiga, и к этому файлу можно было виртуально получить доступ из эмулятора, как если бы это был настоящий жесткий диск ПК. Файл можно было отформатировать в файловой системе FAT16 для хранения обычных файлов MS-DOS или Windows. [1] [2]
UAE для Windows , WinUAE , позволяет обрабатывать большие одиночные файлы в Windows как файловые системы Amiga. В WinUAE этот файл называется hardfile . [ 3 ]
UAE также может рассматривать каталог в файловой системе хоста ( Windows , Linux , macOS , AmigaOS ) как файловую систему Amiga. [4]