Файловая система Ext4

В большинстве современных дистрибутивов Linux по умолчанию используется файловая система Ext4. В предыдущих версиях использовалась Ext3, ещё раньше Ext2 и если вернуться достаточно далеко, то и Ext. Без сомнения, на момент написания статьи, это самая популярная файловая система для Linux.

В этой статье мы поговорим об истории развития Ext4, разберемся чем она отличается от Ext, Ext2 и Ext3, с чего всё началось, а также рассмотрим основные возможности этой файловой системы в наше время.

Краткая история Ext4

Прежде чем появилась файловая система Ext существовала файловая система MINIX. Если вы не знакомы с историей развития Unix, раньше существовала небольшая операционная система MINIX, которая работала на IBM PC. Эндрю Танненбаум разработал её для обучения и выпустил исходный код в 1987 году.

Эта операционная система не была бесплатной. Она прилагалась к книге, которая стояла 69 долларов. Однако, это было не очень дорого, поэтому девяностых годах MINIX начали внедрять повсеместно. Благодаря чему молодой Линус Торвальдс разработал своё ядро Linux на основе MINIX и выпустил его в 1992 году.

Так вот. У MINIX была своя файловая система, которую и использовали первые версии Linux. Она могла работать с хранилищами до 64 мегабайт, а размер имён файлов не мог превышать 14 символов. В 1991 году средний размер жестких дисков был 40-140 мегабайт, поэтому для Linux было нужно что-нибудь другое.

Именно по этой причине Реми Кард в 1992 году разработал первую файловую систему семейства Ext. Она решала большинство проблем MINIX. Новая файловая система использовала новую прослойку VFS в ядре Linux и теперь могла работать с дисками до 2 гигабайт, а имена файлов могли состоять из 255 символов. Но у Ext был один недостаток. Она имела только одну временную метку для файла, вместо теперешних трёх: даты создания, даты доступа и даты модификации.

Реми Кард очень быстро создал Ext, и за следующий год он разработал Ext2 для её замены. Это уже была серьёзная файловая система коммерческого уровня. Она была быстро реализована в ядре Linux и MINIX, а затем и внешних модулях, которые сделали её доступной для Windows и MacOS. Здесь были снова увеличены лимиты файловой системы, однако у неё оставалась ещё одна проблема. Как и все файловые системы того времени, при выключении питания в момент записи файловая система становилась неработоспособной.

Чтобы это исправить в была разработана Ext3. Она уже использовала журналирование, как и файловая система от Microsoft - NTFS. Журнал, это специальное место на диске, куда записываются все операции с файловой системой. При чём для самой файловой системы они применяются только после того, как будут полностью записаны на диск. Если возникает ошибка, то файловая система просто откатывается до предыдущей версии из журнала. Для Ext4 существует три уровня работы с журналированием:

  • Журнал - самый безопасный режим. В журнал записываются данные и метаданные, перед тем, как они будут сохранены на диск. Это обеспечивает полную сохранность записываемого файла, но снижает производительность.
  • Упорядоченный - этот режим используется по умолчанию во многих дистрибутивах. Метаданные записываются в журнал, но данные для записи сразу же записываются в файловую систему. Тут порядок работы такой: сначала метаданные записываются в журнал, затем данные записываются в файловую систему, и только после этого метаданные тоже записываются в файловую систему. При сбое новые метаданные находятся только в журнале и файловая система может очень просто восстановится, будут повреждены только те файлы, которые записываются в момент сбоя, все остальные останутся впорядке.
  • Обратная запись - менее безопасный метод журналирования. Здесь в журнал тоже запиваются только метаданные, но в файловую систему они могут записываться вместе с данными, для улучшения производительности. Несмотря на то, что файлы, записываемые во время сбоя могут быть утеряны, для файловой системы в целом этот режим гарантирует безопасность.

Как и в Ext2, в Ext3 используется 16-ти битная адресация, это значит, что при размере блока 4 килобайта самый большой файл может иметь размер 2 терабайта, а максимальный размер файловой системы - 16 терабайт.

Файловая система Ext4 была анонсирована в 2006 году и ею занимался уже другой разработчик. Его имя Теодор Цо. Журналирование Ext4 тоже поддерживается. В ядро Linux эта файловая система попала спустя два года после анонса. Файловая система значительно расширила возможности Ext4, но по прежнему опиралась на старую технологию.

Ext4 была совместима с Ext3 и старую файловую систему можно было с легкостью конвертировать в новую. Кроме того, драйвер Ext4 может монтировать файловую систему в режиме Ext3, поэтому теперь нет необходимости поддерживать две отдельных кодовых базы.

Новая версия уже использует 48-битную адресацию, поэтому максимальный размер файла может быть 16 терабайта, а файловой системы один экзабайт. Первые версии Ext4 все ещё были ограничены размером раздела в 16 терабайт, но в 2011 году в утилитах из пакета e2fsprogs появилась поддержка файловых систем размером больше 16 терабайт.

Ещё одно улучшение по сравнению с Ext3 - это то, что блоки данных выделяются до записи их на диск, что тоже значительно увеличивает как производительность чтения так и записи. Кроме того, в файловую систему были добавлены екстенты. Это блоки до 128 мегабайт, которые можно резервировать и обращаться к ним по одному адресу. Это уменьшает количество Inode необходимых для записи одного файла, а также увеличивает производительность.

Одним из ограничений Ext3 была максимальная вложенность подкаталогов - 32 000. Начиная с ядра 2.6.23 в Ext4 улучшена работа с большим количеством подкаталогов и теперь их может быть неограниченное количество.

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

Разработка Ext4

Несмотря на то, что файловая система очень старая по меркам компьютерной индустрии, она всё ещё активно разрабатывается, хотя её разработчики и рассматривают эту файловую систему как временную, пока её не заменит файловая система следующего поколения. Есть ещё несколько вещей, которые активно разрабатываются.

Разработчики хотят научить файловую систему считать контрольные суммы для метаданных. Это позволит выявлять повреждённые суперблоки и использовать вместо них альтернативные. Сейчас это можно сделать только вручную. Ещё один момент, который хотят улучшить разработчики - это квоты. Сейчас они находятся в пространстве пользователя, но их надо перенести в ядро чтобы улучшить производительность. Кроме того надо увеличить максимальный размер блока. В наше время SSD уже используют размер блока в 8 килобайт, а Ext4 все ещё может выделять блоки до 4 килобайт. Это ещё больше уменьшит фрагментацию и улучшит производительность.

Плюсы и минусы Ext4

К плюсам этой файловой системы можно отнести такие её особенности:

  • Журналирование;
  • Поддержка шифрования;
  • Высокая стабильность, так как она проверена временем;
  • Поддержка по умолчанию во многих дистрибутивах;
  • Активная разработка;
  • Не подвержена фрагментации;
  • Лимитов вполне достаточно обычному пользователю, так и для серверных систем;

Минусов у файловой системы тоже хватает:

  • Не поддерживаются функции файловых систем следующего поколения, такие как управление томами, дедупликация данных;
  • Отсутствие проверки контрольных сумм для данных, что делает невозможным обнаружение повреждения данных из-за аппаратных сбоев оборудования.
  • Плохая масштабируемость. Несмотря на то, что заявленный максимальный размер раздела один экзабайт, на деле лучше не создавать разделы больше 50 - 100 терабайт.

Использование Ext4

Я уже подробно рассказывал как создавать разделы Ext3 и Ext4 в отдельной статье. Сегодня я упомяну об этом только кратко. Чтобы создать раздел Ext4 выполните:

sudo mkfs -t ext4 /dev/sdb1

Здесь /dev/sdb1 - имя вашего раздела, на котором надо создать файловую систему. Куда интереснее разобраться с опциями монтирования Ext4:

  • atime/noatime - обновлять или не обновлять временную метку последнего доступа к файлам;
  • journal_checksum/nojournal_checksum - добавляет контрольные суммы для записей журнала, это позволяет лучше находить повреждения;
  • barrier/nobarier - сбрасывать данные на диск, прежде, чем применять изменения для метаданных файловой системы. По умолчанию включено;
  • min_batch_time - время между сбросами данных на жесткий диск. По умолчанию 0 миллисекунд. Увеличение этого параметра улучшит пропускную способность файловой системы, но увеличит задержки;
  • discard/nodiscard - определяет надо ли выполнять команду discard/trim для диска при освобождении блоков, полезно для SSD, выключено по умолчанию;
  • max_dir_size_kb - максимальный размер одной папки в килобайтах;
  • data - определяет режим журналирования, о котором мы говорили выше: journal, ordered, writeback. По умолчанию используется ordered;
  • acl/noacl - включает или отключает поддержку ACL списков
  • quota - включает поддержку управления квотами в файловой системе, для управления используются специальные утилиты;
  • commit - записывать изменения сохраненные в журнале в файловую систему каждые n секунд. По умолчанию - каждые 5 секунд;
  • errors - указывает что надо делать при ошибке. Доступные значения: ontinue, remount-ro, panic.

Здесь перечислены далеко не все опции, а только самые интересные. Более подробное описание опций монтирования смотрите выполнив команду:

man ext4

Монтирование Ext4 выполняется с помощью команды mount:

sudo mount /dev/sdb1 /mnt

Во время монтирования можно указать желаемые опции, например:

sudo mount -o data=journal,commit=60,noatime /dev/sdb1 /mnt

Например, здесь мы включили максимальный уровень журналирования, увеличили время между записями данных в файловую систему из журнала до 60 секунд, а также отключили обновление метки atime. Аналогично, опции можно задать в /etc/fstab. Для этого добавьте их в четвертую колонку строки монтирования диска:

/dev/sdb1 / ext4 defaults,data=journal,commit=60,noatime 1 0

Параметр defaults удалять не следует, просто добавляйте нужные вам опции после него.

Выводы

В этой статье мы рассмотрели историю файловой системы Ext4, а также её основные опции, монтирования, а также как и где их указывать. Про настройку Ext4 уже подробно рассказано в другой статье, поэтому здесь я решил не повторяться. А какие опции монтирования используете вы? Напишите в комментариях!

7 комментариев

  1. Аватар Александр 21 сентября, 2020 Ответить
  2. Аватар Максим 21 сентября, 2020 Ответить
  3. Аватар Дмитрий 21 сентября, 2020 Ответить
  4. Аватар Руслан 22 сентября, 2020 Ответить
  5. Аватар Александр 22 сентября, 2020 Ответить
  6. Аватар Madesta 29 сентября, 2020 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: