Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 5:

Файловая система: идеология и структура

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

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

Термин " файловая система " в литературе используется для обозначения трех разных понятий:

  • Во-первых, файловая система - это набор правил и конструкций, описывающих то, как сохраняются файлы на диске. В этом смысле мы употребляем, например, выражение "файловая система FAT32", и "файловая система" здесь тождественна понятию "тип файловой системы".
  • Во-вторых, файловая система - это совокупность всех файлов, хранимых в компьютере.
  • В-третьих (и это значение термина характерно именно для UNIX-систем) файловая система - это совокупность всех файлов на разделе диска или устройстве.

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

Файловая система UFS содержит четыре основных компонента с управляющей информацией: загрузочный блок, суперблок, таблицу индексных дескрипторов (i-node table) и каталоги. Кроме того, в Solaris (начиная с версии 2.5, с 1995 года2Фактически, впервые Sun Microsystems ввела поддержку ACL для файловой системы UFS в 1993 году в специальной версии Solaris - Trusted Solaris, которая была сертифицирована на уровень безопасности B1. ) в файловой системе хранятся списки управления доступом (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 индексных дескрипторов.