Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1320 / 264 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 7:

Устройство и администрирование файловой системы UFS

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Элементы файловой системы

Файловая система каждого из разделов диска состоит из нескольких структурных элементов. Это суперблок, таблица индексных дескрипторов, блоки описания файлов, блоки, содержащие списки управления доступом к файлам (ACLaccess control lists), каталоги и собственно файлы.

Файловая система UFS содержит четыре основных компонента с управляющей информацией: загрузочный блок, суперблок, таблицу индексных дескрипторов (i-node table) и каталоги. Кроме этого, в Solaris (начиная с версии 2.52Фактически, впервые Sun Microsystems ввела поддержку ACL для файловой системы UFS в 1993 году в специальной версии SolarisTrusted Solaris, которая была сертифицирована на уровень безопасности B1., с 1995 года) в файловой системе хранятся списки управления доступом (ACL). Хранение списков ACL обеспечивают так называемые теневые индексные дескрипторы (shadow inodes).

В System V каждый раздел жесткого диска форматируется (размечается) для размещения на нем файловой системы UNIX, в BSD – один раздел жесткого диска разбивается на подразделы, каждый из которых форматируется. Мы называем "разделом UNIX" такой размеченный в формате файловой системы UNIX раздел или подраздел.

Загрузочный блок (boot block) – это, как правило, часть метки диска (disk label). В загрузочном блоке записана маленькая программа, которая при старте системы загружает ядро ОС с диска в оперативную память. Загрузочный блок располагается в первом секторе диска. Такой блок имеет смысл создавать только для первого раздела жесткого диска, однако место для него резервируется в каждом разделе.

Суперблок содержит общую информацию о файловой системе как совокупности файлов на данном разделе жесткого диска, в частности, размер раздела UNIX, число свободных и занятых блоков и индексных дескрипторов и флаг целостности файловой системы. Этот флаг устанавливается при успешном завершении работы с файловой системой, например, при корректной остановке операционной системы. В случае, если компьютер выключили рубильником, не дождавшись корректной остановки системы, при следующем старте системы программа fsck автоматически начнет проверку дисков и выдаст сообщение "clean flag is not set in superblock". Копии суперблока многократно записываются в нескольких блоках внутри каждого раздела для пущей надежности. В файловой системе UFS записывается по одной копии суперблока на каждую группу цилиндров. Если выяснится, что оригинал суперблока в начале раздела поврежден, будет использована копия суперблока.

Таблица индексных дескрипторов (i-node table) содержит дескрипторы файлов. Дескриптор файла содержит сведения о типе файла, размещении файла на диске, правах доступа к нему, UID владельца файла, GID группы файла, время последнего доступа к файлу, время последней модификации файла, время последней модификации самого индексного дескриптора. Подробнее структура таблицы индексных дескрипторов рассмотрена в подраздел "таблица индексных дескрипторов: детали".

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

Размер таблицы индексных дескрипторов фиксирован и задается при создании файловой системы на разделе. Программе mkfs (и, соответственно, newfs ) можно явно указать требуемое количество байт данных, которые должны приходиться на один индексный дескриптор, что определит количество индексных дескрипторов на разделе. Например, если раздел состоит из 1000000 байт и число байт на дескриптор составляет 1000, то будет создано 1000 индексных дескрипторов.

Таблица индексных дескрипторов: детали

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

В файловых системах, которые основанны на FFS (ext2, ext3, UFS), диск разбит на группы цилиндров. В каждой группе цилиндров есть свои копия суперблока, битовая карта свободных блоков этой группы цилиндров и таблица индексных дескрипторов для файлов, расположенных на цилиндрах этой группы. Такая структура хороша тем, что, во-первых, ускоряется доступ к системным структурам данных, во-вторых, повышается устойчивость к сбоям диска. При повреждении только одного участка поверхности диска теряется только небольшая часть служебной информации о файлах и диске (такая информация в документации часто называется метаданнымиmetadata).

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

Каждому файлу соответствует индексный дескриптор. Он хранит информацию о различных атрибутах файла и его размещении на диске. В индексном дескрипторе записаны:

  • тип файла;
  • права доступа к файлу;
  • идентификатор владельца файла;
  • идентификатор группы файла;
  • время последней модификации файла;
  • время последнего доступа к файлу;
  • время последней модификации самого индексного дескриптора;
  • число повторных использований индексного дескриптора (т.е. случаев, когда файл был стерт и его индексный дескриптор был использован для хранения данных о другом файле);
  • длину файла в байтах (для файлов устройств это поле имеет смысл сочетания major и minor номера устройства, см. раздел "файлы устройств");
  • идентификатор файловой системы, в которой расположен файл;
  • количество связей файла;
  • число блоков файла (требуется для поддержки работы с файлами, которые содержат большие области, заполненные символами с кодом "ноль", т.е. пустое пространство; такие файлы называются holey files – файлы с пустотами);
  • номер теневого индексного дескриптора (если требуется);
  • структура из 15 номеров блоков, описывающая размещение файла на диске; каждый номер блока занимает 4 байта.

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

