Рис. 4.1. Информация об основных каталогах файловой системы Linux
Следует также обратить внимание на размер большинства каталогов. Его минимальное значение – 4 Кб, что соответствует стандартному размеру одного логического блока. Поскольку каталог по существу является таблицей соответствия имен файлов и их индексных дескрипторов, подавляющее большинство каталогов вполне вмещаются в этот объем. Лишь три каталога в рассматриваемом примере имеют большие размеры: для каталога /lost+found (потерянные и найденные) зарезервировано 16 Кб – на тот случай, если при проверке файловой системы будет обнаружено большое количество испорченных файлов, каталог /sbin содержит большое количество утилит, а каталог /dev вмещает очень большое число специальных файлов. Каталог /proc, имеющий нулевой размер, является псевдокаталогом, он расположен в оперативной памяти и места на дисковом пространстве не занимает.
Следует обратить внимание на большое число жестких ссылок на каталоги. Так, у каталога /proc в приведенном примере 69 имен! С учетом того, что пользователям запрещено создание жестких ссылок на каталоги, это выглядит странно. Ответ можно найти, воспользовавшись командой ls –la /. Она отображает в двух верхних строках списка скрытую ссылку каталога на свое же имя, обозначаемую как «.», и ссылку на родительский каталог, обозначаемую как «..». Даже если в каталоге нет подкаталогов, эти две жесткие ссылки все равно будут существовать и отображаться. Шестьдесят девять имен у каталога /proc в рассмотренном примере – это ссылка каталога на себя, ссылка на родительский (корневой) каталог и 67 подкаталогов, каждый из которых ссылается на родительский каталог /proc. Более подробно структура файловых записей в каталоге будет рассмотрена ниже.
Блоки объединяются в группы блоков. Группы блоков в файловой системе и блоки внутри группы нумеруются последовательно, начиная с единицы (рис. 4.2). Первый блок на диске имеет номер 0 и принадлежит группе с номером 1. Полная группа содержит 32768 блоков. Последняя группа блоков может быть неполной. Начало каждой группы блоков имеет адрес, который может быть получен как (номер группы – 1)* (число блоков в группе).
Загрузчик ФС
Группа
блоков 1
Группа
блоков 2
…….
Группа
блоков N
Рис. 4.2. Группы блоков на логическом разделе Linux
Первые 1024 байта логического раздела Linux отведены на размещение загрузчика LILO или GRUB, и при размере блока в 1 Кб загрузчик занимает полный блок. Каждая группа блоков имеет одинаковое строение. Ее структура представлена на рис. 4.3.
Суперблок (дублируется)
Описатели групп блоков (дублируются)
Битовая карта блоков
Битовая карта индексных дескрипторов
Таблица индексных дескрипторов
Область блоков данных
Рис. 4.3. Структура группы блоков
Суперблок является начальной точкой файловой системы. Он имеет размер 1024 байта, но нужной информацией заполнен всего на четверть – остальная часть суперблока дополняется нулями. Что касается остатка логического блока при его размере в 4 кБ, то он может быть заполнен «мусором» или использоваться в качестве стеганографического контейнера. Наличие копий суперблока в некоторых группах объясняется чрезвычайной важностью этого элемента файловой системы. Дубликаты суперблока используются при восстановлении файловой системы после сбоев. Тем не менее некоторые системные утилиты (например, mount – утилита монтирования файловой системы) не умеют использовать резервные копии и при повреждении первого экземпляра суперблока сообщают об ошибке.
Информация, хранимая в суперблоке, используется для организации доступа к остальным данным на диске. В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится много иной важной информации. При запуске ОС суперблок копируется в оперативную память, и все изменения файловой системы записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы. В ходе лабораторных работ нетрудно будет убедиться в том, что измененные и даже удаленные файлы продолжают существовать на диске в своем прежнем виде еще длительное время. При выключении системы суперблок обязательно должен быть записан на диск. При внезапном выключении питающего напряжения в структуре файловой системы на диске возникнут несоответствия, что приведет к запуску программы fsck при очередной загрузке компьютера. Суперблок имеет структуру, изображенную в табл. 4.1.
Число индексных дескрипторов в каждой группе блоков
2Ch
Время последнего монтирования файловой системы (в секундах с полуночи 1 января 1970 года)
30h
Время последней записи в файловую систему
34h
Число монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле, файловая система при перезапуске проверяется, а счетчик обнуляется
36h
Предельное число монтирований файловой системы
38h
«Магическое число» (0xEF53), указывающее, что файловая система принадлежит к ex2fs или ext3fs
Окончание таблицы 4.1
Размер поля, байт
Смещение от
начала блока, байт
Назначение
3Ah
Флаги, указывающие текущее состояние файловой системы (1 – проверенная файловая система, 2 – ФС содержит ошибки, 4 – обнаружены зависшие узлы)
3Ch
Реагирование на сообщение об ошибках в суперблоке (1 – продолжение работы, 2 – перемонтирование в режиме для чтения, 3 – паника системы)
3Eh
Дополнительная версия
40h
Время последней проверки файловой системы
44h
Максимальный период времени между принудительными проверками файловой системы
48h
Указание на тип операционной системы, в которой создана файловая система
4Ch
Основная версия файловой системы
50h
UID пользователя, которому разрешено использовать зарезервированные блоки
52h
GID группы, которой разрешено использовать зарезервированные блоки
54h
Первый незарезервированный индексный дескриптор
58h
Размер индексного дескриптора (00 80h или 0100h)
5Ah
Группа блоков, в которую входит данный суперблок (для резервных копий)
5Ch
Флаги совместимых функций
60h
Флаги несовместимых функций
64h
Флаги совместимых функций только для чтения
68h
Идентификатор файловой системы
78h
Имя тома
88h
Путь последнего монтирования
C8h
Битовая карта использования алгоритма
CCh
Количество блоков, предварительно выделяемых файлам
CDh
Количество блоков, предварительно выделяемых каталогам
CEh
Не используется
D0h
Идентификатор журнала
E0h
Индексный дескриптор журнала
E4h
Журнальное устройство (в случае использования внешнего журнала)
E8h
Начало списка «зависших» индексных дескрипторов
ECh
Заполнение до 1024 байта
Содержание некоторых полей нуждается в разъяснении. Обычно для журнала транзакций в файловой системе ext3fs отводится один большой файл в пределах основного раздела. Но в целях защищенного резервирования на сервере может быть предусмотрен и внешний журнал.
Файл логически стирается при удалении его последнего имени (жесткой ссылки). Но если к этому времени файл будет открыт каким-нибудь процессом, то удаления не происходит, а его индексный дескриптор помещается в список «зависших» inode. При штатном завершении работы системы происходит освобождение открытых файлов, и те из них, которые объявлены удаленными, стираются. Автоматическая проверка файловой системы при загрузке выявляет файлы с неестественными характеристиками и сопровождается помещением их в каталог /lost+found. Поэтому после загрузки системы список «зависших» индексных дескрипторов в суперблоке должен быть пустым.
На рисунке 4.4 показано, как выглядит фрагмент суперблока при выводе информации с помощью команды блочного копирования ddс перенаправлением вывода в программу xxd, выводящую дамп памяти в шестнадцатеричном и символьном виде.