stringtranslate.com

ext4

ext4 ( четвертая расширенная файловая система ) — журналируемая файловая система для Linux , разработанная как преемница ext3 .

ext4 изначально представлял собой серию обратно совместимых расширений ext3, многие из которых изначально были разработаны Cluster File Systems для файловой системы Lustre в период с 2003 по 2006 год с целью расширить пределы хранилища и добавить другие улучшения производительности. [4] Однако другие разработчики ядра Linux выступили против принятия расширений к ext3 по соображениям стабильности, [5] и предложили разветвить исходный код ext3, переименовать его в ext4 и выполнять всю разработку там, не затрагивая существующих пользователей ext3. Это предложение было принято, и 28 июня 2006 года Теодор Цо , сопровождающий ext3, объявил о новом плане развития ext4. [6]

Предварительная версия ext4, разработанная для разработки, была включена в версию 2.6.19 [7] ядра Linux. 11 октября 2008 года патчи, помечающие ext4 как стабильный код, были объединены в репозитории исходного кода Linux 2.6.28, [8] обозначая конец фазы разработки и рекомендуя использовать ext4. Ядро 2.6.28, содержащее файловую систему ext4, было наконец выпущено 25 декабря 2008 года. [9] 15 января 2010 года Google объявила, что обновит свою инфраструктуру хранения данных с ext2 на ext4. [10] 14 декабря 2010 года Google также объявила, что будет использовать ext4 вместо YAFFS в Android 2.3 . [11]

Принятие

ext4 — файловая система по умолчанию для многих дистрибутивов Linux, включая Debian и Ubuntu . [12]

Функции

Большая файловая система
Файловая система ext4 теоретически может поддерживать тома размером до 64 зебибайт (ZiB) и отдельные файлы размером до 16 тебибайт (TiB) со стандартным размером блока 4 КиБ , а также тома размером до 1 йобибайта (YiB) со стандартным размером блока 64 КиБ. Кластеры KiB , хотя ограничение в формате экстента делает практическим пределом 1 эксбибайт (EiB) . [13] Максимальные пределы размера файла, каталога и файловой системы растут, по крайней мере, пропорционально размеру блока файловой системы до максимального размера блока в 64 КиБ, доступного на процессорах ARM и PowerPC / Power ISA .
Экстенты
Экстенты заменяют традиционную схему отображения блоков , используемую ext2 и ext3. Экстент — это диапазон смежных физических блоков, повышающий производительность при работе с большими файлами и уменьшающий фрагментацию. Один экстент в ext4 может отображать до 128  МБ непрерывного пространства с размером блока 4 КиБ. [4] Непосредственно в индексном дескрипторе может храниться четыре экстента . Если в файле более четырех экстентов, остальные экстенты индексируются в дереве . [14]
Обратная совместимость
ext4 обратно совместим с ext3 и ext2 , что позволяет монтировать ext3 и ext2 как ext4. Это немного повысит производительность, поскольку некоторые новые функции реализации ext4 также можно использовать с ext3 и ext2, например, новый алгоритм выделения блоков, не затрагивая формат на диске.
ext3 частично совместим с ext4. На практике ext4 не будет монтироваться как файловая система ext3 из коробки, если при ее создании не будут отключены некоторые новые функции, такие как ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlinkи ^extra_isize. [15]
Постоянное предварительное распределение
ext4 может заранее выделить место на диске для файла. Для этого в большинстве файловых систем при создании файла в файл записываются нули. В ext4 (и некоторых других файловых системах, таких как XFS ) fallocate()можно использовать новый системный вызов в ядре Linux. Выделенное пространство будет гарантированным и, вероятно, непрерывным. В этой ситуации есть приложения для потоковой передачи мультимедиа и баз данных.
Отложенное размещение
ext4 использует метод повышения производительности, называемый выделением при сбросе , также известный как отложенное выделение . То есть ext4 задерживает выделение блоков до тех пор, пока данные не будут сброшены на диск; напротив, некоторые файловые системы выделяют блоки немедленно, даже когда данные попадают в кэш записи. Отложенное выделение повышает производительность и уменьшает фрагментацию за счет эффективного одновременного выделения больших объемов данных.
Неограниченное количество подкаталогов
ext4 не ограничивает количество подкаталогов в одном каталоге, за исключением внутреннего ограничения размера самого каталога. (В ext3 каталог может иметь не более 32 000 подкаталогов.) [16] [ устаревший источник ] Чтобы обеспечить возможность использования больших каталогов и непрерывной производительности, ext4 в Linux 2.6.23 и более поздних версиях включает индексы HTree (специализированную версию B-дерева). ) по умолчанию, что позволяет хранить каталоги примерно с 10–12 миллионами записей в двухуровневом индексе HTree и ограничением размера каталога 2 ГБ для размера блока 4 КиБ, в зависимости от длины имени файла. В Linux 4.12 и более поздних версиях эта функция включала трехуровневое HTree и размеры каталогов более 2 ГБ, что позволяло содержать около 6 миллиардов записей в одном каталоге.large_dir
Контрольные суммы журнала
ext4 использует контрольные суммы [17] в журнале для повышения надежности, поскольку журнал является одним из наиболее часто используемых файлов диска. У этой функции есть побочное преимущество: она позволяет безопасно избежать ожидания дискового ввода-вывода во время ведения журнала, немного повышая производительность. Контрольная сумма журнала была вдохновлена ​​исследовательской статьей Университета Висконсина под названием «Файловые системы IRON» [18] с изменениями в реализации составных транзакций, выполняемых файловой системой IRON (первоначально предложенной Сэмом Нагшинехом на саммите RedHat) .
Контрольная сумма метаданных
Начиная с ядра Linux 3.5, выпущенного в 2012 году. [19] [20]
Ускоренная проверка файловой системы
В ext4 нераспределенные группы блоков и разделы таблицы индексных дескрипторов помечены как таковые. Это позволяет e2fsck полностью их пропускать и значительно сокращает время проверки файловой системы. Linux 2.6.24 реализует эту функцию.
Зависимость времени fsck от количества индексных дескрипторов ( ext3 или ext4)
Многоблочный распределитель
Когда ext3 добавляется к файлу, она вызывает распределитель блоков один раз для каждого блока. Следовательно, если одновременно существует несколько записывающих устройств, файлы на диске могут легко фрагментироваться . Однако ext4 использует отложенное выделение, что позволяет буферизовать данные и выделять группы блоков. Следовательно, многоблочный распределитель может сделать лучший выбор при последовательном размещении файлов на диске. Многоблочный распределитель также можно использовать, когда файлы открываются в режиме O_DIRECT. Эта функция не влияет на формат диска.
Улучшенные временные метки
Поскольку компьютеры в целом становятся быстрее, а Linux все чаще используется для критически важных приложений, детализация временных меток, основанных на секундах, становится недостаточной. Чтобы решить эту проблему, ext4 предоставляет временные метки , измеряемые в наносекундах . Кроме того, к старшим битам поля секунд временных меток добавляются 2 бита расширенного поля временной метки, чтобы отложить проблему 2038 года еще на 408 лет. [3]
ext4 также добавляет поддержку временных меток времени создания. Но, как отмечает Теодор Ц'о , хотя добавить дополнительное поле даты создания в индексный дескриптор легко (таким образом технически обеспечивая поддержку этих временных меток в ext4), сложнее изменить или добавить необходимые системные вызовы . например stat() (для которого, вероятно, потребуется новая версия) и различные библиотеки , которые от них зависят (например, glibc ). Эти изменения потребуют координации многих проектов. [21] Таким образом, дата создания, хранящаяся в ext4, в настоящее время доступна только для пользовательских программ в Linux через statx()API. [22]
Квоты проекта
Поддержка квот проекта была добавлена ​​в ядро ​​Linux 4.4 8 января 2016 года. Эта функция позволяет назначать ограничения дисковых квот определенному идентификатору проекта. Идентификатор проекта файла представляет собой 32-битное число, хранящееся в каждом файле и наследуемое всеми файлами и подкаталогами, созданными в родительском каталоге с назначенным идентификатором проекта. Это позволяет назначать ограничения квот конкретному дереву подкаталогов независимо от прав доступа к файлу, например квоты для пользователей и проектов, которые зависят от UID и GID. Хотя это похоже на квоту каталога, основное отличие состоит в том, что один и тот же идентификатор проекта может быть назначен нескольким каталогам верхнего уровня и не является строго иерархическим. [23]
Прозрачное шифрование
Поддержка прозрачного шифрования была добавлена ​​в ядро ​​Linux 4.1 в июне 2015 года. [24]


Ленивая инициализация
Функция lazyinit позволяет очищать таблицы индексных дескрипторов в фоновом режиме, ускоряя инициализацию при создании новой файловой системы ext4. [25] Он доступен с 2010 года в ядре Linux версии 2.6.37. [26]
Напишите барьеры
ext4 по умолчанию включает барьеры записи. Это гарантирует, что метаданные файловой системы правильно записываются и упорядочиваются на диске, даже когда кэши записи теряют мощность. Это связано с потерей производительности, особенно для приложений, которые интенсивно используют fsync или создают и удаляют множество небольших файлов. Для дисков с кэшем записи с батарейным питанием отключение барьеров (параметр «barrier=0») может безопасно повысить производительность. [27]

Ограничения

В 2008 году главный разработчик файловых систем ext3 и ext4 Теодор Цо заявил, что, хотя ext4 имеет улучшенные функции, это не является серьезным достижением, она использует старую технологию и является временным решением. Цо считает, что Btrfs — лучшее направление, поскольку «он предлагает улучшения в масштабируемости, надежности и простоте управления». [28] Btrfs также имеет «ряд тех же дизайнерских идей, что и reiser3 / 4 ». [29] Однако ext4 продолжает получать новые функции, такие как шифрование файлов и контрольные суммы метаданных.

Файловая система ext4 не учитывает атрибут файла «безопасное удаление» , который должен вызывать перезапись файлов при удалении. Патч для реализации безопасного удаления был предложен в 2011 году, но не решил проблему попадания конфиденциальных данных в журнал файловой системы. [30]

Задержка выделения и потенциальная потеря данных

Поскольку отложенное выделение меняет поведение, на которое программисты полагались при использовании ext3, эта функция создает дополнительный риск потери данных в тех случаях, когда система выходит из строя или теряет питание до того, как все данные будут записаны на диск. По этой причине ext4 в ядрах версий 2.6.30 и более поздних автоматически обрабатывает эти случаи так же, как это делает ext3.

Типичный сценарий, в котором это может произойти, — это программа, заменяющая содержимое файла без принудительной записи на диск с помощью fsync . Существует два распространенных способа замены содержимого файла в системах Unix: [31]

В этом случае существующий файл обрезается в момент открытия (из-за O_TRUNCфлага), затем записываются новые данные. Поскольку запись может занять некоторое время, существует вероятность потери содержимого даже при использовании ext3, но обычно она очень мала. Однако, поскольку ext4 может надолго задерживать запись данных файла, эта возможность намного больше.
Есть несколько проблем, которые могут возникнуть:
  1. Если запись не увенчалась успехом (что может быть связано с ошибками в программе записи или из-за внешних условий, таких как полный диск), то как исходная, так и новая версия файла будут потеряны, и файл может быть поврежден, поскольку написана только часть.
  2. Если другие процессы обращаются к файлу во время его записи, они видят поврежденную версию.
  3. Если другие процессы открывают файл и не ожидают изменения его содержимого, эти процессы могут завершиться сбоем. Ярким примером является файл общей библиотеки, который отображается в запущенные программы.
Из-за этих проблем часто следующая идиома предпочтительнее приведенной выше:
Создается новый временный файл («file.new»), который изначально содержит новое содержимое. Затем новый файл переименовывается поверх старого. Замена файлов при rename()вызове гарантированно будет атомарной по стандартам POSIX – т.е. либо старый файл остается, либо он перезаписывается новым. Поскольку «упорядоченный» режим журналирования ext3 по умолчанию гарантирует, что данные файла записываются на диск раньше метаданных, этот метод гарантирует, что либо старое, либо новое содержимое файла сохранится на диске. отложенное выделение ext4 нарушает это ожидание, поскольку запись файла может быть отложена на долгое время, а переименование обычно выполняется до того, как новое содержимое файла достигнет диска.

Использование fsync()более частого использования для снижения риска для ext4 может привести к снижению производительности файловых систем ext3, смонтированных с этим data=orderedфлагом (по умолчанию в большинстве дистрибутивов Linux). Учитывая, что обе файловые системы будут использоваться в течение некоторого времени, это усложняет задачу для разработчиков приложений для конечных пользователей. В ответ ext4 в ядрах Linux 2.6.30 и новее обнаруживает возникновение этих распространенных случаев и принудительно выделяет файлы немедленно. При небольших затратах производительности это обеспечивает семантику, аналогичную упорядоченному режиму ext3, и увеличивает вероятность того, что любая версия файла переживет сбой. Это новое поведение включено по умолчанию, но его можно отключить с помощью параметра монтирования noauto_da_alloc. [31]

Новые патчи стали частью основного ядра 2.6.30, но различные дистрибутивы решили перенести их на версии 2.6.28 или 2.6.29. [32]

Эти исправления не полностью предотвращают потенциальную потерю данных и вообще не помогают с новыми файлами. Единственный способ обезопасить себя — писать и использовать программное обеспечение, которое срабатывает fsync()тогда, когда это необходимо. Проблемы с производительностью можно свести к минимуму, ограничив важные записи на диск, которые должны fsync()происходить реже. [33]

Выполнение

Упрощенная структура ядра Linux: ext4 реализован между виртуальной файловой системой ядра Linux и уровнем общих блоков.

Виртуальная файловая система ядра Linux — это подсистема или уровень внутри ядра Linux. Это результат очень серьезной попытки объединить несколько файловых систем в единую упорядоченную структуру. Ключевая идея, восходящая к новаторской работе, проделанной сотрудниками Sun Microsystems в 1986 году [34], состоит в том, чтобы абстрагировать ту часть файловой системы, которая является общей для всех файловых систем, и поместить этот код в отдельный уровень, который вызывает базовые конкретные файловые системы для фактического управления данными.

Все системные вызовы, связанные с файлами (или псевдофайлами), направляются в виртуальную файловую систему ядра Linux для первоначальной обработки. Эти вызовы, исходящие от пользовательских процессов, являются стандартными вызовами POSIX, такими как open, read, write, lseekи т. д.

Совместимость с Windows и Macintosh

В настоящее время ext4 имеет полную поддержку в операционных системах, отличных от Linux.

Microsoft Windows может получить доступ к ext4 начиная с Windows 10 Insider Preview Build 20211 . [35] [36] [37] Это возможно благодаря подсистеме Windows для Linux (WSL), которая была представлена ​​в юбилейном обновлении Windows 10 (версия 1607) 2 августа 2016 года. WSL доступен только в 64-разрядных версиях Windows 10. начиная с версии 1607. Он также доступен в Windows Server 2019. Большие изменения в архитектуре WSL произошли с выпуском WSL 2 12 июня 2019 года. [38] Для WSL 2 требуется Windows 10 версии 1903 или выше, со сборкой 18362 или выше. для систем x64 и версии 2004 или выше, со сборкой 19041 или выше, для систем ARM64. [39]

Paragon предлагает свой коммерческий продукт Linux File Systems для Windows [40] , который обеспечивает возможности чтения/записи ext2/3/4 в Windows 7 SP1/8/8.1/10 и Windows Server 2008 R2 SP1/2012/2016.

macOS имеет полную возможность чтения и записи ext2/3/4 через extFS для Mac от Paragon Software, [41] которая является коммерческим продуктом. Бесплатное программное обеспечение, такое как ext4fuse, имеет поддержку только для чтения с ограниченной функциональностью.

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

Рекомендации

  1. ^ ab Раньше Linux использовал тот же GUID для разделов данных, что и Windows (базовый раздел данных: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 ). В Linux никогда не было отдельного уникального GUID типа раздела, определенного для разделов данных. Это создавало проблемы при двойной загрузке Linux и Windows в настройке UEFI-GPT. Новый GUID (данные файловой системы Linux: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 ) был определен совместно разработчиками GPT fdisk и GNU Parted. В GPT fdisk он идентифицируется как код типа 0x8300 . (См. определения в parttypes.cc gdisk)
  2. ^ "DiscoverablePartitionsSpec". сайт freedesktop.org . Проверено 7 апреля 2018 г.
  3. ^ ab «ext4: исправлена ​​обработка расширенного tv_sec». Дерево стабильного ядра Linux . Проверено 14 февраля 2017 г.
  4. ^ аб Матур, Авантика; Цао, МинМин; Бхаттачарья, Супарна ; Дилгер, Андреас; Журавлев (Томас), Алексей; Вивье, Лоран (2007). «Новая файловая система ext4: текущее состояние и планы на будущее» (PDF) . Материалы симпозиума Linux . Оттава, Онтарио, Калифорния: Red Hat. Архивировано из оригинала (PDF) 6 июля 2010 года . Проверено 15 января 2008 г.
  5. Торвальдс, Линус (9 июня 2006 г.). «расширения и 48-битный ext3». Список рассылки ядра Linux .
  6. Цо, Теодор (28 июня 2006 г.). «Предложение и план будущих разработок ext2/3». Список рассылки ядра Linux .
  7. ^ Лемхейс, Торстен (23 декабря 2008 г.). «Выше и дальше: Нововведения Linux 2.6.28 (стр. 2)». Хейзе Онлайн. Архивировано из оригинала 3 января 2009 года . Проверено 9 января 2010 г.
  8. ^ «ext4: переименуйте ext4dev в ext4». Дерево ядра Линуса. Архивировано из оригинала 29 мая 2012 года . Проверено 20 октября 2008 г.
  9. ^ Лемхейс, Торстен (23 декабря 2008 г.). «Выше и дальше: Нововведения Linux 2.6.28». Хейзе Онлайн.
  10. Пол, Райан (15 января 2010 г.). «Google переходит на Ext4, нанимает бывшего технического директора Linux Foundation». Арс Техника .
  11. ^ «Android 2.3 Gingerbread для использования файловой системы Ext4» . H Открыть . 14 декабря 2010 г.
  12. ^ «Файловая система в Debian». 14 сентября 2019 г.
  13. ^ «ext4 — Дизайн высокого уровня» . ядро.орг . Проверено 8 декабря 2023 г.
  14. Померанц, Хэл (28 марта 2011 г.). «Понимание EXT4 (Часть 3): Деревья экстента». Блог SANS по цифровой криминалистике и реагированию на инциденты . Архивировано из оригинала 18 августа 2019 года.
  15. ^ «Монтирование ext4 (созданного без экстентов), поскольку ext3 не работает на RH6.2» . www.linuxquestions.org . Архивировано из оригинала 5 августа 2023 года . Проверено 8 декабря 2023 г.
  16. ^ «Ext4 — новички в ядре Linux» . kernelnewbies.org .
  17. ^ «Новые функции ext4 — Ext4» . ext4.wiki.kernel.org . Архивировано из оригинала 23 сентября 2023 года . Проверено 8 декабря 2023 г.
  18. ^ Прабхакаран, Виджаян; Байравасундарам, Лакшми Н.; Агравал, Нитин; Гунави, Харьяди С.; Арпачи-Дюссо, Андреа К.; Арпачи-Дюссо, Ремзи Х. (октябрь 2005 г.). Файловые системы IRON (PDF) . Симпозиум по принципам операционных систем (SOSP '05). Брайтон, Великобритания: Кафедра CS, Университет Висконсина. Раздел 6.1, пункт 5 «Транзакционные контрольные суммы» . Проверено 8 декабря 2023 г.
  19. ^ «Контрольные суммы метаданных Ext4 — Ext4» . ext4.wiki.kernel.org . Архивировано из оригинала 6 ноября 2023 года . Проверено 8 декабря 2023 г.
  20. ^ «Linux_3.5 — Новички в ядре Linux» . kernelnewbies.org .
  21. Цо, Теодор (5 октября 2006 г.). «Re: отметки времени создания для ext4?».
  22. Эдж, Джейк (31 марта 2017 г.). «Расширение statx()». Архивировано из оригинала 20 сентября 2023 года . Проверено 8 декабря 2023 г.
  23. Ли, Си (12 января 2016 г.). «ext4: добавить поддержку квот проекта» (список рассылки). Архивировано из оригинала 20 сентября 2023 года . Проверено 8 декабря 2023 г.
  24. Цо, Теодор (8 апреля 2015 г.). «Шифрование Ext4». Архивировано из оригинала 12 октября 2023 года . Проверено 8 декабря 2023 г.
  25. ^ «Файловая система Ext4». Томас-Кренн-Вики . Архивировано из оригинала 14 февраля 2022 года . Проверено 8 декабря 2023 г.
  26. ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux». git.kernel.org .
  27. ^ "Ext4 -". АрчВики .
  28. Пол, Райан (14 апреля 2009 г.). «Участники дискуссии размышляют о ядре на саммите Linux Collaboration Summit». Арс Техника . Проверено 22 августа 2009 г.
  29. ^ Теодор Цо (1 августа 2008 г.). «Re: reiser4 для 2.6.27-rc1». linux-kernel (список рассылки) . Проверено 31 декабря 2010 г.
  30. Корбет, Джонатан (11 октября 2011 г.). «Безопасное удаление файлов из файловых систем ext4».
  31. ^ ab «Документация ext4 в исходном коде ядра Linux». 28 марта 2009 г.
  32. ^ Ошибка Ubuntu № 317781 Долгая дискуссия между разработчиками Ubuntu и Теодором Цо о потенциальной потере данных.
  33. Мысли Теда, запись в блоге, 12 марта 2009 г. Сообщение в блоге Теодора Цо на эту тему.
  34. ^ Клейман
  35. Брэндон ЛеБлан (10 сентября 2020 г.). «Анонсируем сборку Windows 10 Insider Preview Build 20211». Блоги Windows . Проверено 25 мая 2021 г.
  36. Пьер Буле (10 сентября 2020 г.). «Доступ к файловым системам Linux в Windows и WSL 2». Командная строка Windows . Проверено 25 мая 2021 г.
  37. ^ «Начните монтировать диск Linux в WSL 2» . Документы Майкрософт . Проверено 25 мая 2021 г.
  38. Крейг Лоуэн (12 июня 2019 г.). «WSL 2 теперь доступен в программе предварительной оценки Windows». Командная строка Windows . Проверено 25 мая 2021 г.
  39. ^ «Руководство по установке подсистемы Windows для Linux для Windows 10» . Документы Windows . Проверено 25 мая 2021 г.
  40. ^ «Файловые системы Linux для Windows». Программное обеспечение Парагон . Проверено 25 мая 2021 г.
  41. ^ «extFS для Mac». Программное обеспечение Парагон . Проверено 25 мая 2021 г.

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