Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


Принципы построения и особенности файловых систем OC Linux.

Принципы построения и особенности файловых систем OC Linux.

 

Файловая система - обязательная часть любой операционной системы, от ее архитектуры, возможностей, надежности во многом зависит работоспособность операционной системы. Linux поддерживает несколько различных файловых систем. Знание принципов построения и структур файловой системы в "аварийных" ситуациях позволит восстановить работоспособность файловой системы или "прочитать" недоступный из-за дефекта файл.

Файловая система ext2fs все еще остается базовой файловой системой для многих клонов Linux. Концепции, которые она исповедует, во многом схожи с NTFS. Файловая система ext3fs фактически представляет собой аналог ext2fs, но с поддержкой протоколирования (в терминологии NTFS - транзакций). В отличие от ext2fs, она намного бережнее относится к массиву каталогов. Так, при удалении файла ссылка на inode уже не уничтожается, что упрощает автоматическое восстановление оригинальных имен (но в ext3fs, к сожалению, перед удалением файла список принадлежащих ему блоков тщательно вычищается - в результате этого восстановление становится практически невозможным). Сравнительно недавно появилась и следующая модернизированная версия этого семейства - файловая система ext4fs (ext2fs, ext3fs, ext4fs - это семейство обозначим в тексте extX). Преобразование файловых систем из одного типа в другой возможно без потери данных. Это бывает необходимо, когда в операционной системе отсутствуют средства обслуживания и восстановления ext3 и ext4 файловых систем. Для перевода типа файловой системы из ext2 в ext3 используется команда tune2fs -j /dev/sda1, где -j - опция создания журнала транзакций файловой системы, а /dev/sda1 - первый раздел на первом устройстве SCSI или SATA. Для понижения в ext2 используется команда tune2fs -O ^has_journal /devsda1.

 

Структура файловой системы extX.

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

Важную для нас информацию содержит 32-разрядное поле s_log_block_size, расположенное по смещению 18h байт от начала суперблока. Здесь хранится размер одного блока (block) выраженный в виде указателя позиции, на которую нужно сдвинуть число 200h (блок - в терминологии MS-DOS/Windows аналогичен понятию кластера). В естественных единицах это будет звучать так: block_size = 200h << s_log_block_size (байт). То есть если s_log_block_size равен нулю, размер одного блока составляет 400h байт или два стандартных сектора. Структура дискового тома, отформатированного под ext2fs, показана в листинге на рис. 1.

QIP Shot - Image: 2016-06-07 10:37:03 

Рис. 1. Структура дискового тома, размеченного под ext2fs (листинг).

 Вслед за суперблоком идут дескрипторы групп (group descriptors) и карты свободного пространства (block bitmap/inode bitmap), которые не имеют большого практического значения для наших целей. Зато таблица inode, расположенная за ними заслуживает более подробного рассмотрения. В extX (как и многих других файловых системах из семейства UNIX), так называемый индексный дескриптор (inode) играет ту же самую роль, что и файловая запись в NTFS. Здесь сосредоточена вся информация о файле: тип файла (обычный файл, каталог, символьная ссылка и т. д.), его логический и физический размер, схема размещения на диске, время создания, модификации, последнего доступа или удаления, права доступа, а также ссылки на файл. Формат представления inode описан в листинге на рис. 2.

QIP Shot - Image: 2016-06-07 10:37:48 

Рис. 2. Формат представления inode (листинг).

 Как уже было сказано, структура файловой системы на диске начинается с первого блока файловой системы - это блок начальной загрузки. Если носитель допускает начальную загрузку, то этот блок содержит короткую "программу-загрузчик". С помощью "программы-загрузчика" ядро ОС загружается в оперативную память и ему передается управление. Например, для некоторых компьютеров фирмы Hewlett Packard (HP) область загрузки занимает до 8 Кбайт и содержит следующую информацию: 

Volume Header 256 bytes
Unused 256 bytes
Volume Directory Information 256 bytes
Bootstrap Program 7.25 Kbytes

Например, Volume directory information содержит на компьютерах HP три имени: SYSHPUX, SYSBCKUP и SYSDEBUG. SYSHPUX, соответствует файлу /hpux, который является собственно ядром ОС. SYSBCKUP соответствует файлу /sysbackup, который используется при сохранении системы. SYSDEBUG соответствует файлу /sysdebug, который используется при написании драйверов. Последние 7,25 Кбайт области загрузки содержат так называемый "вторичный загрузчик" (secondary loader). "Начальный загрузчик Boot ROM" загружает и передает управление "вторичному загрузчику", который по желанию пользователя может загрузить любой из трех перечисленных файлов, содержащих ядро ОС.

Второй блок (область на диске длиной в 8 Кбайт), как уже ранее было отмечено, занимает "суперблок", который содержит заголовок файловой системы и основную информацию о ней, включающую размер, число свободных блоков, число индексных дескрипторов и другую информацию. При монтировании файловой системы (по команде mount) в таблице смонтированных систем, расположенной в ядре ОС, формируется соответствующий элемент, а "суперблок" записывается в один из больших внутренних буферов ядра. Система работает с "суперблоком" для поиска и обновления списка свободных и занятых блоков на диске. Далее дисковое пространство, отведенное под файловую систему, занимают блоки, объединенные в так называемый i-список (i-nodes), или список индексных дескрипторов.

 Указатели на блоки файла.