Если файл имеет размер более двенадцати блоков (т.е. его длина больше 12 x 8192 = 98304 байт), то предпоследние три номера обозначают не номера блоков данных, а номера косвенных блоков (indirect blocks), в которых хранятся указатели на следующие блоки данных и, возможно, на следующие косвенные блоки.

Первые двенадцать номеров блоков содержат просто номера блоков данных. Тринадцатый номер – это номер косвенного блока первого уровня. В блоке первого уровня содержится до 2048 адресов блоков данных (речь идет о 8192-байтных блоках).

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

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

Файл не может располагаться на разных разделах UNIX. Файл может быть фрагментирован, хотя файловая система построена так, чтобы свести фрагментацию к минимуму. Теоретически рекомендуется не заполнять файловую систему более, чем на 70%, чтобы не увеличивать фрагментацию при работе.

Максимальный размер файла может быть легко посчитан, так как мы знаем правила адресации блоков данных. Если размер блока равен 512 байт, то:

  • напрямую адресуемые из индексного дескриптора блоки в сумме дают размер 12 x 8192 байт = 98304 байт;
  • адресуемые через номер косвенного блока первого уровня – 2048 x 8192 байт = 16777216 байт;
  • адресуемые через номер косвенного блока второго уровня – 20482 x 8192 байт = 34359738368 байт;
  • адресуемые через номер косвенного блока третьего уровня – 20483 x 8192 байт = 70368744177664 байта.

Вместе получается примерно 64 Тбайта. Однако, Solaris 9, насколько об этом можно судить по доступным фактам, не поддерживал файлы размером более 1 Тбайта. Для файлов и файловых систем большого размера предпочтительнее использовать файловую систему ZFS, которая поддерживается в Solaris начиная с версии Solaris 10.

Все современные системы UNIX используют 128-байтный индексный дескриптор, который вмещает больше информации и номер блока в нем занимает не 3 байта (как в прошлом), а 4. Поэтому адресовать можно весьма большие разделы.

28 байт в таком дескрипторе отводится под разные расширения, включая место для 32-разрядных идентификаторов владельца и группы файла, а также под 64-разрядные поля времен модификации. Введение 64-разрядных полей времени в UNIX вместо прежних 32-разрядных, нужно для того, чтобы избежать "проблемы 2031 года", т.к. именно в этом году перестанет хватать 32 байт для представления времени в системах UNIX. Разработчики обоснованно полагают, что до тех пор все существующие системы UNIX будут переведены на 64-разрядную архитектуру.

Обычные индексные дескрипторы

Обычные индексные дескрипторы (i-nodes) используются повсюду во всех системах UNIX. В Solaris существует специальный тип индексных дескрипторов: теневые индексные дескрипторы. Они служат для хранения информации о расширенных правах доступа к файлам и каталогам.

Теневые индексные дескрипторы

Теневые индексные дескрипторы (shadow i-nodes) содержат информацию, позволяющую получать доступ к расширенным правам доступа (ACL) файла или каталога. Этот тип файловых дескрипторов существует в реализации файловой системы UFS в Solaris, начиная с версии 2.5.1. Solaris поддерживает теневые индексные дескрипторы для файловых систем UFS (Unix File System), NFS (Network File System версий 2 и 3), CacheFS (Cache File System). Информация о расширенных правах доступа в ZFS хранится иначе в силу более сложной структуры служебных данных ZFS. Расширенные права доступа могут быть назначены в отношении каталогов, обычных файлов, символических ссылок и именованных каналов (FIFO).

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

Расширенные права доступа хранятся в специальном файле, который создается в момент назначения таких прав. Теневой дескриптор указывает на этот специальный файл. В Solaris разрешено создавать не более 1024 записей в таком файле, следовательно, расширенные права доступа могут содержать не более 1024 специфических определений прав. Этого с избытком хватает для установки каких угодно специфических прав доступа. Каждая запись ACL занимает 12 байт, поэтому обычно эти записи не требуют много места на диске. Однако, при назначении специфических прав доступа большому числу объектов в файловой системе следует помнить о том, что для этого требуется дополнительный объем дисковой памяти.

Для назначения и просмотра расширенных прав доступа используются команды setfacl и getfacl, о которых более подробно рассказывается в "Файловая система" .

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.