Fast File System


Операционная система FreeBSD в качестве основной использует файловую систему Fast File System (FFS), которая является прямой наследницей файловой системы, распространявшейся в составе BSD 4.4. Один из авторов исходной файловой системы продолжает развивать эту файловую систему FreeBSD, добавив немало интересных функциональных возможностей за последние годы. Иногда FFS называют UFS (UNIX File System). Многие системные утилиты по-прежнему называют разделы FFS разделами UFS. FreeBSD — не единственная операционная система, где продолжает использоваться файловая система 4.4 BSD или производные от нее. Если производитель UNIX не заявляет явно о своей «улучшенной и усовершенствованной» файловой системе, то почти наверняка он использует FFS.

При разработке FFS предполагалось создать быструю и надежную файловую систему, которой по силам эффективно справляться с обычными (и необычными) ситуациями. FreeBSD поставляется с FFS, которая сконфигурирована в расчете на извлечение максимальной пользы из современных аппаратных средств, однако FFS можно оптимизировать для обслуживания триллионов маленьких файлов или полудюжины файлов размером 30 Гбайт. Знать детали внутренней организации FFS необязательно, но такие основные понятия, как блоки, фрагменты и индексные дескрипторы (inodes) знать необходимо.

Блоки — это сегменты диска, содержащие информацию. По умолчанию в системе FreeBSD блок имеет размер 16 Кбайт. Не все файлы имеют размеры, кратные 16 Кбайт, поэтому в файловой системе FFS для хранения остаточных кусков файлов используются фрагменты. Стандартный размер фрагмента составляет одну восьмую блока, или 2 Кбайт. Например, файл размером 20 Кбайт заполнит один блок и два фрагмента. Индексные дескрипторы — это специальные блоки, которые содержат базовую информацию о файлах, включая права доступа, размер и список блоков, занятых файлом. Данные, хранящиеся в индексных дескрипторах, называются метаданными. Это данные о данных (metadata). Такой способ хранения данных не уникален для FFS — другие файловые системы, такие как NTFS, также используют блоки для хранения данных и индексные дескрипторы. Однако в каждой файловой системе используется свой, уникальный принцип индексации.

Любая файловая система имеет определенное число индексных дескрипторов, число которых пропорционально размеру файловой системы. Современные диски могут иметь сотни тысяч индексных дескрипторов на каждом разделе, что необходимо для обеспечения возможности хранения сотен тысяч файлов. Если у вас имеется огромное число очень маленьких файлов, возможно, вам потребуется перестроить свою файловую систему, чтобы добавить в нее дополнительные индексные дескрипторы. Увидеть количество свободных индексных дескрипторов, доступных в файловой системе, можно с помощью команды du -i. Если вам действительно необходимо перестроить файловую систему, чтобы увеличить число индексных дескрипторов, обращайтесь к главе 18.

Виртуальные индексные дескрипторы

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

Такая абстракция была реализована в виде виртуальных индексных дескрипторов (virtual nodes), или vnodes. Виртуальными дескрипторами никогда не манипулируют напрямую, однако ссылки на них есть в документации системы. Виртуальный дескриптор играет роль переводчика информации, передаваемой между ядром и той или иной файловой системой. Каждый инструмент, который обращается к диску для чтения или записи данных, действует через виртуальные дескрипторы, которые устанавливают соответствие между данными и файловой системой на физическом носителе. Если файл записывается в файловой системе FFS, виртуальный дескриптор обращается к индексному, а если файл записывается в системе FAT32, виртуальный дескриптор обращается к таблице размещения файлов FAT32. Ссылки на индексные дескрипторы (inodes) можно встретить только в связи с файловыми системами FFS, а виртуальные дескрипторы (vnodes) применяются в работе с любой файловой системой.

Типы монтирования FFS

В отличие от файловых систем Windows, разделы FFS можно интерпретировать по-разному в зависимости от варианта монтирования. Способ монтирования раздела называется типом монтирования (mount type). Для монтирования файловой системы вручную надо указать параметры монтирования в командной строке, но при монтировании файловой системы, перечисленной в файле /etc/fstab, достаточно указать точку ее монтирования, при этом параметры монтирования должны быть указаны в поле Options.

Чтобы указать параметры монтирования в командной строке, команде mount следует передать ключ -o mounttype или определить параметры в файле /etc/fstab, в поле Options.

Монтирование в режиме «только для чтения»

Если надо только просматривать содержимое диска и нет необходимости записывать данные, можно монтировать раздел «только для чтения». Бесспорно, это самый безопасный способ монтирования диска. В то же время это один из бессмысленных способов для большинства серверных приложений, поскольку невозможно изменять данные или записывать новые.

Многие системные администраторы монтируют «только для чтения» корневой раздел (root), и возможно, даже /usr, чтобы минимизировать ущерб в результате выключения электропитания или ошибок в программном обеспечении. Даже если вы «потеряете» физический жесткий диск при всплеске напряжения либо из-за других неполадок в оборудовании, данные на пластинах останутся невредимы. В этом заключается преимущество монтирования в режиме «только для чтения»; недостатком является сложность эксплуатации такой файловой системы из-за невозможности записи на диски, монтированные «только для чтения»!

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

Для монтирования файловой системы в режиме «только для чтения» следует использовать параметр монтирования rdonly или ro. Оба значения дают один и тот же эффект.

Синхронное монтирование

Синхронное (sync) монтирование — это старинный способ монтирования файловой системы. При записи на синхронно смонтированный диск ядро ждет завершения операции, чтобы сообщить программе о выполнении записи. Если запись не завершена, программа вправе предпринимать соответствующие действия.

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

Для монтирования файловой системы в синхронном режиме следует использовать параметр монтирования sync.

Асинхронное монтирование

В наше время асинхронный режим монтирования вытесняется такой функциональной возможностью, как soft updates, но вы по-прежнему можете услышать упоминания об этом режиме. Для ускорения доступа к данным, с более высоким риском их потери, монтируйте разделы асинхронно. Когда диск монтирован асинхронно, ядро записывает данные на диск и сообщает программе о том, что запись прошла успешно. При этом ядро не ждет от диска подтверждения того, что данные действительно записаны. Асинхронное монтирование — прекрасный выбор для второстепенных машин, однако оно не подходит для хранения важных данных. Разница в производительности между работой файловой системы, смонтированной в асинхронном режиме и в режиме noasync с использованием soft updates, очень невелика.

Для монтирования файловой системы в асинхронном режиме следует использовать параметр монтирования async.

Монтирование noasync

Наконец, рассмотрим комбинацию sync и async. Этот метод называется noasync и применяется во FreeBSD по умолчанию. При этом данные, имеющие отношение к индексным дескрипторам, записываются на диск синхронно, а фактические данные — асинхронно. В сочетании с soft updates (см. раздел «Soft Updates» далее в этой главе) режим noasync применяется для создания по-настоящему устойчивых систем.

Для монтирования файловой системы в режиме noasync никаких дополнительных параметров указывать не требуется.

Параметры монтирования FFS

В дополнение к типам монтирования система FreeBSD поддерживает несколько дополнительных параметров монтирования. Эти параметры оказывают влияние на поведение монтированных файловых систем.

noatime

В FFS у каждого файла есть «отпечаток» времени доступа, называемый atime, в котором отражается время последнего доступа к файлу. Если у вас большое количество файлов и нет необходимости в таких «отпечатках», можно монтировать диск с параметром noatime и не обновлять информацию о времени доступа. Это особенно удобно для работы с flash-накопителями или с дисками, которые испытывают серьезную нагрузку, например, с дисками, где хранятся буфера телеконференций Usenet.

noexec

Запрещает выполнение любых программ в этом разделе. В разделе /home, монтированном с параметром noexec, пользователи не смогут запускать свои программы, однако для полного предотвращения таких действий параметр noexec следует применять при монтировании /tmp, /var/tmp и других разделов, в которые пользователи могут записывать свои файлы. Обратите при этом внимание, что данный параметр не предотвращает возможность запуска пользователями сценариев командного интерпретатора, которые представляют собой простой набор инструкций программы. Кроме того, параметр noexec иногда используется в случаях, когда на сервере имеются исполняемые двоичные файлы для других операционных систем или других аппаратных архитектур, и вам необходимо предотвратить возможность запуска этих файлов на сервере.

nosuid

Предотвращает запуск setuid-программ на вашей системе, setuid-программы разрешают пользователям запускать программы от имени других пользователей. Например, некоторые программы, такие как login(1), требуют привилегий пользователя root, но должны запускаться обычными пользователями. Очевидно, setuid-программы должны разрабатываться особенно тщательно, чтобы предотвратить возможность их взлома и применения для неавторизованного доступа к системе. Вот почему многие администраторы обычно делают недоступными все ненужные setuid-программы. Для этого можно применить nosuid, однако это не принесет пользы при наличии сценариев-оберток, таких как suidperl, которые дают возможность обойти это ограничение.

nosymfollow

Запрещает применять символические ссылки на файлы, или псевдонимы. Символические ссылки в основном применяются для создания псевдонимов файлов, расположенных в других разделах. Для создания псевдонима файла в том же самом разделе лучше использовать обычные ссылки. Более подробную информацию о ссылках можно получить в странице руководства ln(1).

Для создания псевдонимов каталогов всегда используются символические ссылки, так как для этих целей жесткие ссылки (hard links) использовать нельзя.

Soft Updates и функция журналирования в FFS

Soft Updates — это технология организации и упорядочения операций записи на диск, при использовании которой метаданные файловой системы на диске остаются непротиворечивыми, производительность близка к производительности при асинхронном монтировании, а надежность соответствует надежности синхронного монтирования. Это не означает, что на диск будут записаны все данные — неполадки с электропитанием по-прежнему могут повредить данные. Однако Soft Updates предотвращают значительную часть трудностей. В случае отказа операционной системы, функция soft updates может продолжить работу со своей файловой системой и выполнить ее проверку. На мой взгляд, функция soft updates больше подходит для использования с разделами, чей объем не превышает 80 Гбайт.

Начиная с версии FreeBSD 7.0, файловая система FFS обзавелась поддержкой журналирования. Журналируемая файловая система записывает все изменения, производимые в файловой системе, на отдельный раздел диска, поэтому в случае неожиданного завершения работы системы измененные данные могут быть восстановлены автоматически во время загрузки. Благодаря этому отпадает необходимость запускать утилиту fsck(8). Любая журналируемая файловая система использует порядка 1 Гбайт для хранения журнала, что делает ее слишком расточительной для применения на небольших файловых системах. Однако принцип ведения журнала в системе FreeBSD отличается от аналогичных принципов, принятых в других журналируемых файловых системах, тем, что ведение журнала поддерживается на уровне диска, ниже уровня самой файловой системы. Такой способ ведения журнала является новинкой в FreeBSD и по-прежнему находится на экспериментальной стадии.

Например, к моменту написания этих строк, в моем распоряжении имеется компьютер регистрации. Большая часть дисковых разделов на нем имеет размер менее 10 Гбайт, но раздел /var занимает почти два терабайта. Для раздела /var я использую функцию журналирования, а для других — soft updates. По сравнению с запуском fsck в фоновом режиме восстановление данных в журналируемой системе после неожиданного падения напряжения выполняется быстро и безболезненно.

Подробнее о журналировании и функции gjournal мы поговорим в главе 18.

Кэширование записи

Файловая система FFS лучше всего работает на жестких дисках SCSI и SAS в силу устойчивости архитектуры SCSI. He менее замечательно FFS работает на жестких дисках архитектуры АТА, за одним важным исключением: многие современные диски IDE поддерживают кэширование записи.

Диски IDE, поддерживающие кэширование записи, имеют встроенную микросхему, которая запоминает данные, предназначенные для записи на диск. Такой механизм может не подойти для функции Soft Updates, поскольку Soft Updates уповают на «честность» жесткого диска — когда тот сообщает о записи данных на диск, механизм Soft Updates предполагает, что данные находятся на пластине. Однако на самом деле механизм кэширования записи IDE сообщает о благополучном сохранении данных в дисковом кэше, а не о том, что данные записаны на диск. Фактическая запись данных на диск может произойти спустя секунду или более.

Этот разрыв во времени не опасен при единичных случаях его возникновения, однако на сервере это происходит постоянно. Поэтому, если вы беспокоитесь о своих данных, отключите кэширование записи, добавив в /boot/loader.conf следующую строку:

hw.ata.wc=0

Отключение кэширования записи замедлит работу диска IDE, однако ваши данные будут в безопасности. Я благополучно применяю кэширование записи на настольном компьютере и ноутбуке, где данные не записываются на диск постоянно, однако на сервере ни в коем случае нельзя оставлять кэширование записи включенным. Вы можете сообщить своему руководству, что диски АТА не обеспечивают необходимой для сервера производительности, и вам требуется дополнительное аппаратное обеспечение или сказать, что из-за перегрузки аппаратных средств происходят потери данных. Лично я предпочитаю первый вариант.

Мгновенные снимки файловой системы

Файловая система FFS с активированной функцией Soft Updates может создавать мгновенные образы диска, или снимки (snapshot), в конкретные моменты времени. Эти снимки можно найти в каталоге .snapshot, который располагается в корневом каталоге каждого раздела.

Хотя вы можете не производить администрирование этих снимков, они используются различными инструментальными средствами во время работы. Например, dump(8) выполняет архивирование снимков, а не работающей файловой системы, благодаря чему обеспечивается внутренняя непротиворечивость резервных копий. Утилита fsck, работающая в фоновом режиме (о чем будет говориться ниже, в этой же главе), также использует снимки в своей работе. Снимки можно монтировать и получать отображение файловой системы в конкретный момент времени. Хотя это достаточно интересная информация, но большинство системных администраторов считают снимки не слишком полезными. Тем не менее при работе с FreeBSD вы частенько будете встречать упоминания о снимках.

Комментарии запрещены.