По предназначению файловые системы можно классифицировать на следующие категории:
1 Физические файловые системы (так называемых disk-based) расположены в основной памяти и остаются там после выключения компьютера
a. Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых системах применяется асинхронная запись изменений на диск. Для этого применяется либо журналирование, например в ext3, ReiserFS, JFS, NTFS, XFS, либо механизм soft_updates и др. Журналирование широко распространено в Linux, применяется в NTFS. Soft_updates - в BSD системах. Reiser4 не применяет журналирование, все операции в ней атомарны.
b. Для носителей с последовательным доступом (например, магнитные ленты): QIC, fifofs - эта новая файловая система использует механизм VFS для и др.
c. Для оптических носителей — CD и DVD: ISO9660, ISO9690, HFS, UDF и др.
2 Виртуальные файловые системы расположенs в виртуальной памяти и существуют только на время активности операционной системы. Такими являются: /proc - файловая система организации процессов,
/pipefs – для организации программных каналов, bfs - загрузочная файловая система, предназначенная для быстрой и простой загрузки и поэтому представляет собой очень простую плоскую файловую систему, состоящую из одного каталога;
3 Сетевые файловые системы: NFS, SMBFS, SSHFS, GmailFS и др.
Не во всех коммерческих реализациях поддерживаются все эти файловые системы, отдельные производители могут предоставлять только некоторые из них.
Кроме перечисленных, существуют специфические файловые системы, разработанные коммерческими фирмами.
Кроме родных систем, UNIX поддерживают файловые системы FAT NTFS.
VFS
Для поддержки различных файловых систем UNIX предоставляет специальный интерфейс уровня ядра, который называется VFS (Virtual Filesystem Switch). Виртуальная файловая система VFS, расположенная как бы между приложениями и конкретными файловыми системами, позволяет пользовательским приложениям получать доступ к множеству файловых систем разных типов.
Каждая отдельная смонтированная файловая система представляется структурой виртуальной файловой системы. Виртуальная файловая система может быть физической файловой системой, сетевой файловой системой или логической файловой.
Когда какой-либо процесс выдает системный вызов, связанный с работой файловой системы, ядро вызывает функцию, расположенную в VFS. Эта функция производит действия, не зависимые от структуры файловой системы, и перенаправляет вызов к функции этой файловой системы, которая выполняет операции, связанные с ее структурой. Код, реализующий операции с файловой системой, использует функции буфера для обращения к устройствам ввода/вывода.
Рисунок 2.6 – Архитектура виртуальной файловой системы
VFS содержит набор функций, которые должна поддерживать любая файловая система. Функции управляют тремя типами объектов: файловые системы, индексные дескрипторы и открытые файлы.
VFS содержит информацию о всех типах поддерживаемых файловых систем в специальной таблице, которая создается во время компиляции ядра.
VFS оперирует тремя структурами, связанными к файлам
1) vnode - (от virtual inode - виртуальный индексный дескриптор) - не зависящую от типа файловой системы. Vnode одинакова для всех файлов, независимо от типа реальной файловой системы и содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.
2) inode - зависящую от типа файловой системы, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Формат inode на уровне VFS не определен, а используется только ссылка на нее в структуре vnode.
3) дескриптор открытого файла. В то время как дескриптор inode содержит указатели к функциям, используемым по отношению к любому файлу (например, create или unlink), то дескриптор файлов содержит указатели к функциям, оперирующим только с открытыми файлами (например, read или write).
При необходимости копия inode создаётся в памяти. Если она была изменена, то содержимое дискового и "виртуального" inode синхронизируется. Старое содержимое inode на диске заменятеся теми данными, которые находятся в памяти. VFS склонна рассматривать копии inode в памяти как свои, а не как inode какой-либо другой системы.
Виртуальная файловая система VFS поддерживает следующие типы файлов: