Ну... это блог, что ещё ожидать от блога?

воскресенье, 6 июня 2010 г.

Файловая система Ext4 для Linux: часть 2

Эта заметка «Файловая система Ext4 для Linux: часть 2» продолжение первой части о жёстких дисках и файловой системе Ext4fs. Здесь я попытался собрать в одном месте информацию о терминах этой ФС и о том что они означают. В общем и целом, это довольно туманный вопрос, по прежнему есть много непонятного, а информация которая была рассмотрена по этому вопросу не полна и не даёт чёткого представления об внутреннем устройстве ФС. В общем, надеюсь что я ничего не упустил, и ещё больше что ничего не перепутал.

Базовые понятия

Раздел (Partition) - структура данных ОС, содержащая указатели, на множество физических блоков устройства хранения данных, обязательно являющихся смежными. Это похоже на определение Физического Экстента (Physical Extent, PE) в терминологии LVM. (Logical Volume Manager (LVM) — системы управления логическими томами (Logical Volume, LV), используемая в операционной системе Linux. LVM предоставляет гораздо более широкую функциональность, чем система разделов (partitions) OC *DOS.


Том (Volume) - это структура данных ОС, содержащая указатели на множество физических блоков устройства хранения данных могущих быть не смежными. В LVM же, доступное пространство для хранения данных, представлено физическими томами (Physical Volume, PV), и это могут быть жёсткие диски, разделы или любые другие блочные устройства.

Метаданные ФС типа ext3/2 это – суперблок, таблица дескрипторов групп блоков (Дескриптор — здесь и далее, это структура с данными.), дескрипторы групп блоков и журнал.


Суперблок (Superblock) - содержит наиболее общую и важную информацию о файловой системе. В суперблоке наличествуют (не исключительно) следующие данные:

1. Размер блока файловой системы

2. Число (логических) блоков на группу блоков; о группах блоков пока лишь отметим, что для удобства адресации блоки (смежные физические или номера блоков ФС?), в ФС логически объединяются в группы. Тогда абсолютное смещение блока на разделе становится относительным от его смещения в группе блоков.

3. Число айнодов (inodes) на группу блоков; индексный узел (айнод) — еще одна структура данных, информация в которой имеет критическое значение для функционирования системы.

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

5. Размер индексного дескриптора/узла (inode)

6. Общее число блоков и индексных дескрипторов (inodes) в файловой системе

Таблица дескрипторов групп блоков - в отделе, следующем сразу за суперблоком, содержится таблица дескрипторов групп блоков, представляющая собой массив указателей на структуры с данными, которые содержат (не исключительно) следующие поля описывающие группу блоков:


1. Указатель на битовую карту блоков - бинарный массив, записанный на устройстве хранения, содержащий битовую карту блоков этой группы. Битовая карта представляет собой последовательность нулей и единиц (1 — блок занят, 0 — блок свободен), причем каждый байт этой структуры записан справа налево (меньшие по порядковому номеру физические блоки содержатся по старшим адресам т. е. справа). Это часть дескриптора группы блоков — битовая карта блоков, необходима для хранения актуальной информации о занятых и свободных логических блоках, т. е. смежных физических блоков, представленных в ФС как блок файловой системы, например блок ФС может иметь общий размер 4096 байт, и при размере физического блока в 512 байт, всего в таком блоке ФС содержится 4096 / 512 = 8 физических блоков на устройстве. Так как ФС работает поверх разделов размер которых изначально ограничен, а размер блока ФС также фиксирован, общее количество блоков для раздела известно уже на на стадии формирования ФС.

2. Указатель на таблицу айнодов — в каждом дескрипторе групп блоков поддерживается своя таблица айнодов. Нумерация айнодов начинается с 1. Несколько номеров айнодов зарезервировано для специальных целей. Например, айнод номер 2 отведен для корневого каталога ("/").

5. Указатель на битовую карту айнодов. См. также битовая карта блоков

4. Число свободных блоков в группе блоков.

5. Число айнодов содержащих каталоги. Подробнее...

Айнод (i-node, inode) — i-node (айнодом или индексным дескриптором) называют структуру данных в традиционных файловых системах Unix, таких как UFS. Айнод хранит основную информацию о постоянных файлах, каталогах или других объектах файловой системы. У каждой такой структуры есть номер, и этот номер айнода заносится в таблицу айнодов в определенном месте устройства; по номеру же айнода ядро системы может считать содержимое айнода, включая указатели данных и прочее содержимое файла. Правильно не индексный дескриптор а файловый дескриптор. ФС семейства Ext не поддерживают (пока даже и ext4) динамическое выделение айнодов, т. е. их количество и следовательно количество файлов в ФС ограничено и если оно явно не указано, то оно вычисляется исходя из количества блоков в ФС и параметра байтов-на-айнод, утилиты создания ФС, которое также может быть переопределено. Динамическое создание айнодов это одна из пока планируемых но не реализованных возможностей в Ext4.

Точная причина использования «i» в узлах (нодах) неизвестна. В ответ на вопрос об этом один из пионеров Unix-систем Деннис Ритчи ответил:

Честно говоря, я мало об этом знаю. Это был всего лишь термин, который мы начали использовать. 'Индекс', как я полагаю, использовался из-за несколько необычной структуры файловой системы, хранившей информацию о доступе к файлам в плоском (двумерном) массиве на диске, а вся информация об иерархии каталогов хранилась отдельно. Таким образом, i-номер являлся индексом в этом массиве, i-node - выбранным элементом массива. (Приставка 'i-' использовалась в первой версии руководства; со временем дефис перестали употреблять).

Стандарты же POSIX, описывают поведение файловой системы в роли потомка традиционных файловых систем Unix. Так, айноды постоянных файлов должны иметь следующие атрибуты:

  • Длина файла в байтах.

  • ID устройства (это идентифицирует устройство, содержащее файл).

  • ID пользователя, являющегося владельцем файла.

  • ID группы файла.

  • Режим файла, определяющий какие пользователи могут считывать, записывать и запускать файл.

  • Timestamp указывает дату последнего изменения инода (ctime, change time), последней модификации содержимого файла (mtime, modification time), и последнего доступа (atime, access time).

  • Счетчик ссылок указывают количество жестких ссылок, указывающих на инод.

  • Указатели на блоки диска, хранящие содержимое файла. Подробнее...



Комментариев нет:

Отправить комментарий