Логическая файловая система - основные каталоги и их назначение Использование общепринятых имен основных файлов и структуры каталогов существенно облегчает работу в операционной системе, ее администрирование и повышает переносимость.
Автор:
Разместил: Amro   Дата: 2006-04-04 10:04
Комментарии: (0)   Рейтинг:

Основы операционной системы UNIX - 05. Структура и свойства файловых систем

Логическая файловая система - основные каталоги и их назначение

Использование общепринятых имен основных файлов и структуры каталогов существенно облегчает работу в операционной системе, ее администрирование и повышает переносимость. Типичная структура и назначение каталогов файловой системы UNIX представлена в табл. 13.

Таблица 13. Основные каталоги логической файловой системы UNIX

Каталог Назначение и содержание
/ Корневой каталог. Является основой любой файловой системы UNIX. Все остальные каталоги и файлы располагаются в рамках структуры, порожденной корневым каталогом (в нем и в его подкаталогах), независимо от их физического местонахождения. Для корневого каталога обязательно должна создаваться отдельная физическая файловая система, а сам он является точкой ее монтирования, о чем свидетельствует наличие подкаталога lost+found.
/bin Пользовательские выполняемые программы. Сейчас обычно является символической связью, указывающей на /usr/bin.
/dev Каталог для специальных файлов устройств. Может иметь подкаталоги для различных классов и типов устройств, например, dsk, rdsk, rmt, inet (в SVR4).
/etc Каталог для конфигурационных файлов. Может иметь подкаталоги для различных компонентов и служб. Конфигурационные файлы в UNIX - обычные текстовые.
/home Каталог для размещения начальных каталогов пользователей. Часто является точкой монтирования отдельной физической файловой системы.
/lib Каталог для библиотек. Сейчас обычно является символической связью, указывающей на /usr/lib.
/lost+found Подкаталог, имеющийся в каждом каталоге, являющемся точкой монтирования физической файловой системы на диске. Корневой каталог всегда представлен отдельной физической файловой системой, должен быть всегда доступен, и монтируется автоматически при запуске системы. Все остальные физические файловые системы формально не нужны для функционирования ОС UNIX.
/mnt Точка монтирования для файловых систем на съемных носителях или дополнительных дисках. Может содержать подкаталоги для отдельных типов носителей, например, cdrom или floppy. Может юыть пустым.
/opt Каталог для дополнительного коммерческого программного обеспечения. Может быть пустым или отсутствовать (в BSD-системах).
/proc Каталог псевдо-файловой системы, представляющей в виде каталогов и файлов информацию о ядре, памяти и процессах, работающих в системе.
/sbin Каталог для системных выполняемых программ, необходимых для решения задач системного администрирования.
/tmp Каталог для временных файлов. Имеет установленный клейкий бит и доступен для записи и чтения всем пользователям. Обычно создается в виде отдельной физической файловой системы, в том числе, в виртуальной памяти.
/usr В этом каталоге находятся выполняемые программы, библиотеки, заголовочные файлы, справочные руководства (/usr/share/man), исходные тексты ядра и утилит системы (Linux), растущие файлы и очереди печати (/usr/spool в BSD-системах) и т.д. Часто каталог является точкой монтирования отдельной физической файловой системы. Ниже представлены основные его подкаталоги.
/usr/bin Основные выполняемые программы и утилиты.
/usr/include Заголовочные файлы библиотек. Может содержать подкаталоги.
/usr/lib Статически и динамически компонуемые библиотеки. Может содержать подкаталоги.
/usr/local Каталог для дополнительного свободно распространяемого программного обеспечения (GNU). Содержит структуру подкаталогов, аналогичную корневому каталогу (bin, etc, include, lib и т.д.).
/var В UNIX System V и Linux этот каталог является заменителем каталога (/usr/spool), используемого для хранения растущих файлов различных сервисных подсистем, например, файлов журналов системы. Так, основной журнал системы, ведущийся демоном syslogd, размещается в виде нескольких файлов в подкаталоге /var/adm. Там же, в файле /var/adm/messages, сохраняются сообщения времени загрузки. Имеет смысл создавать отдельную физическую файловую систему для размещения этого каталога (и, возможно, его подкаталога /var/run).

Наличие, назначение и использование других каталогов верхнего уровня и подкаталогов зависит от версии ОС UNIX, установленного системного и прикладного программного обеспечения и конфигурации системы, созданной администратором.

Физические файловые системы UNIX - основные компоненты

Каждый жесткий диск состоит из одной или нескольких логических частей (групп цилиндров), называемых разделами (partitions). Расположение и размер раздела определяется при форматировании диска. В ОС UNIX разделы выступают в качестве независимых устройств, доступ к которым осуществляется как к различным носителям данных. Обычно в разделе может располагаться только одна физическая файловая система.

Имеется много типов физических файловых систем, например FAT16 и NTFS, с разной структурой. Более того, имеется множество типов физических файловых систем UNIX (ufs, s5fs, ext2, vxfs, jfs, ffs и т.д.). Ниже мы рассмотрим основные их общие особенности.