Как адресуются блоки файлов? Количество полей в каждом индексном узле является статической величиной. Дополнительная информация сохраняется в расширенных атрибутах и косвенных указателях, о которых речь пойдет далее в этой главе. Состояние выделения индексного узла определяется по карте индексных узлов, местонахождение которой задается в дескрипторе группы. Поле размера в новых версиях extX является 64-разрядным, но в старых версиях оно содержало всего 32 бита, что делало невозможной работу с файлами, размер которых превышал 4 Гбайт. В новых версиях старшие 32 бита размера хранятся в поле, которое ранее не использовалось. Индексный узел содержит информацию о размере файла, его владельце и временных штампах.

Файловая система extX проектировалась еще в расчете на эффективную работу с небольшими файлами. По этой причине в каждом индексном узле могут храниться адреса первых 12 блоков, выделенных файлу. Эти адреса называются прямыми указателями. Если для хранения файла потребуется более 12 блоков, выделяется специальный блок для хранения остальных адресов. Указатель на него называется косвенным указателем блоков. Все адреса блоков занимают 4 байта, а общее количество адресов в блоке зависит от размера блока. Косвенный указатель хранится в индексных узлах. Если файл содержит больше блоков, чем помещается в 12 прямых указателях и в косвенном блоке, используется механизм двойной косвенной адресации. Другими словами, индексный узел ссылается на блок, содержащий список косвенных указателей на блоки; каждый такой указатель ссылается на блоки, содержащие список прямых указателей. 
Если ли же файлу потребуется еще больше места, можно воспользоваться тройной косвенной адресацией: такой блок содержат набор адресов блоков с двойной адресацией, которые, в свою очередь, содержат адреса блоков косвенной адресации. Графическое представление каждой из этих структур данных показано на рис. 3. Каждый индексный узел содержит:

- 12 прямых указателей,
- один косвенный указатель,
- один указатель двойной адресации,
- и один указатель тройной адресации.

QIP Shot - Image: 2016-06-07 10:39:16

Рис. 3. Примеры реализации косвенной адресации на одном (а), двух (б) и трех уровнях (в).

 Первые 12 блоков, занимаемых файлом, называются непосредственными блоками (для наглядности они выделены на рис. 2 "полужирным" шрифтом). Они хранятся в массиве DIRECT BLOCKS непосредственно в теле inode. Каждый элемент массива представляет собой 32-битный номер блока.

При среднем значении BLOCK_SIZE, равном 4 Кбайт, непосредственные блоки могут адресовать до 4x12 = 48 Кбайт данных. Если файл превышает этот размер, создаются один или несколько блоков косвенной адресации (INDIRECT BLOCK).

Первый блок косвенной адресации (1x INDIRECT BLOCK ИЛИ просто INDIRECT BLOCK) хранит ссылки на другие непосредственные блоки. Адрес этого блока хранится в поле i_indirect_block в inode. 
Как легко вычислить, он адресует порядка BLOCK_SIZE/sizeof (DWORD) * BLOCK_SIZE = 4096/4 *4 Мбайт данных. Если этого окажется недостаточно, создается косвенный блок двойной косвенной адресации (2х INDIRECT BLOCK ИЛИ DOUBLE INDIRECT BLOCK), хранящий указатели на косвенные блоки, что позволяет адресовать (BLOCK_SIZE/sizeof(DWORD))**2* BLOCK_SIZE =4096/4 ** 4096 = 4 Гбайт данных. 
Если же и этого все равно недостаточно, создается блок тройной косвенной адресации (3х INDIRECT BLOCK или TRIPLE INDIRECT BLOCK), содержащий ссылки на блоки двойной косвенной адресации. 
Иерархия непосредственных блоков и блоков косвенной адресации показана на рис. 4 (от индексного дескриптора до блоков файла). Блок косвенной адресации третьего порядка здесь не показан (см. рис. 3 - в).

QIP Shot - Image: 2016-06-07 10:40:06 

Рис. 4. Варианты порядка размещения блоков файла на диске - иерархия непосредственных и косвенных блоков.

 

По сравнению с NTFS такая схема хранения информации о размещении устроена намного проще. Вместе с тем, она и гораздо "прожорливее". С другой стороны, ее несомненное достоинство по сравнению с NTFS состоит в том, что поскольку все ссылки хранятся в неупакованном виде, для каждого блока файла можно быстро найти соответствующий ему косвенный блок, даже если inode полностью разрушен.
Логическое представление файла отличается от его физического представления. Логическое представление - можно получить, распечатав файл (мы видим массив символов, которые представляют содержимое файла). Физическое представление определяет истинную организацию файла на диске. Файл, размер которого превышает один блок, обычно разбросан по диску. При доступе к файлу, система находит отдельные его блоки, и в правильном порядке организует логическое представление информации в файле.

 


Лицензия