Введение
ext2 Файловая система для ядра Linux. ext2, или вторая расширенная файловая система, является файловой системой для ядра Linux. Первоначально она была разработана французским разработчиком программного обеспечения Rémy Card в качестве замены расширенной файловой системы (ext). Созданная по тем же принципам, что и Berkeley Fast File System от BSD, она стала первой файловой системой коммерческого уровня для Linux. Каноническая реализация ext2 – драйвер файловой системы "ext2fs" в ядре Linux. Другие реализации (разного качества и полноты) существуют в GNU Hurd, MINIX 3, некоторых ядрах BSD, в MiNT, Haiku, а также в виде сторонних драйверов для Microsoft Windows и macOS (через FUSE). Этот драйвер был признан устаревшим в Linux версии 6.9 в пользу драйвера ext4, поскольку драйвер ext4 работает с файловыми системами ext2. Ядро Linux поддерживает беJournal-less режим ext4, который предоставляет преимущества, недоступные в ext2, такие как большие размеры файлов и томов.
File system for the Linux kernel
ext2, or second extended file system, is a file system for the Linux kernel. It was initially designed by French software developer Rémy Card as a replacement for the extended file system (ext). Having been designed according to the same principles as the Berkeley Fast File System from BSD, it was the first commercial grade filesystem for Linux. The canonical implementation of ext2 is the "ext2fs" filesystem driver in the Linux kernel. Other implementations (of varying quality and completeness) exist in GNU Hurd, MINIX 3, some BSD kernels, in MiNT, Haiku and as third party Microsoft Windows and macOS (via FUSE) drivers. This driver was deprecated in Linux version 6.9 in favor of the ext4 driver, as the ext4 driver works with ext2 filesystems. the Linux kernel supports a journal less mode of ext4 which provides benefits not found with ext2, such as larger file and volume sizes.
История
Ранняя разработка ядра Linux осуществлялась как кросс-компиляция под операционной системой MINIX. Файловая система MINIX использовалась в качестве первой файловой системы Linux. Файловая система Minix была в основном свободна от ошибок, но использовала 16-битные смещения внутри и, следовательно, имела максимальный размер всего 64 мегабайта, а также ограничение длины имени файла в 14 символов. Из-за этих ограничений началась работа над заменой – собственной файловой системой для Linux. Для упрощения добавления новых файловых систем и обеспечения универсального файлового API, в ядро Linux был добавлен VFS – слой виртуальной файловой системы. Расширенная файловая система (ext) была выпущена в апреле 1992 года как первая файловая система, использующая VFS API, и включена в версию Linux 0.96c. Файловая система ext решила две основные проблемы файловой системы Minix (максимальный размер раздела и ограничение длины имени файла до 14 символов) и позволила хранить 2 гигабайта данных и имена файлов длиной до 255 символов. Однако оставались проблемы: отсутствовала поддержка отдельных временных меток для доступа к файлу, изменения inode и изменения данных. В качестве решения этих проблем в январе 1993 года для ядра Linux 0.99 были разработаны две новые файловые системы: xiafs и вторая расширенная файловая система (ext2). Ограничения в блочном драйвере означают, что файловые системы ext2 имеют максимальный размер файла 2 ТиБ. ext2 по-прежнему рекомендуется использовать вместо журналируемых файловых систем на загрузочных USB-накопителях и других твердотельных накопителях. ext2 выполняет меньше операций записи, чем ext3, поскольку не использует журналирование. Поскольку основным фактором старения флеш-чипа является количество циклов стирания, а циклы стирания происходят часто при записи, уменьшение количества записей увеличивает срок службы твердотельного устройства. Другой полезной практикой для файловых систем на флеш-устройствах является использование опции монтирования noatime по той же причине. Начиная с ядра Linux 6.9, драйвер ext2fs был объявлен устаревшим и больше не включен в конфигурацию по умолчанию. Основная причина заключалась в том, что он не поддерживал даты после 2038 года. Пользователям рекомендуется перейти на ext4.
Структуры данных ext2
Пространство в ext2 разделено на блоки. Эти блоки сгруппированы в группы блоков, аналогичные группам цилиндров в файловой системе Unix. В большой файловой системе обычно насчитываются тысячи блоков. Данные для любого файла, по возможности, располагаются в пределах одной группы блоков. Это делается для минимизации количества обращений к диску при чтении больших объемов непрерывных данных. Каждая группа блоков содержит копию суперблока и таблицы дескрипторов групп блоков, а все группы блоков содержат карту блоков, карту inode, таблицу inode и, наконец, сами блоки данных. Суперблок содержит важную информацию, критически необходимую для загрузки операционной системы. Поэтому резервные копии создаются в нескольких группах блоков файловой системы. Однако, как правило, при загрузке используется только первая копия, расположенная в первом блоке файловой системы. Дескриптор группы хранит информацию о расположении карты блоков, карты inode и начала таблицы inode для каждой группы блоков. Эти данные, в свою очередь, хранятся в таблице дескрипторов групп.
Справочники
Каждый каталог представляет собой список записей каталога. Каждая запись каталога связывает одно имя файла с одним номером inode и состоит из номера inode, длины имени файла и самого имени файла. Для поиска файла каталог просматривается последовательно, от начала до конца, по имени файла. Для каталогов разумного размера это приемлемо. Однако для очень больших каталогов это неэффективно, и ext3 предлагает второй способ хранения каталогов (HTree), который более эффективен, чем простой список имен файлов. Корневой каталог всегда хранится под номером inode два, чтобы код файловой системы мог найти его при монтировании. Подкаталоги реализуются путем хранения имени подкаталога в поле имени и номера inode подкаталога в поле inode. Жесткие ссылки реализуются путем хранения одного и того же номера inode для нескольких имен файлов. Обращение к файлу по любому из этих имен приводит к одному и тому же номеру inode и, следовательно, к одним и тем же данным. Специальные каталоги "." (текущий каталог) и ".." (родительский каталог) реализуются путем хранения имен "." и ".." в каталоге и номера inode текущего и родительского каталогов в поле inode. Единственное особое отношение к этим двум записям заключается в том, что они создаются автоматически при создании любого нового каталога и не могут быть удалены.
Распределение данных
Когда создается новый файл или каталог, ext2 должен определить, где хранить данные. Если диск в основном пуст, данные можно хранить практически где угодно. Однако, группировка данных с относящимися к ним данными позволит минимизировать время поиска и максимизировать производительность. ext2 стремится размещать каждый новый каталог в той же группе, что и его родительский каталог, основываясь на предположении, что обращения к родительскому и дочерним каталогам, скорее всего, будут связаны между собой. ext2 также пытается размещать файлы в той же группе, что и их записи в каталоге, поскольку обращения к каталогам часто приводят к обращениям к файлам. Однако, если группа заполнена, новый файл или новый каталог размещаются в другой свободной группе. Блоки данных, необходимые для хранения каталогов и файлов, можно найти, обратившись к карте распределения данных. Любое необходимое место в таблице inode можно найти, обратившись к карте распределения inode.
Ограничения файловой системы
+ Теоретические пределы ext2 в Linux Размер блока: 1 КиБ 2 КиБ 4 КиБ 8 КиБ Максимальный размер файла: 16 ГиБ 256 ГиБ 2 ТиБ 2 ТиБ Максимальный размер файловой системы: 4 ТиБ 8 ТиБ 16 ТиБ 32 ТиБ
Причиной некоторых ограничений ext2 является формат файла данных и ядро операционной системы. В основном эти факторы определяются при создании файловой системы. Они зависят от размера блока и соотношения между количеством блоков и inode. В Linux размер блока ограничен размером страницы архитектуры. Существуют также некоторые пользовательские программы, которые не могут работать с файлами размером более 2 ГБ. Если *b* – размер блока, то максимальный размер файла ограничен выражением min(((b/4)³ + (b/4)² + b/4 + 12) × b, (2³² − 1) × 512) из-за структуры i-блоков (массива прямых/косвенных EXT2 N БЛОКОВ) и i-блоков (32-битное целое число), представляющих количество "блоков" размером 1024 байта (1 килобайт) в файле. Максимальное количество вложенных каталогов составляет 31998 из-за ограничения на счетчик ссылок. Индексирование каталогов в ext2 отсутствует, что приводит к проблемам с производительностью при работе с каталогами, содержащими большое количество файлов (>10 000). Теоретическое ограничение на количество файлов в каталоге составляет 1,3 × 10²⁰, однако это не имеет практического значения. Примечание: В Linux 2.4 и более ранних версиях блочные устройства были ограничены 2 ТиБ, что ограничивало максимальный размер раздела, независимо от размера блока.
Расширение сжатия
e2compr – это модификация драйвера ext2 в ядре Linux, обеспечивающая сжатие и распаковку файлов непосредственно файловой системой, без участия пользовательских приложений. e2compr представляет собой небольшой патч для ext2. e2compr сжимает только обычные файлы; административные данные (суперблок, inode, файлы каталогов и т.д.) не сжимаются (преимущественно из соображений безопасности). Доступ к сжатым блокам обеспечивается для операций чтения и записи. Алгоритм сжатия и размер кластера задаются для каждого файла отдельно. Каталоги также могут быть помечены для сжатия, в этом случае каждый вновь созданный файл в каталоге будет автоматически сжат с использованием того же размера кластера и того же алгоритма, который был указан для каталога. e2compr – это не новая файловая система. Это лишь патч для ext2, предназначенный для поддержки флага EXT2 COMPR FL. Он не требует от пользователя создания нового раздела и продолжит поддерживать чтение и запись существующих файловых систем ext2. Можно рассматривать его как способ доступа для подпрограмм чтения и записи к файлам, которые могли быть созданы простой утилитой, аналогичной gzip или compress. Сжатые и несжатые файлы корректно сосуществуют на разделах ext2. Последняя ветка e2compr доступна для актуальных версий Linux 2.4, 2.6 и 3.0. Последний патч для Linux 3.0 был выпущен в августе 2011 года и обеспечивает поддержку многоядерных систем и больших объемов оперативной памяти. Также существуют ветки для Linux 2.0 и 2.2.
В других операционных системах
Доступ к разделам ext2 под Microsoft Windows возможен через устанавливаемую файловую систему, например, ext2ifs или ext2Fsd. Filesystem in Userspace можно использовать на macOS.