Перевод поста HTG Explains: Which Linux File System Should You Choose? (2010 год) с некоторыми дополнениями и уточнениями.
Содержание
Журналирование
Прежде, чем говорить о файловых системах – давайте кратко рассмотрим понятие “журналирование“.
Журналирование в том или ином виде применяется практически во всех современных файловых системах.
Журналирование используется только при операциях записи на диск, и является своеобразным буфером для всех таких операций. Этот подход помогает решить проблемы, которые возникают во время операции записи на диск, при которых компьютер выключается, например – из-за отключения электричества. Без журналирования в таких случаях невозможно выяснить – какие файлы были записаны – а какие не были или были записаны частично.
При использовании журналирования – файл сначала записывается в журнал (или “лог”). После этого – файл записывается на жесткий диск а потом удаляется из журнала, после чего операция записи считается завершённой. Если во время записи выключилось питание – то после включения системы файловая система может проверить журнал, и найти незавершённые операции.
Самая главная проблема при использовании журналирования – это то, что для её использования требуются дополнительные ресурсы системы. Для того, что бы уменьшить такие накладные расходы – журналируемые файловые системы пишут в журнал не весь файл целиком – а только определённые метаданные.
Файловые системы Ext
Ext
Ext означает “Extended” (расширенная) файловая система, и она являлась первой, которая была разработана специально для Linux-систем. Всего на сегодняшний день существует 4 файловые системы Ext. Самая первая из них – просто Ext – являлась серьёзным обновлением ФС ОС Minix.
Характеристики Ext:
- максимальный размер файла: 2GB;
- максимальный размер раздела: 2GB;
- максимальный размер имени 255 символов.
Разработчик – Rémy Card, а первая версия появилась в 1992 году.
Мы не будем её рассматривать, т.к. скорее всего вы уже никогда с ней не столкнётесь.
Ext2
Ext2 – не журналируемая ФС, выпущенная в 1993 году, основная задача для которой была поддержка устройств размером до 2 Террабайт. Т.к. у Ext2 нет журналирования – она выполняет намного меньше операций записи на диск, что сказывается на быстродействии и области её применения.
Характеристики:
- максимальный размер файла: 16GB – 2TB;
- максимальный размер раздела: 2 – 32 TB;
- максимальный размер имени 255 символов.
Рекомендации по использованию:
- в силу низкого количества операций записи-удаления данных – является идеальной для различных флеш-накопителей;
- в то же время современные SSD-диски имеют улучшенные показатели их жизненного цикла (изноустойчивости элементов накопителя) и некоторые другие особенности, которые нивелируют недостатки Ext2 как не журналируемой ФС.
Ext3
Ext3 – появилась в 2001 году, вместе с выпуском Linux Kernel 2.4.15. Фактически является той же Ext2, но с поддержкой журналирования. Основной целью Ext3 была возможность её обратной совместимости с Ext2 без необходимости переформатирвоания разделов. К преимуществам же можно отнести тот факт, что большая часть тестирования, багфиксов и т.д. для Ext3 была то же, что и в Ext2, что сделало Ext3 более стабильной и быстрой ФС.
Характеристики:
- максимальный размер файла: 16GB – 2TB (в зависимости от размера блока);
- максимальный размер раздела: 2 – 32 TB (в зависимости от размера блока);
- максимальный размер имени файла: 255 символов.
Рекомендации по использованию:
- подходит, если у вас используется Ext2, и вы хотите исподьзовать журналирование;
- в силу своей производительности и стабильности – вероятно, будет наиболее подходящей ФС для серверов баз данных;
- возможно не лучший выбор для серверов, т.к. не поддерживает создание снимков (shapshot) ФС и сложностей с восстановлением удалённых файлов.
Ext4
Ext4 – как и Ext3 имеет обратную совместимость с предыдущими версиями ФС. Собственно говоря, вы можете смонтировать Ext2 или Ext3 как Ext4 -и при определённых условиях добиться большей производительности. Вы так же можете смонтировать Ext4 как Ext3 без каких-либо побочных эффектов.
Ext4 – стабильная версия была выпущена в 2008 году. Является первой ФС из “семейства” Ext, использующая механизм “extent file system“, который позволяет добиться меньшей фрагментации файлов и увеличить общую производительность файловой системы. Кроме того – в Ext4 реализован механизм отложенной записи (delayed allocation – delalloc), который так же уменьшает фрагментацию диска и снижает нагрузку на CPU. С другой стороны – хотя механизм отложенной записи и используется во многих ФС – но в силу сложности своей реализации он повышает вероятность утери данных. См. тут>>> для более подробной информации.
Характеристики:
- максимальный размер файла: 16 TB;
- максимальный размер раздела: 16 TB;
- максимальный размер имени файла: 255 символов.
Рекомендации по использованию:
- наилучший выбор для SSD;
- наилучшая производительность по сравнению с предыдущими Etx-системами;
- она так же отлично подходит в качестве файловой системы для серверов баз данных, хотя сама система и моложе Ext3.
BtrFS
BtrFS – разработана компание Oracle в 2007 году. По своей схеме схожа с ReiserFS, основной принцип её работы – это т.н. В-дерево. BtrFS позволяет динамически выделять inode, создавать снимки ФС во время её работы, выполнять прозрачную компрессию файлов и делать дефрагментацию в рабочем режиме.
Хотя стабильная версия BtrFS ещё не включена в большинство дистрибутивов Linux (на сегодняшний день, судя по этому>>> посту – только SUSE и Oracle Linux) – она вполне может заменить Ext3/4 в обозримом будущем и уже предоставляет возможности по конвертации Ext3/4 в BtrFS. Кроме того, стоит упомянуть, что один из разработчиков Ext, Theodore Ts’o, сказал, что “BtrFS – это шаг в будущее”.
Характеристики:
- максимальный размер файла: 16 EB (Exabyte);
- максимальный размер раздела: 16 EB;
- максимальный размер имени файла: 255 символов.
Рекомендации по использованию:
- в силу производительности, снимкам и другим возможностям – BtrFS является отличной файловой системой для сервера;
- Oracle так же разрабатывает замену для NFS и CIFS, которая называется CRFS и которая призвана улучшить производительность для файловых хранилищ с BtrFS;
- тесты производительности показали отставание BtrFS от Ext4 на твердотельных носителях, таких как SSD и при операциях со сравнительно небольшими файлами:
ReizerFS
ReizerFS – представленная в 2001 году реализовала в себе многие возможности, которые никогда не смогут быть реализованы в Ext*. В 2004 на замену ReizerFS была выпущена ФС Reizer4.
В то же время – разработка Reizer4 продвигается очень медленно, и до сих пор имеет ограниченную поддержку (?) в ядре Linux. В настоящее время реально доступной для использования остаётся только ReiserFS.
Характеристики:
- максимальный размер файла: 1 EB (Exabyte);
- максимальный размер раздела: 16 TB;
- максимальный размер имени файла: 4032 байт, но ограничено до 255 символов Linux VFS.
Рекомендации по использованию:
- отличная производительность при работе с небольшими файлами, такими как файлы логов и отлично подойдёт для серверов баз данных или почтовых серверов;
- ReiserFS хорошо поддаётся увеличению размера тома – но не поддерживает его уменьшение и шифрование на уровне ФС;
- будущее Reiser4 пока остаётся под вопросом и пока BtrFS остаётся предпочтительным (?) выбором между этими двумя ФС.
ZFS
ZFS – стоит упомянуть тут, т.к. она так же разрабатывалась компание Oracle и имеет возможности, схожие с BtrFS и ReizerFS. Она так же стала весьма известна после того, как компания Apple заявила о намерении использовать её в качестве ФС по умолчанию. Первый релиз ZFS состоялся в 2005 году.
В силу ограничений из-за лицензии – ZFS не может быть включена в ядро Linux, однако её поддержка возможна с помощью механизма Linux’s Filesystem in Userspace (FUSE).
Характеристики:
- максимальный размер файла: 16 EB (Exabyte);
- максимальный размер раздела: 256 ZiB (Zebibyte);
- максимальный размер имени файла: 255 байт.
Рекомендации по использованию:
- показыавет отличную производительность при работе с большими дисковыми массивами;
- поддерживает возможности по объединению дисков в массивы, созданию снимков ФС, и работе со “расслоённым отображением” (dynamic disk striping) данных;
- возможны сложности при попытке установки и использования в Linux-системах, в силу необходимости использования FUSE.
Swap
Swap – не является файловой системой вообще. Файл или раздел со swap-ом используется системой виртуальной памяти ядра и не имеет структуры файловой системы вообще. Её нельзя примонтировать и считать с неё данные, т.к. swap используется исключительно ядром Linux для записи страниц памяти не диск. Как правило – swap используется только в том случае, когда ОС испытывает недостаток в свободной RAM и “сбрасывает” часть данных из памяти в swap для её освобождения.