Статьи

О классификации файловых систем

О классификации файловых систем

Развитие современных ИТ-технологий требует все большего сужения специализации профессионалов. Если раньше один и тот же сотрудник «Отдела АСУ» выполнял самые разные функции: от написания программы управления предприятием до мелкого ремонта электронной техники, то сейчас вопросами работы одного сервера могут заниматься абсолютно разные специалисты: по аппаратному обеспечению, по локальным операционным и файловым системам, по организации сетевого доступа, по созданию объединенных вычислительных систем и так далее.

В большинстве случаев не возникает особенных проблем при взаимодействии людей с разной специализацией, но, если один и тот же термин обозначает несколько разные значения в различных областях знания, вот здесь можно ждать беды. Примерно так обстоит дело с понятием «файловая система». Дело в том, что файловые системы бывают локальные, совместного доступа, сетевые, распределенные и специальные.

Вот такой пример:

  • > Инженер техподдержки подключился к серверу и создал на свободном диске или дисковом массиве файловую систему, например NTFS . Проверил возможность чтения-записи файлов, убедился, что все прекрасно работает.
  • > После этого системный администратор предоставил общий доступ по сети к вновь созданному ресурсу по сети на базе файловой системы CIFS (SMB) [1].
  • > А после этого системный архитектор предложил ввести данный сервер в общее пространство хранения файлов на базе файловой системы DFS [2].
    О классификации файловых систем
    О классификации файловых систем

    Как видим, имеет место ситуация, когда для описания различных структур принято использовать один и тот же термин.

    Так что же такое файловая система?

  • Один остроумный человек в свое время дал такое определение: «Файловая система – это место, где программы встречаются со своими данными». Несмотря на некоторую оригинальность, это, по сути, точное описание. Современная файловая система обычно включает в себя: > пространство имен – методы именования объектов и организации их в виде единой иерархии; > API – набор системных вызовов для перемещения между объектами и управления ими; > модель безопасности – схема защиты, сокрытия и совместного использования объектов; > реализация – программный код, который связывает логические модели с дисковой подсистемой. Также стоит отметить, что применение практически любой файловой системы невозможно без специальных драйверов, которые либо заранее включены в ядро операционной системы, либо поставляются отдельно. Теперь, когда мы определились с тем, что понятие файловая система имеет скорее общее значение, можно приступать к вопросам классификации.
  • Блочный и файловый доступ

  • Для того чтобы более предметно говорить об особенностях различных файловых систем, для начала необходимо понять, каким образом мы намереваемся с ними работать, проще говоря, как будем осуществлять доступ к данным. На сегодняшний день различают два типа доступа: блочный и файловый. Блочный доступ, как следует из названия, организует обращение напрямую к блокам данных. В принципе для работы устройств с этим типом доступа можно обойтись вообще без файловой системы, работая с устройством хранения напрямую (так называемый RAW-формат). Еще один хороший пример блочного доступа: снятие образа с помощью программ Partclone или Partimage. Примечание. На самом деле при использовании RAWформата все равно выполняется начальная подготовка пространства для хранения информации, в частности, применяется специальный метод адресации и так далее. Просто в данном случае не используется какая-либо общеизвестная файловая система в ее классическом исполнении (см. предыдущий раздел). Говоря об устройствах блочного доступа, первое, что приходит на память, – жесткие диски. Но к этому же семейству относятся дисковые модули («дисковые полки»), подключаемые к отдельному RAID-контроллеру и/или HBA (хост-адаптер шины) с помощью внешних кабелей, а также дисковые хранилища SAN [3], например, обращение к которым организовано по протоколам Fibre Channel [4] или iSCSI [5]. Тем не менее все блочные устройства позволяют работать с целым хранилищем аналогично отдельному жесткому диску, например, выполнять команды форматирования, установку и запуск операционной системы, размещение раздела подкачки и так далее. Файловый доступ в отличие от блочного не позволяет оперировать напрямую с данными на диске. Вместо этого клиентам предлагается обращаться к услугам специализированной файловой системы, отправляя запросы на доступ и получая в ответ файлы. Наиболее яркий пример работы такой системы – файловый сервер, с которого все участники сети копируют необходимые файлы.
  • Классификация файловых систем

  • Теперь перейдем к классификации файловых систем. Локальные дисковые файловые системы Данный тип файловых систем служит для доступа к данным, расположенным на диске, принадлежащем данному компьютеру. Соответственно, в данном случае используется блочный тип доступа. Интересный нюанс – очень часто локальные файловые системы зависят от операционной системы, где они применяются. Например, ReFS [6] применяется только для семейства Windows, HFS+ – для MAC OS (X), Ext4FS – в основном на различных модификациях Linux и так далее. В то же время существует множество файловых систем, которые в силу своей популярности или качественного исполнения поддерживаются множеством «неродных» платформ, устройств и ОС. Хорошим примером может послужить FAT32. Примечание. Большинство читателей в курсе, что к UNIXподобным относятся такие примеры операционных систем, как Solaris, BSD, IBM AIX, HP-UX и Linux. Однако существует множество других примеров, которые также относятся к этой группе. Среди них такие известные «монстры», как MAC OS X, BeeOS и VMware ESX(i). В качестве примера файловых систем для UNIX-платформ – семейство UFS [7], ext4fs, XFS, ReiserFS, Btrfs [10] и ZFS. Среди non-UNIX дисковых файловых систем широко распространены разработки для платформы MS Windows. Это FAT12, FAT16, FAT32, NTFS, ReFS, ExtFAT. К локальным файловым системам можно отнести разработки для записи на компакт-диски: CDFS (ISO 9660) и UDFS, а также разрабатываемую IBM LTFS [11] для работы с ленточными накопителями как с обычным жестким диском и все файловые системы, предназначенные для работы с локальными системами хранения данных. Различные типы файлов. Говоря о локальных файловых системах, нельзя не упомянуть роль различных типов файлов для организации и поддержания работы. Выделяют следующие основные типы: > обычные файлы – служат для хранения информации и программного (исполняемого) кода для различных модулей и приложений. Все текстовые файлы, картинки, базы данных, программы и даже ядро системы в итоге хранятся в определенных файлах. > специальные файлы – используются для работы с различными устройствами. В данном случае файл используется для обозначения некоего объекта, в который можно организовать ввод-вывод, применяя простые функции записи или чтения. Команды исполняются сначала программным кодом файловой системы и далее операционной системой, преобразуются в инструкции управления соответствующим аппаратным обеспечением. Как и устройства ввода-вывода, файлы устройств подразделяются для последовательного и блочного доступа.

файлы-каталоги – это специальный файл, содержащий системную информацию о группе других файлов, входящих в понятие «каталог» в представлении пользователя. Такой файл-каталог хранит не только перечень входящих в него файлов, но и специальные признаки (атрибуты). К сожалению, формат журнальной статьи не позволяет подробно описать все нюансы такой обширной области, разнообразные дисковые файловые системы. Читателям, заинтересовавшимся детальным изучением данного предмета, я могу порекомендовать прекрасные статьи моих коллег (см. раздел Источники). А мы пока что ограничимся вышеприведенным общим обзором и перейдем к рассмотрению дальнейшей классификации файловых систем. Сетевые файловые системы Сетевые файловые системы созданы, чтобы осуществлять доступ к файловому хранилищу на удаленном сервере так, будто это находится на локальном компьютере. После подключения (монтирования) можно напрямую работать с файлами удаленного компьютера. Смысл данной операции заключается не только в удаленном использовании, но и в возможности различных компьютеров получить непосредственный доступ к одним и тем же файлам без необходимости создания их копий. Достаточно иметь только один экземпляр файла, расположенный на удаленном компьютере, и к нему может обращаться любой клиент в сети. Тип доступа, реализуемый сетевыми файловыми системами, конечно же, файловый. Примечание. В некоторых случаях удается «обмануть» операционную систему, примонтировав сетевой ресурс по внешнему виду аналогично жесткому диску. Например, назначив сетевому каталогу букву диска в Windows или примонтировав в локальную папку, как в UNIX-подобных системах. Но нельзя, назначив букву диска или точку монтирования, сменить тип доступа. Все равно такое «устройство» останется реализующим файловый доступ. Убедиться в этом можно, тщетно попытавшись снять образ смонтированной сетевой файловой системы программой копирования образа диска. Наиболее известной сетевой файловой системой в мире UNIX является NFS [12], в семействе Windows – CIFS. На самом деле правильнее будет говорить не о файловой системе как таблице размещения данных, а о некоем комплексном подходе, включающем в себя прикладной протокол, программный модуль (сервис), способ авторизации, средства разграничения прав доступа, и, конечно же, саму файловую систему. Таким образом, термин «сетевая файловая система» фактически связан с моделью доступа клиентсервер в виде двух сервисов, один из которых запрашивает доступ к данным, а второй его предоставляет. И вся эта надстройка базируется на операционной системе, которая, в свою очередь, использует локальную дисковую файловую систему (см. рис. 1). Cетевые файловые системы хорошо известны и уже прочно вошли в нашу жизнь, поэтому нет смысла приводить здесь подробное описание их внутреннего устройства и механизмов работы.

