stringtranslate.com

ехт2

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

Пространство в ext2 разделено на блоки . Эти блоки сгруппированы в группы блоков, аналогичные группам цилиндров в файловой системе Unix . Обычно в большой файловой системе тысячи блоков. Данные для любого файла обычно содержатся в одной группе блоков, где это возможно. Это делается для минимизации количества обращений к диску при чтении больших объемов смежных данных.

Каждая группа блоков содержит копию суперблока и таблицы дескрипторов группы блоков, а все группы блоков содержат битовую карту блока, битовую карту инода, таблицу инодов и, наконец, сами блоки данных.

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

Групповой дескриптор хранит местоположение битовой карты блока, битовой карты инода и начало таблицы инодов для каждой группы блоков. Они, в свою очередь, хранятся в таблице дескриптора группы.

Иноды

Каждый файл или каталог представлен inode . Термин «inode» происходит от «index node» (со временем он стал i-node, а затем inode). [25] Inode включает данные о размере, разрешении, владельце и местоположении на диске файла или каталога.

Пример структуры inode ext2:

Eструктура

Цитата из документации ядра 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]

Смотрите также

Ссылки

  1. ^ "Глава 8. Диски, файловые системы и загрузчики". www.freebsd.org . Получено 11 апреля 2018 г. .
  2. ^ "ext2fs(5)". www.freebsd.org . Получено 11 апреля 2018 г. .
  3. ^ "ReactOS 0.4.2 Released". reactos.org . Получено 17 августа 2016 г. .
  4. ^ "HelenOS Wiki: Ext4fs". www.helenos.com . Получено 6 ноября 2023 г. .
  5. ^ "pkg/lwext4: добавить облегченную реализацию файловой системы ext2/3/4". www.github.com . Получено 6 ноября 2023 г. .
  6. ^ "subsys: fs: Реализация файловой системы ext2". www.github.com . Получено 6 ноября 2023 г. .
  7. ^ Мауэрер, Вольфганг (2010). Профессиональная архитектура ядра Linux. Джон Уайли и сыновья. ISBN 9781118079911.
  8. ^ "GNU Hurd/ hurd/ translater/ ext2fs". GNU Hurd . Получено 2024-02-10 .
  9. ^ "MINIX Release 3.2.0". MINIX 3 . Получено 2024-02-10 .
  10. ^ "git.minix3.org Git - minix.git/tree - minix/fs/ext2/". Исходный код MINIX 3. Получено 2024-02-10 .
  11. ^ "NetBSD src/sys/ufs/ext2fs/". Исходный код NetBSD . Получено 2024-02-10 .
  12. ^ "OpenBSD src/sys/ufs/ext2fs/". Исходный код OpenBSD . Получено 2024-02-10 .
  13. ^ "ext2fs « fs « sys - src - исходное дерево FreeBSD". Исходный код FreeBSD . Получено 2024-02-10 .
  14. ^ "freemint/sys/xfs/ext2fs at master · freemint/freemint". Исходный код FreeMiNT . Получено 2024-02-10 .
  15. ^ "ext2 « file_systems « kernel « add-ons « src - haiku - Основной репозиторий Haiku". Исходный код Haiku . Получено 2024-02-10 .
  16. ^ "matt-wu/Ext3Fsd: Драйвер файловой системы Ext2/3/4 для Windows". matt-wu/Ext3Fsd . Получено 2024-02-10 .
  17. ^ ab Larabel, Michael (2024-03-26). "Linux 6.9 устарел драйвер файловой системы EXT2". Phoronix . Получено 2024-03-26 .
  18. ^ "ext4: разрешить ext4 работать без журнала". Исходное дерево ядра Linux . Получено 12 января 2021 г.
  19. ^ "Файловые системы Linux: Ext2 против Ext3 против Ext4". www.thegeekstuff.com . Получено 2020-07-13 .
  20. ^ ab Strobel, Stefan; Uhl, Thomas (1994). Linux — Раскрытие возможностей рабочей станции на вашем ПК . Springer-Verlag. стр. 54.
  21. ^ ab Jones, M. Tim (17 февраля 2009 г.). "Анатомия ext4". IBM Developer Works. Архивировано из оригинала 2015-02-20 . Получено 8 февраля 2012 г.
  22. ^ linux/kernel/git/torvalds/linux-2.6.git/commitdiff:, [PATCH] Файлы размером 2 ТБ: добавить blkcnt_t, Автор: Такаши Сато, 26 марта 2006 г. 09:37:52 +0000 (01:37 -0800) — Коммит, разрешающий большие файлы, git.kernel.org
  23. ^ "Твердотельные накопители". Super Talent Technology.
  24. ^ Опденакер, Майкл (25.03.2024). "драйвер файловой системы ext2 теперь отмечен как устаревший - блог Бутлина" . Получено 26.03.2024 .
  25. ^ "Журнал программиста", том 5, 1987, стр. 174
  26. ^ "Вторая расширенная файловая система". www.nongnu.org . Получено 11 декабря 2019 г.
  27. ^ "Руководство по файловой системе". Обзоры Linux. Архивировано из оригинала 2011-09-17 . Получено 2008-01-24 .
  28. ^ «Создание файловой системы Ext2 — Понимание ядра Linux, Второе издание». www.oreilly.com . Получено 25 июля 2023 г. .
  29. Рэндалл, Нил (18 сентября 2007 г.). «Linux: You Can Do It!». PC Magazine . Том 26, № 18. С. 76.
  30. ^ Уоллен, Джек (17 сентября 2012 г.). «Включить монтирование файловых систем ext2/3 на машине Windows». TechRepublic . Получено 17 января 2016 г.
  31. ^ Кесслер, Тофер (22 июня 2012 г.). «Как управлять дисками Ext2/Ext3 в OS X». CNET . Получено 17 января 2016 г. .
  32. ^ «Вторая расширенная файловая система — документация ядра Linux».

Примечания

Дальнейшее чтение

Внешние ссылки