Linux Kernel (Ядро линукса) (часть 3)


Структуры Ext2 на диске

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

Группы блоков уменьшают фрагментацию файлов, поскольку ядро стремится хранить блоки данных файла в одной группе блоков файловой системы, если это возможно. Каждый блок в группе содержит один из следующих элементов информации:
- копию суперблока файловой системы;
- копию дескрипторов групп блоков
- битовую карту блоков данных;
- битовую карту индексных дескрипторов;
- таблицу индексных дескрипторов;
- данные файлов, т. е. блоки данных.

Если блок не содержит осмысленную информацию, говорят, что он свободен.

суперблок и дескрипторы групп дублируются в каждой группе блоков. Только суперблок и дескрипторы групп, включенные в
группу блоков 0, используются ядром, а остальные суперблоки и дескрипторы остаются неизмененными. Более того, ядро их даже не просматривает. Когда программа e2fsck проверяет непротиворечивость состояния файловой системы, она читает суперблок и дескрипторы групп, хранящиеся в группе блоков 0, и копирует их во все другие группы блоков. Если произойдет порча данных, и главный суперблок или главные дескрипторы групп в группе блоков 0 станут некорректными, системный администратор может проинструктировать программу e2fsck, чтобы она читала старые копии суперблока и дескрипторов групп, хранящиеся в других группах блоков. Обычно эти избыточные копии содержат достаточно информации, чтобы позволить e2fsck привести раздел Ext2 в корректное состояние.

Сколько существует групп блоков? Это зависит как от размера раздела, так и от размера блока. Основное ограничение заключается в том, что битовая карта блоков, применяемая для идентификации свободных и занятых блоков внутри группы, должна храниться в одном блоке. Следовательно, в каждой группе блоков может быть максимум 8xb блоков, где b — размер блока в байтах. Тогда общее количество групп блоков примерно равно s/($xb), где s — размер раздела в блоках.

В качестве примера рассмотрим 32-гигабайтный раздел Ext2 с размером блока 4 Кбайт. В этом случае каждая битовая карта в 4 Кбайт описывает 32 Кбайт блоков данных, т. е. 128 Мбайт. Следовательно, необходимо 256 групп блоков. Ясно, что, чем меньше размер блока, тем больше групп блоков.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...