91
•mkfs — позволяет создать файловую систему на заданном разделе заданного блочного устройства;
•mknod — позволяет создавать узлы в ФС, которые именуют блочные и символьные устройства для доступа к ним ПО пользовательского режима;
•mount — позволяет монтировать (подключить) конкретную ФС к древовидной структуре файлов ядра ОС;
•umount — позволяет размонтировать (отключить) конкретную ФС от древовидной структуры файлов ядра ОС.
Следуя основной парадигме UNIX-систем: «Все есть файл», разработчики ОС создавали свои файловые системы, которые монтировались при загрузке ОС и использовались, в дальнейшем, как уникальные хранилища информации.
Фактически, задача загрузки первых реализаций ОС сводилась (см. рисунок 4.4):
•к использованию загрузочного блока для загрузки ядра и передачи ему информации о разделе конкретного блочного устройства;
•ядро ОС, проведя инициализацию внутренних параметров и внешних уст-
ройств ЭВМ, находила этот раздел и монтировала его как корневую файловую систему.
Хотя каждая ФС была оптимизирована под ядро конкретной ОС, подобный подход имел две существенные проблемы:
•правильное монтирование корневой ФС было возможным только после предварительной инсталляции ОС, посредством специального инсталлятора;
•перенос данных с других («не родных») ФС был крайне затруднительным.
Замечание
Многие корпорации такая ситуация вполне устраивала, но в 1985 году, компания Sun Microsystems для ОС SunOS предложила VFS — Virtual File System (File System Switch) -
Виртуальнаую Файловую Систему.
Для блочного устройства типа винчестер, минимальным физически читаемым объемом информации (данных) является сектор, который для современного оборудования ЭВМ равен 512 байт.
Понятие сектора связано физической организацией обмена данными в блочных устройствах. Файловые системы (ФС), которые стали создаваться для различных нужд ОС, стали использовать понятие блока.
Понятие блока связано с логической организацией обмена данными между ОС и блочными устройствами. Соответственно размер блока может быть равен одному сектору или кратен целому числу таких секторов.
С другой стороны, понятие блока стали вводить с целью преодоления ограничений, которые накладываются способом адресации разделов в таблице MBR и ПО BIOS,
92
которые ограничивали возможный объем используемых блочных устройств. Например, в ОС MS Windows для форматирования блочных устройств стало использоваться понятие кластер.
Кластер — это последовательный набор секторов винчестера, который на логическом уровне рассматривается как единица обмена данными между ОС и блочным устройством.
С третьей стороны, конструктивные особенности блочных устройств типа винчестера связаны с тем, что линейная скорость движения головки чтения/записи по внешним трекам диска выше, чем по внутренним. Соответственно, на внешних треках можно расположить больше секторов, чем на внутреннем, что позволяет более эффективно использовать поверхность диска, но делает непригодной систему адресации секторов: (CHS). Выход из данной ситуации был найден с помощью LBA, которая саму адресацию секторов перекладывает на контроллер винчестера, а для ОС предоставляется упорядоченная последовательность логических блоков.
Наконец, разработка новой структуры блочных устройств GPT снимает проблему логической адресации болших объемов устройств, расширив формат указателей адреса и стандартизировав размер LBA на уровне одного сектора (512 байт).
Другой круг проблем связан с ПО самой BIOS, рассмотренной нами в подразделах 2.2 и 2.3. Дело в том, что функции и прерывания BIOS могут работать только на уровне секторов и LBA, а также понимают структуру MBR. По этой причине, для загрузки ОС необходимо в разделе корневой файловой системы выделить область для ПО загрузчика, а в программный код первых 446 байт MBR прописать адрес загрузчика. Очевидно, что такой адрес должен указывать на фиксированное местоположение ПО загрузчика относительно начала раздела. Поэтому, практически все ФС включают в свою структуру некоторый блок загрузки, как это показано на рисунке 4.4. Как следствие, такой подход позволяет загружать только одну ОС с одного блочного устройства.
Альтернативный подход предполагает смещение начала первого раздела относительно сектора MBR. Такое смещение позволяет записать стразу же после сектора MBR ПО загрузчика, что и используется нами при установке ПО GRUB.
Замечание
Использование альтернативных загрузчиков делает не нужным использование загрузочных секторов разделов, но, в силу преемственности структур ФС, данные сектора остаются.
Очевидно, что структуры различных ФС могут сильно отличаться друг от друга. На рисунке 4.4 приведена обобщенная структура ФС, характерная для ОС UNIX. Далее, на примере двух ФС — FAT32 и ext2fs, мы рассморим их основные особенности, а затем проведем их сравнительный анализ.
93
FAT32 - файловая система компании Microsoft, разработанная в августе 1996 года. Она является преемницей файловых систем FAT8, FAT12 и FAT16, начало разработки которых положено Биллом Гейтсом и Марком МакДональдом, в 1976 - 1977 годах.
VFAT — расширение FAT, появившееся в MS Windows 95 и дающее возможность
использовать имена файлов длиной до 255 символов, в кодировке UTF-16LE.
Фактически, VFAT и используется во всех ОС, как универсальный хранитель информации.
FAT – File Allocation Table или Таблица размещения файлов.
32 – число бит, используемое для нумерации кластеров (блоков) раздела файловой системы (на самом деле используется 28 бит).
Кластер – это объем данных, которыми оперирует файловая система. Обычно, для 8 Гбайт раздела используется 4 КБайтные кластеры (8 секторов диска).
Один сектор диска – 512 байт.
Загрузочный сектор раздела содержит:
блок параметров диска (BPB), в котором содержится информация о разделе: размер и количество секторов, размер кластера, метка тома и другие;
загрузочный код – программу, с которой начинается процесс загрузки операционной системы (для MS-DOS и MS Windows-9X – файл Io.sys).
На этапе логического форматирования каждого раздела (логического диска) создаются четыре логических области:
загрузочный сектор (boot sector);
таблица размещения файлов (FAT1 и FAT2); каталог; область данных.
Загрузочный сектор содержит в себе, кроме кода загрузчика, таблицу BPB и
двухбайтовую сигнатуру 55AA (0xAA55).
BPB — BIOS Parameter Block — таблица содержашая множество параметров, определяющих характеристики блочного устройства и самой файловой системы.
Замечание
Для нужд FAT32, таблица BPB была расширена и названа BF_BPB.
BF_BPB — Big FAT BIOS Parameter Block. Размер загрузочного сектора:
один физический сектор для FAT16; три физических сектора для FAT32.
94
Далее, в таблице 4.1, представлена структура первого сектора (boot sector) файловой системы FAT32.
Таблица 4.1 - Первый сектор раздела FAT32 |
|
|
|
|
|
||||
Смеще- |
Длина |
Обозначе- |
Содержание |
|
|
|
|
||
ние, байт |
поля, |
ние |
|
|
|
|
|
|
|
|
|
байт |
|
|
|
|
|
|
|
0х00 (0) |
3 |
JUMP 90 |
Безусловный переход на начало загрузчика |
||||||
0x03 |
(3) |
8 |
|
Системный |
идентификатор |
— |
начало |
||
|
|
|
|
BF_BPB |
|
|
|
|
|
0x0B (11) |
2 |
SectSize |
Размер сектора, байт (обычно 512) |
|
|||||
0x0D (13) |
1 |
ClastSize |
Число секторов в кластере |
|
|
||||
0x0E (14) |
2 |
ResSecs |
Число зарезервированных секторов, равно 32 |
||||||
0x10 |
(16) |
1 |
FATcnt |
Число копий FAT, обычно 2 |
|
|
|||
0x11 (17) |
2 |
RootSize |
Количество элементов в корневом каталоге |
||||||
0x13 |
(19) |
2 |
TotSect |
Общее число секторов. 0, если размер больше |
|||||
|
|
|
|
32 Мб |
|
|
|
|
|
0x15 |
(21) |
1 |
Media |
Дескриптор носителя |
|
|
|
||
0x16 |
(22) |
2 |
FATsize |
Количество секторов на элемент таблицы FAT |
|||||
0x18 |
(24) |
2 |
TrkSecs |
Число секторов на дорожке |
|
|
|||
0x1A (26) |
2 |
HeadCnt |
Число рабочих поверхностей (число головок) |
||||||
0x1C (28) |
4 |
HidnSecs |
Число |
скрытых |
секторов, |
|
которые |
||
|
|
|
|
расположены |
перед |
загрузочным |
сектором. |
||
|
|
|
|
Используются при загрузке для вычисления |
|||||
|
|
|
|
абсолютного смещения корневого каталога и |
|||||
|
|
|
|
данных |
|
|
|
|
|
0x20 |
(32) |
4 |
|
Число секторов на логическом диске |
|
||||
0x24 |
(36) |
4 |
|
Число секторов в таблице FAT |
|
|
|||
0x28 |
(37) |
2 |
|
Расширенные флаги |
|
|
|
||
0x2A (38) |
2 |
|
Версия файловой системы |
|
|
||||
0x2C (39) |
4 |
|
Номер кластера для первого кластера каталога. |
||||||
|
|
|
|
Обычно, значение этого поля равно 2. |
|||||
0x34 |
(43) |
2 |
|
Номер сектора с резервной копией |
|||||
|
|
|
|
загрузочного сектора |
|
|
|
||
0x36 |
(54) |
12 |
|
Зарезервировано FAT32 (расширение BF_BPB) |
|||||
0x40 |
(64) |
1 |
|
Физический номер устройства: |
|
|
|||
|
|
|
|
0х00 — флоппи диск; |
|
|
|
||
|
|
|
|
0х80 — жесткий диск. |
|
|
|
||
0x41 |
|
1 |
0 |
Зарезервировано для FAT32 |
|
|
|||
0x42 |
|
1 |
|
Сигнатура |
|
расширенного |
загрузочного |
||
|
|
|
|
сектора. |
|
|
|
|
|
0x43 |
|
4 |
|
Серийный номер тома. Случайное число, |
|||||
|
|
|
|
которое генерируется при фоматировании |
|||||
0x47 |
|
11 |
|
Метка тома |
|
|
|
|
|
0x52 |
|
8 |
|
Тип файловой системы (12-, 16-, 32-разрядная) |
|||||
|
|
95 |
0x5A (90) |
420 |
Начало кода системного загрузчика |
0x1FE |
2 |
Сигнатура (слово AA55) |
(510) |
|
|
Поскольку содержимое загрузочной записи имеет для ОС важное значение, то
обычно имеются резервные копии этой записи.
Резервная загрузочная запись, как правило, располагается в секторах 7-9 раздела.
Таблица размещения файлов (FAT) – это массив целых чисел с длинной, равной количеству кластеров раздела файловой системы.
Номер элемента этого массива – это номер кластера в разделе файловой системы. Отдельный элемент массива:
для FAT16 — это 2-х байтовые числа;
для FAT32 — это 4-х байтовые числа.
Значение элемента таблицы FAT — это ссылка на следующий номер элемента таблицы FAT. В таблице 4.2, представлены возможные значения таблицы FAT.
Таблица 4.2 - Значения элементов таблицы FAT32 (используется 28 бит)
Значение |
Описание |
0x00000000 |
Свободный кластер |
0x00000002 – 0x0FFFFFEF |
Номер следующего кластера в цепочке |
0x0FFFFFF0 – 0x0FFFFFF6 |
Зарезервированный кластер |
0x0FFFFFF7 |
Плохой кластер |
0x0FFFFFF8 – 0x0FFFFFFF |
Последний кластер в цепочке |
Замечание
В файловой системе FAT, между копиями загрузочной записи раздела и корневым каталогом, находятся две копии таблиц FAT.
При загрузке ОС таблица FAT загружается в оперативную память компьютера. Для больших файловых систем таблица FAT может загружаться частями.
За таблицами FAT располагается корневой каталог файловой системы (Root Directory), размером:
512 байт, для FAT16.
2048 байт, для FAT32, сейчас — до 65535 элементов записей по 32 байта.
Корневой каталог файловой системы – список записей по 32 байта.
Исторически, сложилась ситуация, что файловая система FAT содержит два типа имен:
короткие имена — до восьми байт имя и три байта расширение имени; длинные имена — до 255 символов в формате UTF-16LE.
Формат записи короткого имени файла вмещается в одну 32-байтовую запись. Структура этого формата представлена в таблице 4.3.
Одинадцатый байт записи содержит поле «Атрибуты», значения которого представлены в таблице 4.4.