Файловые системы совместного доступа

Основная специализация этого класса файловых систем – работа в рамках кластера высокой доступности (HA) в режиме Active-Active [13]. Представим себе классическую схему работы HA-кластера, когда два или несколько серверов подключены к одному и тому же дисковому массиву и пытаются использовать традиционную локальную файловую систему, например, NTFS (см. рис. 2). Или другой прекрасный пример: монтирование одного и того же LUN различными серверами, например, по протоколу iSCSI. В обоих случаях вы обязательно столкнетесь с ситуацией, когда к одному и тому же участку потребуется доступ различных агентов чтения-записи. В этом случае произойдет конфликт, сопровождающийся различными печальными последствиями: от жесткого зависания серверов до разрушения файловой системы и потери данных. Другой интересный сбой – когда один сервер производит операцию записи, а другой при этом даже не подозревает о том, что на хранилище появились новые данные. Результатом таких несогласованных действий будут потеря части информации и нарушение целостности данных. Чтобы избежать подобных проблем, используют файловые системы совместного доступа. Работа осуществляется по следующему алгоритму: когда один участник начинает процедуру записи, например, пишет данные в файл, файловая система блокирует запись в данный файл для всех остальных. После окончания процедуры записи файл освобождается, и все участники получают уведомление о произведенных изменениях. Разумеется, на выполнение подобных процедур нужно определенное время. Поэтому при сравнении работы обычной локальной файловой системы и системы совместного доступа при равных условиях у локальной системы будут определенные преимущества в быстродействии. Однако если учесть, что подобные конструкции обычно применяются при создании мощных дорогостоящих систем уровня Enterprise и при этом используется усиленное аппаратное обеспечение: мощные серверы, высокопроизводительные дисковые массивы, то данная проблема частично или полностью снимается. Для совсем небольших систем в рамках малого бизнеса в плане быстродействия предпочтительнее использовать либо локальные системы хранения, либо сетевые файловые системы. Самым распространенным примером такой файловой системы является VMFS [14], использующаяся для работы с системами виртуализации bare-metal от VMware. Различные host-серверы виртуальной системы могут использовать одно и то же хранилище для размещения образов виртуальных машин, при этом при падении одного host-сервера те же самые виртуальные машины могут быть запущены на других серверах. При этом не происходит никаких конфликтов, и все участники виртуальной системы работают быстро и слаженно. В качестве дополнительных примеров можно вспомнить как файловую систему общего доступа OCFS (OCFS2) [15], разработанную компаний Oracle для UNUX-подобных операционных систем, так и более экзотические, например Melio FS [16], с которой работают компьютеры на платформе Windows.

Рисунок 1. Сетевая и локальная (дисковая) файловые системы Рисунок 2. Отказоустойчивый кластер на основе файловой системы совместного доступа

Распределенные файловые системы

Носители данных, связанные с этими файловыми системами, не обязательно должны быть расположены на одном узле сети – они могут быть распределены между многими компьютерами. Достигается это установкой на отдельные компьютеры (ноды) специального программного обеспечения, способного организовать отдельные узлы в общую систему хранения данных (см. рис. 3). При этом файлы, разнесенные по нескольким серверам, будут представлены клиенту, как если бы они находились на одном дисковом массиве. Пользователь может не знать, сколько в системе узлов хранения и где они расположены. Для обеспечения этого свойства служат пространство имен и репликация.

Пространство имен

– система объединения ресурсов хранения, находящихся на разных серверах, в одно или несколько логически структурированных адресных пространств. Каждое пространство имен отображается пользователям как отдельный ресурс. Такая организация повышает доступность системы хранения и обеспечивает удобное подключение клиентов к общим ресурсам, вместо перенаправления на отдельный сервер.