Физическая файловая система UNIX занимает раздел диска и состоит из таких основных компонентов:

  • Суперблок (superblock). Содержит общую информацию о файловой системе.
  • Массив индексных дескрипторов (ilist). Содержит метаданные всех файлов файловой системы. Индексный дескриптор (inode) содержит информацию о статусе файла и указывает на расположение данных этого файла. Ядро обращается к индексному дескриптору по индексу в массиве. Один дескриптор является корневым для физической файловой системы, через него обеспечивается доступ к структуре каталогов и файлов после монтирования файловой системы. Размер массива индексных дескрипторов является фиксированным и задается при создании физической файловой системы.
  • Блоки хранения данных. Данные обычных файлов и каталогов хранятся в блоках. Обработка файла осуществляется через индексный дескриптор, содержащий ссылки на блоки данных.

Суперблок

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

Суперблок содержит:

  • тип файловой системы;
  • размер файловой системы в логических блоках, включая сам суперблок, массив индексных дескрипторов и блоки хранения данных;
  • размер массива индексных дескрипторов;
  • количество свободных блоков;
  • количество свободных индексных дескрипторов;
  • флаги;
  • размер логического блока файловой системы (512, 1024, 2048, 4096, 8192).
  • список номеров свободных индексных дескрипторов;
  • список адресов свободных блоков.

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

Такой подход неприемлем в отношении свободных блоков хранения данных, поскольку по содержимому блока нельзя определить, свободен он или нет. Поэтому необходимо хранить список адресов свободных блоков целиком. Список адресов свободных блоков может занимать несколько блоков хранения данных, но суперблок содержит только один блок этого списка. Первый элемент этого блока указывает на блок, хранящий продолжение списка.

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

Индексные дескрипторы

Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е. метаданные файла. Каждый файл ассоциирован с одним индексным дескриптором, хотя может иметь несколько имен (жестких связей) в файловой системе, каждое из которых указывает на один и тот же индексный дескриптор.

Индексный дескриптор не содержит:

  • имени файла, которое содержится в блоках хранения данных каталога;
  • содержимого файла, которое размещено в блоках хранения данных.

Индексный дескриптор содержит:

  • номер;
  • тип файла;
  • права доступа к файлу;
  • количество связей (ссылок на файл в каталогах) файла;
  • идентификатор пользователя и группы-владельца;
  • размер файла в байтах;
  • время последнего доступа к файлу;
  • время последнего изменения файла;
  • время последнего изменения индексного дескриптора файла;
  • указатели на блоки данных файла (обычно 10);
  • указатели на косвенные блоки (обычно 3).

Размер индексного дескриптора обычно составляет 128 байтов.

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

Каждый дескриптор содержит 13 указателей. Первые 10 указателей непосредственно ссылаются на блоки данных файла. Если файл большего размера - 11-ый указатель ссылается на первый косвенный блок (indirection block) из 128 (256) ссылок на блоки данных. Если и этого недостаточно, 12-ый указатель ссылается на дважды косвенный блок, содержащий 128 (256) ссылок на косвенные блоки. Наконец последний, 13-ый указатель ссылается на трижды косвенный блок из 128 (256) ссылок на дважды косвенные блоки. Количество элементов в косвенном блоке зависит от его размера.

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

Синхронизация структуры файловой системы

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

Если произошло нештатное прекращение работы системы, структура суперблока и массива индексных дескрипторов на диске не соответствует структуре блоков данных и может быть несогласованной.

Отсутствие синхронизации между образом файловой системы в памяти и ее данными на диске (в случае аварийной остановки системы) может привести к появлению следующих ошибок в файловой системе:

  1. Один блок адресуется несколькими дескрипторами (принадлежит нескольким файлам).
  2. Блок помечен как свободный, но в тоже время занят (на него ссылается дескриптор).
  3. Блок помечен как занятый, но в то же время свободен (ни один дескриптор на него не ссылается).
  4. Неправильное количество ссылок в дескрипторе.
  5. Несовпадение между размером файла и суммарным размером адресуемых дескриптором блоков.
  6. Недопустимые адресуемые блоки (например, расположенные за пределами файловой системы).
  7. "Потерянные" файлы (правильные дескрипторы, на которые не ссылаються записи каталогов).
  8. Недопустимые номера дескрипторов в записях каталогов.

Часть этих проблем может быть устранена специальной утилитой, fsck (см. далее в разделе, посвященном управлению файловой системой). Но принципиальное решение проблемы согласованности и целостности данных в файловых системах UNIX возможно только при использовании журнализации - предварительной записи всех изменений дисковой структуры в отдельную область на диске.

Журнализируемые файловые системы

В журнализируемой файловой системе после того, как транзакция (изменение) записана, она может быть выполнена повторно, что предотвращает возникновение ошибок и несогласованностей в файловой системе и необходимость запуска программы fsck. Тем самым, уменьшается время перезагрузки в случае сбоя или некорректной остановки системы.

Журнал выделяется из свободных блоков файловой системы и, обычно, имеет размер порядка 1 Мбайта на каждый 1 Гбайт файловой системы. Журнал сбрасывается по мере заполнения, после синхронизации структуры файловой системы с диском.

Различные версии ОС UNIX поддерживают разные реализации журнализируемых файловых систем. Это, например, файловая система ufs (Solaris), vxfs (Solaris, UnixWare), RaisorFS и ext3 (Linux), jfs (AIX и Linux) и другие. Некоторые файловые системы позволяют включать и отключать журнализацию (ufs, ext2/ext3). Естественно, журнализация несколько замедляет работу файловой системы, но, в большинстве случаев, гарантирует целостность данных.