ext2 , или вторая расширенная файловая система , — файловая система для ядра Linux . Первоначально она была разработана французским разработчиком программного обеспечения Реми Кардом в качестве замены расширенной файловой системы (ext). Разработанная по тем же принципам, что и Berkeley Fast File System из BSD , она стала первой коммерческой файловой системой для Linux. [7]
Канонической реализацией ext2 является драйвер файловой системы "ext2fs" в ядре Linux. Другие реализации (различного качества и полноты) существуют в GNU Hurd , [8] MINIX 3 , [9] [10] некоторых ядрах BSD , [11] [12] [13] в MiNT , [14] Haiku [15] и в качестве сторонних драйверов Microsoft Windows [16] и macOS (через FUSE ). Этот драйвер был устарел в версии Linux 6.9 в пользу драйвера ext4, поскольку драйвер ext4 работает с файловыми системами ext2. [17]
ext2 была файловой системой по умолчанию в нескольких дистрибутивах Linux , включая Debian и Red Hat Linux , пока не была вытеснена ext3 , которая почти полностью совместима с ext2 и является журналируемой файловой системой . ext2 по-прежнему является файловой системой выбора для флэш -носителей (таких как SD-карты и USB-флеш-накопители ) [ требуется ссылка ], поскольку отсутствие журнала увеличивает производительность и минимизирует количество записей, а флэш-устройства могут выдерживать ограниченное количество циклов записи. С 2009 года [18] ядро Linux поддерживает режим ext4 без журнала , который обеспечивает преимущества, отсутствующие в ext2, такие как большие размеры файлов и томов. [19]
Ранняя разработка ядра Linux была сделана как кросс-разработка под операционной системой MINIX . Файловая система MINIX использовалась как первая файловая система Linux. Файловая система Minix была в основном свободна от ошибок , но использовала 16-битные смещения внутри и, таким образом, имела максимальный предел размера всего 64 мегабайта , а также существовало ограничение на длину имени файла в 14 символов. [20] Из-за этих ограничений началась работа над заменой собственной файловой системы для Linux. [20]
Чтобы облегчить добавление новых файловых систем и предоставить общий файловый API , в ядро Linux был добавлен VFS , уровень виртуальной файловой системы. Расширенная файловая система ( ext ) была выпущена в апреле 1992 года как первая файловая система, использующая VFS API, и была включена в версию Linux 0.96c. [21] Файловая система ext решила две основные проблемы файловой системы Minix (максимальный размер раздела и ограничение длины имени файла до 14 символов) и позволяла хранить 2 гигабайта данных и имена файлов длиной до 255 символов. Но у нее все еще были проблемы: не поддерживались отдельные временные метки для доступа к файлам, изменения inode и изменения данных.
Для решения этих проблем в январе 1993 года для ядра Linux 0.99 были разработаны две новые файловые системы: xiafs и вторая расширенная файловая система ( ext2 ), [21] которая представляла собой переработку расширенной файловой системы, включающую многие идеи из Berkeley Fast File System . ext2 также была разработана с учетом расширяемости, при этом во многих ее дисковых структурах данных оставалось место для использования в будущих версиях. [ требуется ссылка ]
С тех пор ext2 стала испытательным полигоном для многих новых расширений API VFS. Такие функции, как отозванное предложение POSIX draft ACL и отозванное предложение о расширенных атрибутах , как правило, были реализованы в первую очередь в ext2, поскольку ее было относительно просто расширять, а ее внутреннее устройство было хорошо понятным.
В ядрах Linux до версии 2.6.17 [22] ограничения в драйвере блока означают, что файловые системы ext2 имеют максимальный размер файла 2 ТиБ.
ext2 по-прежнему рекомендуется вместо журналируемых файловых систем на загрузочных USB-флеш-накопителях и других твердотельных накопителях [ кем? ] . ext2 выполняет меньше записей, чем ext3, поскольку журналирование отсутствует. Поскольку основным фактором старения флэш-чипа является количество циклов стирания, а циклы стирания происходят часто при записи, уменьшение количества записей увеличивает срок службы твердотельного устройства. [23] Еще одной хорошей практикой для файловых систем на флэш-устройствах является использование опции монтирования no atime по той же причине.
Начиная с ядра Linux 6.9, драйвер ext2fs был объявлен устаревшим и больше не включен в конфигурацию по умолчанию. Основной причиной было то, что он не поддерживал даты после 2038 года . [17] Пользователям рекомендуется обновиться до ext4. [24]
Пространство в ext2 разделено на блоки . Эти блоки сгруппированы в группы блоков, аналогичные группам цилиндров в файловой системе Unix . Обычно в большой файловой системе тысячи блоков. Данные для любого файла обычно содержатся в одной группе блоков, где это возможно. Это делается для минимизации количества обращений к диску при чтении больших объемов смежных данных.
Каждая группа блоков содержит копию суперблока и таблицы дескрипторов группы блоков, а все группы блоков содержат битовую карту блока, битовую карту инода, таблицу инодов и, наконец, сами блоки данных.
Суперблок содержит важную информацию, которая имеет решающее значение для загрузки операционной системы . Таким образом, резервные копии создаются в нескольких группах блоков в файловой системе. Однако обычно при загрузке используется только первая его копия, которая находится в первом блоке файловой системы.
Групповой дескриптор хранит местоположение битовой карты блока, битовой карты инода и начало таблицы инодов для каждой группы блоков. Они, в свою очередь, хранятся в таблице дескриптора группы.
Каждый файл или каталог представлен inode . Термин «inode» происходит от «index node» (со временем он стал i-node, а затем inode). [25] Inode включает данные о размере, разрешении, владельце и местоположении на диске файла или каталога.
Пример структуры inode ext2:
Цитата из документации ядра Linux для ext2: [26]
Есть указатели на первые 12 блоков, которые содержат данные файла в inode. Есть указатель на косвенный блок (который содержит указатели на следующий набор блоков), указатель на двойной косвенный блок и указатель на тройной косвенный блок.
Таким образом, в ext2 имеется структура, имеющая 15 указателей. Указатели с 1 по 12 указывают на прямые блоки, указатель 13 указывает на косвенный блок, указатель 14 указывает на дважды косвенный блок, а указатель 15 указывает на трижды косвенный блок.
Каждый каталог представляет собой список записей каталога. Каждая запись каталога связывает одно имя файла с одним номером инода и состоит из номера инода, длины имени файла и фактического текста имени файла. Чтобы найти файл, каталог просматривается спереди назад для связанного имени файла. Для разумных размеров каталога это нормально. Но для очень больших каталогов это неэффективно, и ext3 предлагает второй способ хранения каталогов ( HTree ), который более эффективен, чем просто список имен файлов.
Корневой каталог всегда хранится в иноде номер два, так что код файловой системы может найти его во время монтирования. Подкаталоги реализуются путем сохранения имени подкаталога в поле имени и номера инода подкаталога в поле инода. Жесткие ссылки реализуются путем сохранения одного и того же номера инода с несколькими именами файлов. Доступ к файлу по любому из имен приводит к одному и тому же номеру инода, а значит, и к тем же данным.
Специальные каталоги "." (текущий каталог) и ".." (родительский каталог) реализованы путем сохранения имен "." и ".." в каталоге, а также номера инода текущего и родительского каталогов в поле инода. Единственное особое отношение к этим двум записям заключается в том, что они автоматически создаются при создании любого нового каталога и не могут быть удалены.
При создании нового файла или каталога ext2 должна решить, где хранить данные. Если диск в основном пуст, то данные можно хранить практически где угодно. Однако кластеризация данных со связанными данными минимизирует время поиска и максимизирует производительность.
ext2 пытается разместить каждый новый каталог в группе, содержащей его родительский каталог, исходя из теории, что доступы к родительским и дочерним каталогам, вероятно, будут тесно связаны. ext2 также пытается разместить файлы в той же группе, что и их записи каталога, поскольку доступ к каталогу часто приводит к доступу к файлу. Однако если группа заполнена, то новый файл или новый каталог помещается в какую-то другую неполную группу.
Блоки данных, необходимые для хранения каталогов и файлов, можно найти, посмотрев в битовую карту распределения данных. Любое необходимое пространство в таблице инодов можно найти, посмотрев в битовую карту распределения инодов.
Причиной некоторых ограничений ext2 являются формат файла данных и ядро операционной системы. В основном эти факторы определяются один раз при построении файловой системы. Они зависят от размера блока и соотношения количества блоков и инодов. [ необходима цитата ] В Linux размер блока ограничен размером страницы архитектуры .
Существуют также некоторые пользовательские программы, которые не могут обрабатывать файлы размером более 2 ГиБ .
Если b — размер блока, максимальный размер файла ограничен min( (( b /4) 3 + ( b /4) 2 + b /4 + 12) × b , (2 32 − 1) × 512 ) из-за структуры i_block (массив прямых/косвенных EXT2_N_BLOCKS) и i_blocks (32-битное целое число), представляющее количество 1024 байт (1 килобайт) [28] «блоков» в файле. [ оригинальное исследование? ]
Максимальное количество подуровневых каталогов составляет 31998 из-за ограничения количества ссылок. [ необходима цитата ] Индексация каталогов недоступна в ext2, поэтому существуют проблемы с производительностью для каталогов с большим количеством файлов (>10 000). Теоретический предел количества файлов в каталоге составляет 1,3 × 10 20 , [ оригинальное исследование? ] хотя это не имеет значения для практических ситуаций.
Примечание: в Linux 2.4 и более ранних версиях блочные устройства были ограничены 2 ТиБ, что ограничивало максимальный размер раздела независимо от размера блока. [ необходима цитата ]
e2compr — это модификация драйвера ext2 в ядре Linux для поддержки сжатия и распаковки файлов файловой системой без какой-либо поддержки со стороны пользовательских приложений. e2compr — это небольшой патч против ext2.
e2compr сжимает только обычные файлы; административные данные (суперблок, иноды, файлы каталогов и т. д.) не сжимаются (в основном из соображений безопасности). Доступ к сжатым блокам предоставляется для операций чтения и записи. Алгоритм сжатия и размер кластера указываются для каждого файла отдельно. Каталоги также могут быть помечены для сжатия, в этом случае каждый вновь созданный файл в каталоге будет автоматически сжат с тем же размером кластера и тем же алгоритмом, которые были указаны для каталога.
e2compr — это не новая файловая система. Это всего лишь патч для ext2, сделанный для поддержки флага EXT2_COMPR_FL. Он не требует от пользователя создания нового раздела и продолжит читать или писать существующие файловые системы ext2. Можно рассматривать его как просто способ для процедур чтения и записи получить доступ к файлам, которые могли бы быть созданы простой утилитой, похожей на gzip или compress. Сжатые и несжатые файлы прекрасно сосуществуют на разделах ext2.
Последняя версия e2compr-branch доступна для текущих версий Linux 2.4, 2.6 и 3.0. Последняя версия патча для Linux 3.0 была выпущена в августе 2011 года и обеспечивает поддержку многоядерности и высокой памяти . Также есть ветки для Linux 2.0 и 2.2.
Доступ к разделам ext2 в Microsoft Windows возможен через устанавливаемую файловую систему , такую как ext2ifs [29] или ext2Fsd . [30] Файловую систему в пространстве пользователя можно использовать в macOS. [31]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )