Файловая система ext4 что это такое
Операционная система Windows может быть установлена только на файловую систему NTFS, поэтому обычно у пользователей не возникает вопросов какую ФС лучше использовать. Но Linux очень сильно отличается, здесь в ядро системы встроены и могут использоваться несколько файловых систем, каждая из которых оптимизирована для решения определенных задач и лучше подходит именно для них.
Новые пользователи не всегда понимают что такое раздел жесткого диска и файловая система. В нашей сегодняшней статье мы попытаемся разобраться во всех этих понятиях, рассмотрим что такое файловая система, а также рассмотрим самые распространенные типы файловых систем Linux. Но начнем с самых основ, разделов диска.
4. Экстенты
Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно.
В современных файловых системах применяется иной подход, основанный на так называемых экстентах. Экстент — это в общем-то набор последовательных физических блоков. Он как бы говорит нам: «Эти данные находятся в следующих n блоках». Например, файл размером в 100 мегабайт может храниться в единственном экстенте такого же размера, вместо того, чтобы быть разбитым на 25600 4-килобайтных блоков, адресуемых путём непрямого отображения. Огромные файлы можно разделить на несколько экстентов.
Благодаря применению экстентов улучшается производительность, а также уменьшается фрагментированность, поскольку экстенты способствуют непрерывному размещению данных.
6. Отложенное распределение
Отложенное распределение представляет собой способ повышения производительности, не влияющий на формат данных и представленный в современных файловых системах, таких как XFS, ZFS, btrfs и Reiser 4.
Суть этого метода состоит в отсрочке выделения блоков насколько это возможно — по контрасту с подходом, применямым в традиционных файловых системах (таких как Ext3, reiser3 и т. д.): распределять блоки сразу, при первой возможности. Например, если процесс осуществляет запись вызовом write(), файловая система распределит блоки под запись немедленно — даже если данные пока не будут записываться на диск, а будут находиться какое-то время в кэше. Недостатки такого подхода, например, в том, что, если процесс непрерывно осуществляет запись в растущий файл, последовательные вызовы write() постоянно распределяют блоки данных, и при этом неизвестно, будет ли файл расти далее.
При использовании отложенного распределения блоки сразу не выделяются при обращении к write(). Вместо этого распределение откладывается до момента, когда файл будет записан из кэша на диск. Благодаря этому механизм получает возможность оптимизировать процесс распределения. Наибольший выигрыш получается при использовании двух ранее упомянутых возможностей — экстентов и многоблочного распределения, поскольку часто встречается ситуация, когда окончательный файл пишется на диск в виде экстентов, распределённых с помощью mballoc. Это даёт существенный прирост производительности, и иногда сильно снижает фрагментированность данных.
13. Механизм «шлагбаумов» по умолчанию включен
Это опция, обеспечивающая целостность файловой системы ценой некоторой потери производительности (её можно отключить с помощью «mount -o barrier=0», рекомендуется сделать это при замерах производительности).
Выдержка из статьи LWN: «Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени».
XFS — начало разработки 1993 год, фирма Silicon Graphics, в мае 2000 года предстала в GNU GPL, для пользователей большинства Linux систем стала доступна в 2001-2002 гг. Отличительная черта системы — прекрасная поддержка больших файлов и файловых томов, 8 эксбибайт — 1 байт (8*2 60 -1 байт) для 64-х битных систем. Ко всему прочему обладает другими немаловажными особенностями — непрерывные области дискового пространства, задержка выделения пространства и онлайн дефрагментация. Является одной из старейших журналируемых файловых систем для *nix, и содержит в себе наиболее отлаженный, в этом контексте, исходный код.
ReiserFS (Reiser3) — одна из первых журналируемых файловых систем под Linux, разработана Namesys. Имеет некоторые врождённые головные боли, но в целом неплохая система, ведущая отсчёт дней своих с 2001 года. Оговорюсь, что смысл журналируемых систем заключается в дисковых транзакциях, которые последовательно пишутся в специальную зону диска (журнал, он же лог), перед тем как данные попадают в конечные точки файловой системы. Максимальный объём тома для этой системы равен 16 тебибайт (16*2 40 байт).
JFS (Journaled File System) — файловая система, детище IBM, явившееся миру в далёком 1990 году для ОС AIX (Advanced Interactive eXecutive). В виде первого стабильного релиза, для пользователей Linux, система стала доступна в 2001 году. Из плюсов системы — неплохая масштабируемость. Из минусов — не особо активная поддержка на протяжении всего жизненного цикла. Максимальный рамер тома 32 пэбибайта (32*2 50 байт).
ext (extended filesystem) — появилась в апреле 1992 года, это была первая файловая система, изготовленная специально под нужды Linux ОС. Разработана Remy Card с целью преодолеть ограничения файловой системы Minix.
ext2 (second extended file system) — была разработана Remy Card в 1993 году. Не журналируемая файловая система, это был основной её недостаток, который исправит ext3.
ext3 (third extended filesystem) — по сути расширение исконной для Linux ext2, способное к журналированию. Разработана Стивеном Твиди (Stephen Tweedie) в 1999 году, включена в основное ядро Linux в ноябре 2001 года. На фоне других своих сослуживцев обладает более скромным размером пространства, до 4 тебибайт (4*2 40 байт) для 32-х разрядных систем. На данный момент является наиболее стабильной и поддерживаемой файловой системой в среде Linux.
Reiser4 — первая попытка создать файловую систему нового поколения для Linux. Впервые представленная в 2004 году, система включает в себя такие передовые технологии как транзакции, задержка выделения пространства, а так же встроенная возможность кодирования и сжатия данных. Ханс Рейзер (Hans Reiser), главный разработчик системы, рекламировал использовать своё детище непосредственно как БД с улучшенными метаданными. После того, как Ханс Рейзер был осуждён за убийство в 2008 году, дальнейшая судьба системы стала сомнительной.
ext4 — попытка создать 64-х битную ext3 способную поддерживать больший размер файловой системы (1 эксбибайт). Позже добавились возможности — непрерывные области дискового пространства, задержка выделения пространства, онлайн дефрагментация и прочие. Обеспечивается прямая совместимость с системой ext3 и ограниченная обратная совместимость при недоступной способности к непрерывным областям дискового пространства.
UPD: Btrfs (B-tree FS или Butter FS) — проект изначально начатый компанией Oracle, впоследствии поддержанный большинством Linux систем. Многие считаеют систему эдаким ответом на ZFS. Ключевыми особенностями данной файловой системы являются технологии: copy-on-write, позволяющая сделать снимки областей диска (снапшоты), которые могут пригодится для последующего восстановления; контроль за целостностью данных и метаданных (с повышенной гарантией целостности); сжатие данных; оптимизированный режим для накопителей SSD (задаётся при монтировании) и прочие. Немаловажным фактором является возможность перехода с ext3 на Btrfs. С августа 2008 года данная система выпускается под GNU GPL.
Tux2 — известная, но так и не анонсированная публично файловая система. Создатель Дэниэл Филипс (Daniel Phillips), система базируется на алгоритме «Фазового Дерева», который как и журналирование защищает файловую систему от сбоев. Организована как надстройка на ext2.
Tux3 — наступая на пятки Btrfs, представлена новая файловая система. Система создана на основе FUSE (Filesystem in Userspace), специального модуля для создания файловых систем на *nix платформах. Данный проект ставит перед собой цель избавиться от привычного журналирования, взамен предлагая версионное восстановление (состояние в определённый промежуток времени). Преимуществом используемой в данном случае версионной системы, является способ описания изменений, где для каждого файла создаётся изменённая копия, а не переписывается текущая версия. Такой подход позволяет более гибко управлять версиями.
UPD: Xiafs — задумка и разработка данной файловой системы принадлежат Frank Xia, основана на файловой системе MINIX. В настоящее время считается устаревшей и практически не используется. Наряду с ext2 разрабатывалась, как замена системе ext. В декабре 1993 года система была добавлена в стандартное ядро Linux. И хотя система обладала большей стабильностью и занимала меньше дискового пространства под контрольные структуры — она оказалась слабее ext2, ведущую роль сыграли ограничения максимальных размеров файла и раздела, а так же способность к дальнейшему расширению.
UPD: ZFS (Zettabyte File System) — изначально созданная в Sun Microsystems файловая система, для небезызвестной операционной системы Solaris в 2005 году. Отличительные особенности — отсутствие фрагментации данных как таковой, возможности по управлению снапшотами (snapshots), пулами хранения (storage pools), варьируемый размер блоков, 64-х разрядный механизм контрольных сумм, а так же способность адресовать 128 бит информации! В Linux системах может использоваться посредствам FUSE.
В большинстве современных дистрибутивов Linux по умолчанию используется файловая система Ext4. В предыдущих версиях использовалась Ext3, ещё раньше Ext2 и если вернуться достаточно далеко, то и Ext. Без сомнения, на момент написания статьи, это самая популярная файловая система для Linux.
В этой статье мы поговорим об истории развития Ext4, разберемся чем она отличается от Ext, Ext2 и Ext3, с чего всё началось, а также рассмотрим основные возможности этой файловой системы в наше время.
3. Масштабируемость подкаталогов
В настоящий момент один каталог Ext3 не может содержать более, чем 32000 подкаталогов. Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.
Виртуальные файловые системы
Не все файловые системы нужны в ядре. Существуют некоторые решения, которые можно реализовать и в пространстве пользователя. Разработчики ядра создали модуль FUSE ( filesystem in userspace), который позволяет создавать файловые системы в пространстве пользователя. К виртуальным файловым системам можно отнести ФС для шифрования и сетевые файловые системы.
- EncFS - файловая система, которая шифрует все файлы и сохраняет их в зашифрованном виде в нужную директорию. Получить доступ к расшифрованным данным можно только примонтировав файловую систему.
- Aufs (AnotherUnionFS) - позволяет объединять несколько файловых систем (папок) в одну общую.
- NFS (Network Filesystem) - позволяет примонтировать файловую систему удаленного компьютера по сети.
Таких файловых систем очень много, и мы не будем перечислять все их в данной статье. Есть даже очень экзотические варианты, обратите внимание на проект PIfs.
Как работает файловая система?
Если вы незнакомы с основами работы файловых систем, скажу об этом несколько слов чтобы вы смогли лучше понять, в чем разница Btrfs vs Ext4 vs XFS. Файловые системы используются для того, чтобы контролировать способ записи данных на диск, доступ к этим данным, а также хранят информацию, метаданные о файлах. Фактически, все данные в файловой системе делятся на две части - это метаданные и данные пользователя. Это не просто запрограммировать, но файловые системы постоянно совершенствуются. Постоянно дорабатывается новая функциональность, и они становятся более эффективными.
5. Многоблочное распределение
Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет в один присест только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, ранее упомянутые 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз (речь идёт о каких-то 100 мегабайтах!). Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.
Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении (см. ниже) с использованием экстентов. Эта возможность никак не влияет на формат данных.
Также можно отметить, что в механизм распределения блоков и inode в Ext4 получил и другие улучшения, подробно описанные в этом документе.
Заключение и выводы
Показатель | Ext4 | XFS | Btrfs |
Дата выхода | 1992 | 2002 | 2006 |
Максимальный размер раздела | 50-100 Тб | 8 Эб | 16 Эб |
Максимальный размер файла | 16 Тб | 8 Эб | 16 Эб |
Максимальное количество файлов | 2 в 32 степени | 2 в 64 степени | 2 в 64 степени |
Максимальная длина имени | 255 | 255 | 255 |
Прозрачное шифрование | Да | Нет | Нет |
Прозрачное сжатие | Нет | Нет | Да |
Управление томами | Нет | Нет | Да |
Дедупликация | Нет | Нет | Да |
Уменьшение размера раздела | Да | Нет | Да |
Создание снапшотов | Нет | Нет | Да |
Copy-on-write | Нет | Да | Да |
Так что же лучше использовать? До сих пор Ext4 была победителем, несмотря на идентичную производительность. Но почему? Ответ - удобство и популярность. Ext4 - по-прежнему отличная файловая система для рабочих станций и настольных компьютеров. Она поставляется по умолчанию, а потому пользователь получит её просто установив ОС. Кроме того, Ext4 поддерживает разделы до 100 терабайт и файлы до 16 терабайт, а это по-прежнему очень много. Обычным пользователям столько точно не надо.
Btrfs предлагает большие объемы до 16 экзабайт как для разделов так и для файлов, а также повышение отказоустойчивости и много дополнительных и очень интересных возможностей. Она уже интегрирована в ядро, однако её ещё многие боятся, потому что файловая система относительно новая и пока не совсем понятно чего от неё ждать.
Даже если скорость передачи данных не очень важна, есть такая характеристика, как скорость работы с файлами. В Btrfs есть много полезных функций: копирование при записи, контрольные сумы, снимки, очистка, самовосстановление данных, дедупликация, а также другие интересные улучшения, которые обеспечивают сохранность данных. В ней только недостает функции ZFS - Z-RAID, так что RAID пока находиться на экспериментальной стадии. Для обычного хранения данных Btrfs лучше подходит чем Ext4, но как будет на самом деле покажет время. Что использовать Btrfs или Ext4 - это только дело вашего вкуса.
На данный момент Ext4 - лучший выбор для обычных пользователей, так как она распространяется как файловая система по умолчанию, а также она быстрее Btrfs при передаче файлов. Btrfs, безусловно, стоит попробовать, но полностью заменять ext4 еще рано, это можно будет сделать лишь через несколько лет. Забавно, то же самое, говорили и несколько лет назад, с тех пор много чего поменялось, но Btrfs все еще не считается стабильной. Если у вас есть другое мнение по этому поводу, оставляйте комментарии!
Кстати , если вы используете Windows и Linux на одной машине, вам может быть интересна моя статья: Подключение ext4 в Windows
2. Больший размер файлов и файловой системы
Примечание: код для создания файловых систем размером более 16 терабайт на момент написания этой статьи не содержится ни в одном из стабильных релизов e2fsprogs. В будущем он будет добавлен.
Краткая история 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. Здесь были снова увеличены лимиты файловой системы, однако у неё оставалась ещё одна проблема. Как и все файловые системы того времени, при выключении питания в момент записи файловая система становилась неработоспособной.
- Журнал - самый безопасный режим. В журнал записываются данные и метаданные, перед тем, как они будут сохранены на диск. Это обеспечивает полную сохранность записываемого файла, но снижает производительность.
- Упорядоченный - этот режим используется по умолчанию во многих дистрибутивах. Метаданные записываются в журнал, но данные для записи сразу же записываются в файловую систему. Тут порядок работы такой: сначала метаданные записываются в журнал, затем данные записываются в файловую систему, и только после этого метаданные тоже записываются в файловую систему. При сбое новые метаданные находятся только в журнале и файловая система может очень просто восстановится, будут повреждены только те файлы, которые записываются в момент сбоя, все остальные останутся впорядке.
- Обратная запись - менее безопасный метод журналирования. Здесь в журнал тоже запиваются только метаданные, но в файловую систему они могут записываться вместе с данными, для улучшения производительности. Несмотря на то, что файлы, записываемые во время сбоя могут быть утеряны, для файловой системы в целом этот режим гарантирует безопасность.
Как и в Ext2, в Ext3 используется 16-ти битная адресация, это значит, что при размере блока 4 килобайта самый большой файл может иметь размер 2 терабайта, а максимальный размер файловой системы - 16 терабайт.
Файловая система Ext4 была анонсирована в 2006 году и ею занимался уже другой разработчик. Его имя Теодор Цо. Журналирование Ext4 тоже поддерживается. В ядро Linux эта файловая система попала спустя два года после анонса. Файловая система значительно расширила возможности Ext4, но по прежнему опиралась на старую технологию.
Ext4 была совместима с Ext3 и старую файловую систему можно было с легкостью конвертировать в новую. Кроме того, драйвер Ext4 может монтировать файловую систему в режиме Ext3, поэтому теперь нет необходимости поддерживать две отдельных кодовых базы.
Ещё одно улучшение по сравнению с Ext3 - это то, что блоки данных выделяются до записи их на диск, что тоже значительно увеличивает как производительность чтения так и записи. Кроме того, в файловую систему были добавлены екстенты. Это блоки до 128 мегабайт, которые можно резервировать и обращаться к ним по одному адресу. Это уменьшает количество Inode необходимых для записи одного файла, а также увеличивает производительность.
Одним из ограничений Ext3 была максимальная вложенность подкаталогов - 32 000. Начиная с ядра 2.6.23 в Ext4 улучшена работа с большим количеством подкаталогов и теперь их может быть неограниченное количество.
Скорость проверки файловой системы в Ext4 тоже увеличена. В Ext3 проверяются все файлы включая удалённые и пустые. В Ext4 же все неиспользованные блоки отмечаются и пропускаются при проверке, это очень сильно улучшает производительность. В Ext4 была добавлена дефрагментация в реальном времени. В предыдущих версиях файловой системы дефрагментация выполнялась во время монтирования или когда файловая система не смонтирована.
9. Режим без журналирования
Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности.
1. Совместимость
Любая имеющаяся файловая система типа Ext3 может быть конвертирована в Ext4 путём простой процедуры, состоящей из запуска пары команд в режиме «только чтение». Это означает, что вы можете повысить производительность и вместимость и улучшить возможности вашей имеющейся файловой системы без переформатирования и без переустановки ОС и программ. Если вы хотите получить преимущества Ext4 в production-системе, вы также можете обновить файловую систему. Эта процедура безопасна и не подвергает риску ваши данные (при этом, само собой, рекомендуется сделать резервную копию важных данных. Впрочем, это нужно делать, даже если вы не собираетесь менять файловую систему).
Ext4 будет использовать новые структуры только для новых данных, а старые при этом останутся неизменными. При необходимости их можно будет читать и изменять. Это безусловно означает, что, единожды сменив файловую систему на Ext4, вернуть Ext3 будет уже невозможно.
Также имеется возможность смонтировать файловую систему Ext3 как Ext4 без использования нового формата данных, что позволит впоследствии смонтировать её опять как Ext3. При этом, само собой, вы не сможете воспользоваться многочисленными преимуществами Ext4.
8. Контрольные суммы журнала
Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. У этого есть и ещё одно преимущество: благодаря контрольным суммам можно превратить систему двухфазной фиксации журнала Ext3 в однофазную, что ускоряет файловые операции в отдельных случаях до 20 %, таким образом, улучшаются одновременно и надёжность, и производительность.
Примечание: часть, отвечающая за производительность — асинхронное протоколирование, — сейчас по умолчанию отключена, и будет включена в одном из последующих релизов, когда удастся добиться надёжной его работы.
Плюсы и минусы Ext4
К плюсам этой файловой системы можно отнести такие её особенности:
- Журналирование;
- Поддержка шифрования;
- Высокая стабильность, так как она проверена временем;
- Поддержка по умолчанию во многих дистрибутивах;
- Активная разработка;
- Не подвержена фрагментации;
- Лимитов вполне достаточно обычному пользователю, так и для серверных систем;
Минусов у файловой системы тоже хватает:
- Не поддерживаются функции файловых систем следующего поколения, такие как управление томами, дедупликация данных;
- Отсутствие проверки контрольных сумм для данных, что делает невозможным обнаружение повреждения данных из-за аппаратных сбоев оборудования.
- Плохая масштабируемость. Несмотря на то, что заявленный максимальный размер раздела один экзабайт, на деле лучше не создавать разделы больше 50 - 100 терабайт.
Типы файловых систем Linux
Файловые системы в Linux используются не только для работы с файлами на диске, но и для хранения данных в оперативной памяти или доступа к конфигурации ядра во время работы системы. Дальше мы рассмотрим типы файловых систем Linux, включая специальные файловые системы.
Что такое файловая система?
Дальше больше. Чтобы на каждом разделе можно было работать с файлами и каталогами, необходима файловая система. Мы могли бы писать просто содержимое файлов на диск, но нужно еще где-то хранить данные о папках, имена файлов, их размер, адрес на жестком диске, атрибуты доступа. Всем этим занимается файловая система.
От файловой системы зависит очень многое, скорость работы с файлами, скорость записи и даже размер файлов. Также от стабильности файловой системы будет зависеть сохранность ваших файлов.
Файловая система Btrfs
- Максимальный размер раздела: 16 экзабайт.
- Максимальный размер файла: 16 экзабайт.
- Максимальное количество файлов: 2 в 64 степени.
- Максимальная длина имени: 256 символов.
- Количество вложенных каталогов: не ограничено.
Btrfs - это новая файловая система, разработанная с нуля. Расшифровывается как B-Tree Filesystem. Она была анонсирована Крисом Масоном в 2006 году во время его работы в Oracle. Btrfs поддерживает управление несколькими томами на одном разделе, контрольные суммы для блоков, асинхронную репликацию, прозрачное сжатие, а также многие другие возможности современных файловых систем.
В наши дни её уже можно считать стабильной и использовать в качестве основой файловой системы для Linux. Её можно использовать в качестве альтернативы Ext4 как файловую систему для одного раздела, но такие дополнительные функции как менеджер томов, топография из нескольких дисков и управление снапшотами, лучше не использовать. Они могут вызывать проблемы с производительностью или даже потерю данных.
Btrfs уже давно полноценно добавлена в ядро и некоторые дистрибутивы поддерживают её выбор на этапе установки. Например, SUSE Linux использует её в качестве файловой системы по умолчанию с 2015 года. Зато Red Hat больше поддерживает Btrfs с 2017. Возможно для серьезных Enterprice систем эта файловая система ещё не подходит, зато для домашнего использования она вполне готова. Преимущества Btrfs:
- Большие лимиты и хорошая масштабируемость по сравнению с Ext4.
- Поддержка большинства возможностей современных файловых систем, таких как менеджер томов, сжатие на лету, дедупликация, copy-on-write, снапшоты и многое другое.
- Поддержка проверки контрольных сумм, что позволяет точно обнаружить повреждение данных из-за аппаратных проблем.
- Файловая система относительно новая и совсем недавно она считается стабильной. Использование новых возможностей может привести к повреждению данных.
- Отсутствие шифрования на лету.
Файловая система Ext4
- Максимальный размер раздела: 50-100 Тб.
- Максимальный размер файла: 16 Тб.
- Максимальное количество файлов: 4 млрд.
- Максимальная длина имени: 255 символов.
- Количество вложенных каталогов: не ограничено.
Изначально в Linux использовалась файловая система операционной системы Minix, но она имела много ограничений, поэтому в 1992 году Реми Кард начал работать над файловой системой Ext. Тогда, эта файловая система могла использоваться на разделах до двух гигабайт, а максимальный размер имени файла уже был 255 символов.
Спустя немного времени вышла Ext2, в которой было много улучшений, и максимальный размер раздела был увеличен до нескольких терабайт, но у файловой системы была ещё одна проблема - при любом сбое питания был огромный риск потерять все данные. Если во время сбоя записывались какие-либо данные, то файловая система переходила в неопределённое состояние, что могло привести к потере данных вообще не связанных с записываемыми данными.
Современная файловая система Ext4 была анонсирована Теодором Цо в 2006 году. Здесь снова были увеличены лимиты, но при этом была сохранена обратная совместимость с Ext3. Файловая система может оперировать разделами, размеров 1 000 000 терабайт или один экзабайт, однако делать этого не стоит. При создании разделов размером больше 50-100 терабайт возникают проблемы масштабирования из-за необходимости сохранять очень большие адреса блоков. Ещё один недостаток Ext4 - это отсутствие поддержки выявления повреждения данных из-за выхода из строя аппаратного обеспечения и отсутствие поддержки менеджера томов. Таким образом. Плюсы Ext4:
- Очень стабильная, проверенная временем файловая система;
- Поддерживается во всех дистрибутивах по умолчанию;
- Продолжает развиваться и улучшаться;
- Поддерживает прозрачное шифрование;
- Не поддерживает менеджер томов;
- Реальный максимальный объем раздела намного меньше одного экзабайта;
- Не поддерживает новые модные технологии вроде шифрования и сжатия на лету, copy-on-write, дедупликацию, снапшоты и многое другое.
12. Устойчивое прераспределение
Эта возможность, доступная уже в Ext3 в последних версиях ядра и эмулируемая glibc в файловых системах, которые её не поддерживают, позволяет приложениям заранее распределять дисковое пространство, сообщая о своих потребностях файловой системе. Та, в свою очередь, выделяет необходимое количество блоков и структур данных, но они пусты до тех пор, пока приложение в реальности не осуществит в них запись.
Это именно то, что делают, например, P2P-приложения, выделяя место для данных, которые появятся там только спустя часы или дни. Однако реализовано это намного более эффективно — на уровне файловой системы и с универсальным API.
Применений этому несколько: во-первых, чтобы предотвратить выполнение того же самого приложениями (такими как P2P), неэффективно заполняющими файлы нулями — нужные блоки будут выделены разом.
Во-вторых, чтобы снизить фрагментацию — опять же потому, что блоки выделяются однократно, настолько непрерывно, насколько это возможно.
В-третьих, чтобы гарантировать, что приложение будет иметь столько места, сколько ему требуется, что особенно важно для приложений, работающих в реальном времени, поскольку файловая система может вдруг переполниться в процессе выполнения важной операции.
Эта возможность доступна через интерфейс libc posix_fallocate().
7. Быстрый fsck
Fsck — это очень медленная операция, особенно это касается её первой стадии, проверки всех inodes в файловой системе.
То, что список неиспользуемых inodes составляется fsck, а не Ext4, будет хорошо заметно, если вы запустите fsck, чтобы он построил список неиспользуемых inodes, и когда только следующий запуск fsck пройдёт быстрее (запуск fsck всё равно необходим при конвертировании Ext3 в Ext4).
Кроме того, на ускорение fsck влияет и другая особенность — «гибкие группы блоков», также они ускоряют и другие файловые операции.
Обзор Ext4 vs Btrfs vs XFS
Файловая система Ext4 это улучшенная версия Ext3, которая, в свою очередь, не что иное, как переработанная Ext2. Ext4 - очень стабильная файловая система, которая была выбрана по умолчанию в большинстве дистрибутивов Linux, за несколько последних лет. Но её код уже порядочно устарел. Кроме того, пользователи Linux хотят новых возможностей и функций, которых нет в Ext4, но они есть в других файловых системах, например, в Btrfs и XFS. Сюда относятся запись добавлением, снапшоты, подразделы, увеличенный объем данных и количество файлов, а также многое другое. Дальше мы кратко рассмотрим каждую из предложенных файловых систем, чтобы вы смогли выбрать какая файловая система Btrfs или Ext4 лучше именно для вас.
11. Улучшения, связанные с inode
Бóльшие inodes, наносекундные временные метки, быстрые расширенные атрибуты, резервирование inodes…
- Бóльшие inodes: Ext3 поддерживает inodes настраиваемого размера (путём указания mkfs параметра -I), однако размер inode по умолчанию — 128 байт. В Ext4 он будет 256 байт. Это потребовалось, чтобы вместить несколько дополнительных полей (таких как наносекундные временные метки и версии inode), а оставшееся в inode место будет использовано для хранения тех расширенных атрибутов, которые достаточно малы, чтобы там поместиться. Это позволит сделать доступ к таким атрибутам намного быстрее и улучшит производительность приложений, использующих их, в 3—7 раз.
- Суть резервирования inode состоит в выделении нескольких inodes при создании каталога в ожидании того, что они будут использованы в будущем. Это улучшает производительность, потому что вновь создаваемые в этом каталоге файлы смогут использовать зарезервированные inodes. Поэтому создание и удаление файлов производится более эффективно.
- Наносекундные временные метки (nanosecond timestamps) означают, что такие поля inode как, например, время модификации получают наносекундную точность (в Ext3 она была равна секунде).
Жесткий диск и разделы
Обычно в компьютере используется один жесткий диск, но для удобства все доступное пространство разделяется на разделы, в Windows они известны как диски, в Linux же их принято называть разделами. Чтобы операционная система знала сколько разделов есть на диске и их физические границы используется таблица разделов. Она может быть двух типов - GPT или MBR. В этой статье мы не будем рассматривать ее подробно. Скажу только, что там находится метка раздела, его порядковый номер и адрес начала и конца на жестком диске.
Использование 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.
Здесь перечислены далеко не все опции, а только самые интересные. Более подробное описание опций монтирования смотрите выполнив команду:
Монтирование 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 удалять не следует, просто добавляйте нужные вам опции после него.
Файловая система XFS
- Максимальный размер раздела: 8 экзабайт.
- Максимальный размер файла: 8 экзабайт.
- Максимальное количество файлов: 2 в 64 степени.
- Максимальная длина имени: 256 символов.
- Количество вложенных каталогов: не ограничено.
XFS считается расширенной файловой системой. Это высоко производительная 64-битная, журналируемая файловая система. Поддержка XFS была добавлена в ядро в 2002 году. А в 2009 она впервые была использована в Red Hat Enterprise Linux 5.4. Файловая система рассчитана на очень высокую производительность для больших файловых систем, а также может обеспечивать хорошую производительность для большого количества параллельных операций.
Тем не менее эта файловая система не завоевала большой популярности. Она очень стабильная и производительная, поэтому используется по умолчанию в RHEL 7 и уже в 8, однако в ней нет ничего такого, чего бы не было в Ext4. XFS явно не относится к файловым системам следующего поколения, как Btrfs. К тому же она имеет ограничения, которые могут мешать обычным пользователям. Плюсы XFS:
- Не поддерживает возможности файловых систем следующего поколения, такие как управление томами, сжатие, дедупликацию и другие возможности.
- Разделы с XFS можно только расширять, уменьшать нельзя.
Специальные файловые системы
Ядро Linux использует специальные файловые системы, чтобы предоставить доступ пользователю и программам к своим настройкам и информации. Наиболее часто вы будете сталкиваться с такими вариантами:
- tmpfs позволяет размещать любые пользовательские файлы в оперативной памяти компьютера. Достаточно создать блочное устройство нужного размера, затем подключить его к папке, и вы можете писать файлы в оперативную память.
- procfs - по умолчанию смонтирована в папку proc и содержит всю информацию о запущенных в системе процессах, а также самом ядре.
- sysfs - с помощью этой файловой системы вы можете задавать различные настройки ядра во время выполнения.
Выводы
В этой статье мы рассмотрели историю файловой системы Ext4, а также её основные опции, монтирования, а также как и где их указывать. Про настройку Ext4 уже подробно рассказано в другой статье, поэтому здесь я решил не повторяться. А какие опции монтирования используете вы? Напишите в комментариях!
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.
Многие люди задумываются о выборе лучшей файловой системы для своего компьютера. У пользователей Windows и MacOS X небольшой выбор, им доступна только одна стандартная файловая система, это NTFS и HFS+. В операционной системе Linux все по-другому, здесь доступно множество файловых систем на любой вкус.
Очень широко в Linux используется Ext4, её можно считать файловой системой по умолчанию. Но есть несколько поводов попробовать что-то новое. Например, Btrfs vs XFS. Действительно ли она из них лучше других? Давайте сначала рассмотрим самые популярные файловые системы и особенности их работы, так сказать, сделаем небольшое сравнение.
Основные файловые системы
Каждый дистрибутив Linux позволяет использовать одну из этих файловых систем, каждая из них имеет свои преимущества и недостатки. Все они включены в ядро и могут использоваться в качестве корневой файловой системы. Давайте рассмотрим каждую из них более подробно.
- Ext2, Ext3, Ext4 или Extended Filesystem - это стандартная файловая система для Linux. Она была разработана еще для Minix. Она самая стабильная из всех существующих, кодовая база изменяется очень редко и эта файловая система содержит больше всего функций. Версия ext2 была разработана уже именно для Linux и получила много улучшений. В 2001 году вышла ext3, которая добавила еще больше стабильности благодаря использованию журналирования. В 2006 была выпущена версия ext4, которая используется во всех дистрибутивах Linux до сегодняшнего дня. В ней было внесено много улучшений, в том числе увеличен максимальный размер раздела до одного экзабайта.
- JFS или Journaled File System была разработана в IBM для AIX UNIX и использовалась в качестве альтернативы для файловых систем ext. Сейчас она используется там, где необходима высокая стабильность и минимальное потребление ресурсов. При разработке файловой системы ставилась цель создать максимально эффективную файловую систему для многопроцессорных компьютеров. Также как и ext, это журналируемая файловая система, но в журнале хранятся только метаданные, что может привести к использованию старых версий файлов после сбоев.
- ReiserFS - была разработана намного позже, в качестве альтернативы ext3 с улучшенной производительностью и расширенными возможностями. Она была разработана под руководством Ганса Райзера и поддерживает только Linux. Из особенностей можно отметить динамический размер блока, что позволяет упаковывать несколько небольших файлов в один блок, что предотвращает фрагментацию и улучшает работу с небольшими файлами. Еще одно преимущество - в возможности изменять размеры разделов на лету. Но минус в некоторой нестабильности и риске потери данных при отключении энергии. Раньше ReiserFS применялась по умолчанию в SUSE Linux, но сейчас разработчики перешли на Btrfs.
- XFS - это высокопроизводительная файловая система, разработанная в Silicon Graphics для собственной операционной системы еще в 2001 году. Она изначально была рассчитана на файлы большого размера, и поддерживала диски до 2 Терабайт. Из преимуществ файловой системы можно отметить высокую скорость работы с большими файлами, отложенное выделение места, увеличение разделов на лету и незначительный размер служебной информации.
- XFS - журналируемая файловая система, однако в отличие от ext, в журнал записываются только изменения метаданных. Она используется по умолчанию в дистрибутивах на основе Red Hat. Из недостатков - это невозможность уменьшения размера, сложность восстановления данных и риск потери файлов при записи, если будет неожиданное отключение питания, поскольку большинство данных находится в памяти.
- Btrfs или B-Tree File System - это совершенно новая файловая система, которая сосредоточена на отказоустойчивости, легкости администрирования и восстановления данных. Файловая система объединяет в себе очень много новых интересных возможностей, таких как размещение на нескольких разделах, поддержка подтомов, изменение размера не лету, создание мгновенных снимков, а также высокая производительность. Но многими пользователями файловая система Btrfs считается нестабильной. Тем не менее, она уже используется как файловая система по умолчанию в OpenSUSE и SUSE Linux.
Другие файловые системы, такие как NTFS, FAT, HFS могут использоваться в Linux, но корневая файловая система linux на них не устанавливается, поскольку они для этого не предназначены.
Выводы
В этой статье мы рассмотрели типы файловых систем Linux. Как видите, здесь все намного запутаннее чем в Windows. Но на самом деле все просто. Если вам нужна максимально стабильная файловая система linux - то лучшим решением будет ext4, хотите новых технологий - btrfs, для маленьких файлов - raiser4, для больших - XFS. А какие файловые системы linux предпочитаете вы? Напишите в комментариях!
На завершение видео о том, что такое файловая система и ее структура в linux:
Ext4 — это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов.
Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций.
Разработка Ext4
Несмотря на то, что файловая система очень старая по меркам компьютерной индустрии, она всё ещё активно разрабатывается, хотя её разработчики и рассматривают эту файловую систему как временную, пока её не заменит файловая система следующего поколения. Есть ещё несколько вещей, которые активно разрабатываются.
Разработчики хотят научить файловую систему считать контрольные суммы для метаданных. Это позволит выявлять повреждённые суперблоки и использовать вместо них альтернативные. Сейчас это можно сделать только вручную. Ещё один момент, который хотят улучшить разработчики - это квоты. Сейчас они находятся в пространстве пользователя, но их надо перенести в ядро чтобы улучшить производительность. Кроме того надо увеличить максимальный размер блока. В наше время SSD уже используют размер блока в 8 килобайт, а Ext4 все ещё может выделять блоки до 4 килобайт. Это ещё больше уменьшит фрагментацию и улучшит производительность.
10. Онлайн-дефрагментация
Эта функция пока в разработке и будет включена в один из будущих релизов.
Хотя отложенное и многоблочное распределение и экстенты помогают уменьшить фрагментированность файловой системы, со временем она всё-таки может вырасти.
Например: вы создаёте три файла в одном каталоге и они расположены на диске друг за другом. Потом, однажды вы решаете обновить второй файл, и при этом файл становится несколько больше — так, что места для него становится недостаточно. При этом нет никаких других решений, кроме как отделить не вмещающийся фрагмент файла и положить его на другое место диска или выделить файлу последовательную область диска большего размера в другом месте, вдалеке от первых двух файлов, что приведёт к перемещениям головки диска, если приложению потребуется считать все файлы в каталоге (скажем, менеджер файлов будет создавать эскизы для файлов изображений).
Помимо этого, файловая система может заботиться только об определённых типах фрагментации и она не может знать, например, что она должна хранить все файлы, требуемые при загрузке, рядом друг с другом, поскольку она просто не знает, какие из них требуются при загрузке. Чтобы решить эту проблему, Ext4 будет поддерживать онлайн-дефрагментацию.
Также имеется утилита e4defrag, которая позволяет дефрагментировать как отдельные файлы, так и всю файловую систему.
Читайте также: