Extended File System EXT ( 2, 3, 4 ) Расширенная Файловая Система
Характеристика файловой системы. Сокращённо ext или extfs — первая файловая система, разработанная специально для ОС на ядре Linux. Представлена в апреле 1992 г. для ядра Linux. Используемая структура метаданных была разработана Реми Кардом, на создание которой его вдохновила Unix File System (UFS). Целью было преодолеть ограничения файловой системы Minix File System — в новой файловой системе наибольший возможный размер раздела и файла увеличен до 2 Гб, а максимальная длина имени файла — до 255 символов.
ext является первой версией расширенной файловой системы. Впоследствии была заменена ext 2 и xiafs. Со временем ext 2 вытеснила xiafs благодаря долгосрочной жизнеспособности. Вначале был разработан слой Virtual File System (VFS). После интеграции VFS в ядро , была реализована новая файловая система, названная ``Extended File System''. Это произошло в апреле 1992. Были преодолены 2 больших ограничения Minix: теперь файловая система могла содержать в себе 2 гига и имя файла могло состоять из 255. Но еще не было поддержки разделенного доступа, модификации inode и data modification timestamps. Эта файловая система была построена на связанных списках. У нее был недостаток-по мере накопления она становилась сильно фрагментированная и теряла в производительности. В январе 1993 появиласьфайловая система : Second Extended File System. Ext 2 fs была сделана уже на основе Extfs и значительно улучшена. Xia fs вначале была более стабильной , нежели Ext 2 fs. Но баги в Ext 2 fs вскоре починили, и на сегодняшний день она является де-факто стандартом в области линуксовых файловых систем.
используются три типа имен: простые, составные и относительные. Не является исключением и ext 2. Ограничения на простое имя состоят в том что, его длина не должна превышать 255 символов, а также в имени не должны присутствовать символ NULL и слеш. Ограничения на символ NULL связаны с представлением строк в языке Си, а на символ слеш — с тем, что он используются как разделительный символ между каталогами. Полное имя представляет собой цепочку простых символьных имен всех каталогов, через которые проходит путь от корня до данного файла. В файловой системе ext 2 файл может входить в несколько каталогов, а значит, иметь несколько полных имен; здесь справедливо соответствие «один файл — много полных имен» . В любом случае полное имя однозначно определяет файл.
Сетевая иерархия каталогов файловой системы ext 2
Структура Диска. Как и в любой файловой системе UNIX , в составе ext 2 можно выделить следующие составляющие: 1) блоки и группы блоков; 2) индексный дескриптор; 3) суперблок; Всё пространство раздела диска разбивается на блоки фиксированного размера, кратные размеру сектора: 1024, 2048, 4096 или 8192 байт. Размер блока указывается при создании файловой системы на разделе диска. Меньший размер блока позволяет сэкономить место на жёстком диске, но также ограничивает максимальный размер файловой системы. Все блоки имеют порядковые номера. С целью уменьшения фрагментации и количества перемещений головок жёсткого диска при чтении больших массивов данных блоки объединяются в группы блоков.
Базовым понятием файловой системы является индексный дескриптор, или inode ( information node). Это специальная структура, которая содержит информацию об атрибутах и физическом расположении файла. Индексные декрипторы объединены в таблицу, которая содержится в начале каждой группы блоков.
Все блоки раздела ext 2 разбиваются на группы блоков. Для каждой группы создаётся отдельная запись в глобальной дескрипторной таблице, в которой хранятся основные параметры: номер блока в битовой карте блоков, номер блока в битовой карте inode, номер блока в таблице inode, число свободных блоков в группе, число индексных дескрипторов, содержащих каталоги.
Битовая карта блоков — это структура, каждый бит которой показывает, отведён ли соответствующий ему блок какому-либо файлу. Если бит равен 1, то блок занят. Аналогичную функцию выполняет битовая карта индексных дескрипторов, которая показывает, какие именно индексные дескрипторы заняты, а какие нет. Ядро Linux, используя число индексных дескрипторов, содержащих каталоги, пытается равномерно распределить inode каталогов по группам, а inode файлов старается по возможности переместить в группу с родительским каталогом. Все оставшееся место, обозначенное в таблице как данные, отводится для хранения файлов.
Обобщенная структурная схема ФС ext 2. Суперблок Описание группы блоков Битовая карта индексных дексрипторов Таблица индексных дескрипторов Данные
Inodes Каждый файл представлен структурой, которая называется inode. Эта нода включает в себя описание файла: его тип , права доступа , владельца, время модификаций, размер, указатель на блоки. Адреса этих блоков хранятся в ноде. Когда пользователь делает какую-то операцию с файлом, ядро берет адреса блоков , сверяет их со своей внутренней таблицей и производит чтение или запись в эти блоки. Структура Нода:
Файлы и каталоги. Каталоги структурированы в иерархическое дерево. Любой каталог может включать как файлы , так и вложенные каталоги. Каталог-это специальный тип файла. Точнее , файл со вложенными элементами. Каждый такой элемент включает номер ноды и имя файла. Когда происходит поиск по пути , ядро сначала ищет номер ноды. Потом эта нода загружается в память. .
Links В юниксовых файловых системах реализована концепция линка. В ноде есть специальное поле , которое ассоциируется с файлом. Создавая линк , мы создаем новый файловый обьект , при удалении которого не будет удаляться файл , на который указывает этот линк. Есть 2 типа линков : первый - hard link - может указывать только на файл. Второй тип - Symbolic links. Он может быть создан на любой тип файла. К девайсам возможен доступ через специальные файлы. На самом деле эти файлы вообще не используют дисковое пространство. Фактически они указывают на драйвер
Принципы работы файловой системы.
Линуксовое ядро включает Virtual File System, которая используется для доступа к реальным файлам и управляет системными файловыми вызовами. Этот механизм используется для того, чтобы рядом сосуществовали различные файловые системы. Когда процесс выполняет файловый системный вызов, ядро вызывает функцию, входящую в VFS. Она вызывает функцию уже внутри самой физической файловой системы:
VFS определяет набор функций, которые реализованы в любой файловой системе. Есть 3 типа обьектов: файловые системы, ноды и открытые файлы. VFS использует таблицу, встроенную в ядро. Каждая строка в этой таблице описывает свой тип файловой системы, она включает имя этой системы и указатель на функцию, которая монтирует эту систему. Эта функция читает супер-блок на диске и возвращает дескриптор этой файловой системы. VFS использует еще 2 дескриптора: inode descriptor и open file descriptor. inode descriptor включает информацию об указателях на функции, которые используются для любых файлов ( create, unlink). file descriptors состоит из указателей на функции, которые могут оперировать только с открытым файлом read, write.
Основные возможности ФС. Second Extended File System является расширением для первой Extended File System. Нашей целью было создание мощной файловой системы, которая использует юникс-семантику и предлагает продвинутые фичи. В первую очередь мы хотели, чтобы Ext 2 fs была как можно более производительной. Также мы хотели, чтобы это была надежная файловая система. Также Ext 2 fs позволяет делать расширения без потери данных. Система EXT 2 fs поддеpживает стандаpтные типы файлов Unix: обычные файлы, каталоги, файлы устpойств и символические ссылки. EXT 2 fs может упpавлять файловыми системами, установленными на очень больших дисковых pазделах. В то вpемя как ядpо изначально огpаничивает максимальный объем файловой системы до 2 Гб, то новый код VFS увеличивает этот пpедел до 4 Тб. Таким обpазом, тепеpь является возможным пpименение дисков большого объема без необходимости создания большого количества
EXT 2 fs поддеpживает имена файлов большой длины. Она использует пеpеменную длину записей в каталоге. Максимальный pазмеp имени файла pавен 255 символам. Пpи необходимости этот пpедел может быть увеличен до 1012. EXT 2 fs pезеpвиpует некотоpое количество блоков для пользователя root. Обычно это 5 % от общего количества, что позволяет системному администpатоpу избегать нехватки объема жесткого диска пpи его заполнении pаботой пpоцессов дpугих пользователей.