Linux: файловые системы – краткий обзор и сравнение

Автор: | 06/10/2015
 

linux_logoПеревод поста HTG Explains: Which Linux File System Should You Choose? (2010 год) с некоторыми дополнениями и уточнениями.

Журналирование

Прежде, чем говорить о файловых системах – давайте кратко рассмотрим понятие “журналирование“.

Журналирование в том или ином виде применяется практически во всех современных файловых системах.

Journal

Журналирование используется только при операциях записи на диск, и является своеобразным буфером для всех таких операций. Этот подход помогает решить проблемы, которые возникают во время операции записи на диск, при которых компьютер выключается, например – из-за отключения электричества. Без журналирования в таких случаях невозможно выяснить – какие файлы были записаны – а какие не были или были записаны частично.

При использовании журналирования – файл сначала записывается в журнал (или “лог”). После этого – файл записывается на жесткий диск а потом удаляется из журнала, после чего операция записи считается завершённой.  Если во время записи выключилось питание – то после включения системы файловая система может проверить журнал, и найти незавершённые операции.

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

ext

Файловые системы 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. Кроме того, стоит упомянуть, что один из разработчиков ExtTheodore Ts’o, сказал, что “BtrFS – это шаг в будущее”.

Характеристики:

  • максимальный размер файла: 16 EB (Exabyte);
  • максимальный размер раздела: 16 EB;
  • максимальный размер имени файла: 255 символов.

Рекомендации по использованию:

  • в силу производительности, снимкам и другим возможностям – BtrFS является отличной файловой системой для сервера;
  • Oracle так же разрабатывает замену для NFS и CIFS, которая называется CRFS и которая призвана улучшить производительность для файловых хранилищ с BtrFS;
  • тесты производительности показали отставание BtrFS от Ext4 на твердотельных носителях, таких как SSD и при операциях со сравнительно небольшими файлами:
btrfs_vs_ext4

2015

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 для её освобождения.