Основными объектами файловой системы являются файлы и каталоги. Каждый файл характеризуется узлом inode, который хранит в себе метаданные для управления объектами файловой системы (в том числе и возможные операции с ними).
Место файловой системы в Linux может отражено на рис.1. В пространстве пользователя происходит запуск процессов и приложений. Библиотека GNU C предоставляет интерфейс управления элементами файловой системы (например, процедуры открытия, чтения, записи). В результате системных вызовов происходит обращение к соответствующим элементам ядра.
Ядро должно поддерживать работу с различными файловыми системами, следовательно, необходим унифицированный интерфейс работы с файлами и каталогами. Такой интерфейс обеспечивает виртуальная файловая система. Она преобразует системные вызовы приложений в вызовы отдельных файловых систем. Для файлов и каталогов используются различные кэши, в которых хранятся списки inodes и записи каталогов dentries соответственно.
Буферный кэш буферизирует запросы между файловыми системами и блочными устройствами, которыми они могут управлять. Например, через буферный кэш проходят запросы на чтение и запись к драйверам устройств. Это позволяет кэшировать запросы для более быстрого доступа (вместо обращения к физическому устройству).
Рис. 3. Архитектура связей файловой системы
Файловые системы данного типа используют физическое пространство диска для хранения файлов. Примером может служить файловая система ext2fs , которая долгое время была основной для Linux.
Для обеспечения быстрого восстановления системы после сбоев (например, при отключении питания), используются журналируемые файловые системы. Для восстановления в обычных файловых системах приходится просматривать весь диск поблочно, что занимает длительное время.
В журналируемых файловых системах применяется техника транзакций, заимствованная из теории баз данных. Суть этой техники: некоторое действие не считается завершенным, если все изменения не были сохранены на диске. При этом все действия и изменяемые данные протоколируются. В протоколах сохраняются индексные дескрипторы изменяемых файлов, битовые карты свободных блоков и дескрипторов. В случае сбоя по этому протоколу можно вернуть файловую систему в безошибочное состояние. После завершения операции записи в протоколах удаляются.
Журналирование направленно на обеспечение целостности файловой системы, но ни в коем случае не гарантирует сохранность пользовательских данных как таковых.
Существуют различные стратегии журналирования:
1. Режим обратной записи. Журналированию подвергаются только метаданные, блоки с данными записываются непосредственно на диск. Структура файловой системы защищена, но повреждение самих данных возможно, если крах системы наступает после записи метаданных в журнал, но до записи блока с данными.
2. Режим упорядочивания. В журнал заносятся также только метаданные, но сами данные записываются до журналирования метаданных. Этим гарантируется согласованность данных файловой системы после восстановления.
3. Режим данных. В журнал заносятся как метаданные, так и сами данные. Этот режим обладает наивысшим уровнем устойчивости к повреждению и потере данных, но имеет недостаток в виде низкой производительности, поскольку все данные записываются дважды (сначала в журнал, потом на диск).
На сегодняшний день активно используется различные журналируемые файловые системы, каждая из которых имеет свои преимущества и недостатки.
В современных файловых системах обычно вместо блоков используется понятие экстента — нескольких непрерывных участков последовательно идущих блоков. Благодаря непрерывности, обеспечивается более быстрое чтение и запись, а более быстрая работа с метаданными, т.к. обращение идет к метаданным экстента, а не блока
Например, файл размером 100 Мб может храниться в одном экстенте такого же размера, а не в 25600 блоках. Производительность особенно повышается при работе с большими файлами.
Linux поддерживает различные файловые системы:
— ext2fs,ext3fs,ext3fs. «Расширенные файловые системы» (extended filesystem) — основныe файловые системы Linux. ext2fs долгое время являлась основной файловой системой Linux. ext3fs по своей сути является надстройкой к ext2fs, предоставляя ряд дополнительных возможностей. ext4fs можно назвать полноценной файловой системой, включающей в себя передовые технологии функционирования файловых систем.
— nfs. Сетевая файловая система, используемая для доступа к файлам на удаленных компьютерах;