Файловые системы в ОС Linux. Файловая система Ext2.
(пишем весь 17 вопросы и содержание этого вопроса)
Структура файловой системвы ext2 имеет следующий вид:
-Загрузчик служит для загрузки ОС;
-Группа блоков "0" также относится к загрузке ОС (содержит код загрузки);
-Далее следуют следующие группы блоков.
Каждый блок состоит из:
- суперблок - в нём хранится информация о компоновке файловой системы, включая: количество и-узлов, количество дисковых блоков, начало списка свободных дисковых блоков;
- дескриптор группы - содержит информацию о расположении битовых массивов, количество свободных блоков и узлов в группе, количество каталогов в группе (это необходимо для равномерного распределения каталогов по всему диску);
- блоковый битовый массив — ведёт учёт свободных блоков;
- битовый массив и-узлов - ведёт учёт свободных и-узлов;
- и-узлы - нумеруются от единицы до какого-то значения (узел 1 - учёт повреждённых блоков, узел 2 - корневой каталог, и так далее); каждый и-узел имеет размер 128 байт, описывает ровно один файл или каталог;
- блоки данных - хранятся каталоги и файлы, причём если файл или каталог состоит более чем из одного блока, то не обязательно они будут храниться непрерывно на диске.
Файловая система ext2 пытается расположить обычные файлы в той же самой группе блоков что и родительский каталог, а файлы данных в том же блоке что и узел исходного файла. Битовые массивы используются для принятия быстрых решений по выделению свободного места. Когда выделяются новые блоки файлов, то файловая система ext2 делает упреждающее выделение дополнительных блоков для минимизирования будущей фрагментации. Рассмотрим пример структуры каталога с 3 файлами:
Каждый каталог состоит из некоторого количества дисковых блоков. В каталоге элементы для файлов находятся в неотсортированном порядке. Элементы не могут пересекать границы блоков, поэтому в конце каждого дискового блока есть некоторое количество неиспользуемых байт. Каждая запись каталога состоит из 4 полей фиксированной длины и одного переменного.
Структура каталога имеет следующие поля:
номер и-узла (чаще всего и-узлы не упорядочены);
размер всей записи (rec_len);
тип (файл, каталог и так далее);
длина имени файла;
имя файла, которое заканчивается нулевым байтом.
Особенности поиска файла после удаления пути:
-мы указали в командной строке такой путь: /usr/os/lab/f1. В данном случае поиск разделяется на несколько шагов: - система находит корневой каталог, который использует и-узел с номером 2; - данный элемент помещается в кэш элементов, в корневом каталоге производится поиск строки /os/lab/f1, вычисляется его и-узел; - найденный элемент помещается в кэш; - из найденного и-узла производится поиск записи /lab/f1, вычисляется и-узел; - найденный элемент помещается в кэш и так далее (то есть рекурсивно, пока не дойдём до файла).
Поиск в каталогах производится линейно, и поэтому, это занимает много времени. Для этого используется кэш каталога.
Некоторые элементы и-узла:
Mode (file(F) or directory(D));
Nlinks (количество элементов каталога указывающих на этот и-узел);
Size (размер файла в байтах);
Addr (адрес первых 12 блоков файлов);
Atime (время последнего доступа к файлу);
Mtime (время последней модификации файла);
Ctime (время последнего изменения и-узла).