воскресенье, 27 сентября 2015 г.

Файловые системы в Linux

В этой статье хочу рассмотреть актуальные на сегодняшний день файловые системы, доступные в Linux, а также кратко описать достоинства и недостатки каждой из них.


 

 

Файловые системы, доступные для установки системы.


Ext2


Эта файловая система была написана специально для Linux в 1993 году, как замена существовавшей тогда ext (Extended File System, расширенная файловая система). Данная ФС отличается невероятно высокой скоростью, уступая лишь более современной ext4 в тестах чтения. В настоящее время, код оригинальной Ext2 убран из ядра Linux, так как сильно устарел и его трудно поддерживать. Сейчас под Ext2 подразумевается Ext3 с отключённым журналированием. Ext2 часто используется на флеш-картах и некоторых SSD-накопителях, так как отсутствие журналирования является плюсом для таких накопителей, ибо продлевает срок их службы.

Достоинства:

  • Высокая производительность за счет отсутствия журналирования.

Недостатки:
  • Отсутствие журналирования. При ее использовании вам придется смириться с длительными проверками файловой системы при любом некорректном завершении работы. А при объемах современных дисков это может затянуться надолго.
  • Необходимо применение ИБП.
  • Не вполне рациональное использование дискового пространства.

Ext4


Современный вариант файловой системы Ext, предлагаемый по умолчанию в большинстве дистрибутивов Linux. Отличается высокой надёжностью, скоростью чтения/записи, поддержкой операций TRIM (необходимы для SSD-накопителей), автоматическая дефрагментация без размонтирования и многое другое. В большинстве случаев рекомендуется использовать эту ФС. Недавно в неё была добавлена поддержка шифрования (на уровне файловой системы). Ext4 - одна из самых быстрых и надёжных файловых систем. Кстати, Ext4 очень любит Google, и применяет её на своих серверах.

Достоинства:
  • Ext4 поддерживает гигантские объемы дисков и размеры файлов, работает с ними гораздо быстрее (очень заметно при удалении).
  • Низкий уровень фрагментации файловой системы, и, как следствие, прирост производительности.
  • Улучшена производительность некоторых баз данных и мультимедийных приложений
  • Ext4 умеет откладывать выделение места на диске на последний момент, что положительно сказывается на производительности.
  • Ext3 поддерживает 32 тысячи поддиректорий. В Ext4 ограничения сняты.
  • Запись контрольных сумм в журнал и, как следствие, высокая надежность.
  • Онлайн дефрагментация.
  • Восстановление удаленных файлов.

Недостатки:
  • Неэкономичность использования дискового пространства.
  • Ограничение на количество inode, что в случае его превышения (из-за хранения гигантского количества мелких файлов), может привести к невозможности записи данных на диск, даже если есть свободное место.

XFS


Файловая система XFS была разработана в середине 2000-х годов для операционной системы IRIX, которая была стандартом для создания выскопрофессиональной компьютерной графики. В начале 90-х, XFS была выпущена как свободное ПО, и включена в ядро Linux. Основным достоинством XFS, является прекрасная работа с очень большими файлами. К примеру если у вас есть диск, который вы используете для торрентов, то XFS для него будет лучшим выбором. XFS является 64-х битной ФС, поддерживает отложенное выделения дискового пространства (что позволяет оптимально расходовать место на диске и уменьшить фрагментацию), дефрагментацию на лету, а также динамическое выделение inodes, и их высвобождение для записи данных. Связка XFS+LVM+RAID mdadm (программный), весьма популярна в серверной среде.

Достоинства:
  • Очень эффективна в работе с большими по размеру файлами, хорошо работает также с большими по объему каталогами на чтение и поиск в них.
  • Рациональное использование дискового пространства.
  • Высокая производительность.
  • Онлайн дефрагментация.
Недостатки:
  • Высокая сложность восстановления удалённых данных.
  • Не рекомендуется держать на ней корневую файловую систему, так как xfs считает, что содержимое находившихся открытыми на запись файлов при некорректном прерывании работы системы не определено, и она заполняет эти файлы нулями.
  • В случае сбоя во время записи метаданных в журнал, возможна потеря данных (это характерно для всех ФС с журналированием метаданных). Рекомендуется использование ИБП (Источника Бесперебойного Питания).

JFS


JFS - это 64-х битная журналируемая файловая система от компании IBM, изначально созданная для их же операционной системы AIX. Существует 2 поколения JFS, которые используются в AIX. В Linux используется только второе поколение, JFS2. Отличается хорошей производительностью, лёгкостью восстановления удалённых данных, а также хорошей работой с мелкими файлами. Как и XFS, JFS журналирует только метаданные, потому в случае сбоя, во время записи метаданных в журнал, возможна потеря данных.

Достоинства:

  • Рациональное использование дискового пространства.
  • Дает хороший прирост в скорости работы.
  • Возможно восстановить данные с поврежденного тома, или же стертые данные.
  • Нет ограничений на количество файлов.
  • Достаточно производительна, особенно на небольших файлах.
  • Минимальная нагрузка на процессор.
Недостатки:
  • Средняя производительность.
  • Невысокая скорость работы с большими файлами.

Btrfs


Btrfs - это файловая система от компании Oracle, созданная в качестве ответа на файловую систему ZFS, от компании Sun (которую позже купила Oracle). Btrfs позиционируется как современная и многофункциональная замена Ext4, и помимо самой ФС, обладает функционалом менеджера логических томов, менеджера RAID, возможностью создания снимков состояния (а также снимков снимков), и копированием при записи (при копировании данных создаётся только символьная ссылка, а само копирование происходит только при обращении к этим данным для записи. Это позволяет существенно сократить используемое дисковое пространство для снимков состояния (снапшотов)). Файловая система Btrfs имеет структуру B-деревьев. Корнем дерева является сама ФС, а все каталоги и разделы диска - ветвями (так называемыми подтомами). Во время разметки диска, достаточно отдать всё пространство (кроме раздела swap) под Btrfs, а все необходимые разделы реализовывать в виде подтомов, которые будут монтироваться к общему дереву. В результате будет возможно создавать мгновенные снимки состояния разделов, и в случае необходимости  - полностью восстанавливать их к исходному состоянию. Пример установки Ubuntu на диск с Btrfs, описан в этой статье.

Достоинства:

  • Высокая скорость работы.
  • Возможность создания снимков состояния (и снимков снимков)
  • Механизм Copy-on-Write (Копирование при записи).
  • Встроенный функционал менеджера логических томов и менеджера RAID.
  • Оптимизированна для SSD-накопителей.
  • Возможность сконвертировать ext4 в Btrfs.
  • Неограниченное количество inodes
  • Сжатие данных (значительная экономия дискового пространства).

Недостатки:

  • Пока нет возможности online-сканирования ФС на ошибки (без размонтирования).
  • Нет поддержки дедупликации данных.
  • Так как Btrfs всё ещё в состоянии активной разработки, она не отличается высокой надёжностью, потому не рекомендуется для использования в ответственных системах, таких как сервера.

ZFS


ZFS - это файловая система от компании Sun Microsystems (ныне принадлежит Oracle), которая была создана для их операционной системы Solaris. В 2005 году, Sun открыла код ZFS в рамках проекта OpenSolaris. Это позволило портировать ZFS на другие UNIX-подобные системы. В FreeBSD данная ФС доступна штатно, наряду с UFS. Для Linux доступен "ядерный" модуль ZFS on Linux. Лицензия CDDL, по которой распространяется ZFS, несовместима с GPL, и потому не позволяет включить ZFS в ядро Linux. Однако на официальном сайте доступны готовые установочные модули для большинства дистрибутивов. Данная файловая система отличается поддержкой неограниченных объёмов данных (на самом деле, конечно, ограничения есть, но максимальный размер данных так велик, что можно сказать, что объём данных практически бесконечен), поддержкой снимков состояния, функционалом менеджера логических томов, поддержкой дедупликации данных, механизмом Copy-on-Write и многим другим. Данная ФС рекомендуется для файловых хранилищ, а также серверов, и в отдельных случаях - для десктопов (например если у вас несколько дисков, объединённых в RAID-массив).

Достоинства:
  • 128-битная файловая система, что даёт возможность хранения соответствующих объёмов информации
  • использование продвинутых алгоритмов хэширования для повышения надёжности хранения
  • поддержка снапшотов (snapshot), благодаря этой и следующей особенности ZFS сочетает в себе возможности файловой системы и системы управления томами (такой как LVM)
  • поддержка пулов хранения (storage pools)
  • высокая производительность на ряде задач
  • endian'о-независимость, что даёт возможность безболезнненого смешения устройств big endian и little endian
  • отсутствие необходимости в выполнении fsck благодаря использованию другого подхода к организации хранения данных 
Недостатки:






  • Невозможно уменьшить zfs pool.





  • Невозможно увеличить количество устройств внутри избыточного vdev ( raidz/raidz2 )
  • Из-за широкого использования Copy-on-write возможна заметная фрагментация при частом изменении файлов. Дефрагментатора пока нет. 
  • Штатно отсутствует в ядре Linux.
  • Потребляет значительное количество оперативной памяти.


  • F2FS


    F2FS - это файловая система, оптимизированная для Flash и SSD накопителей, разработанная компанией Samsung и включённая в ядро Linux с версии 3.8. Для адаптации F2FS к различным видам флеш-накопителей, отличающихся своими характеристиками в зависимости от внутренней геометрии и схемы управления, предусмотрен широкий спектр параметров для управления структурой распределения данных в разделе и предоставлена возможность выбора различных алгоритмов очистки и выделения блоков. ФС учитывает все технические особенности твердотельных накопителей, такие как неизменное время доступа и ограниченный цикл перезаписи. Хранение структур данных организовано в форме журнала, а при обновлении информации используется механизм копирования при записи (Copy-On-Write, COW), при котором при изменении данные не перезаписываются, но сохраняются в новом месте. Метод работы F2FS позволит существенно продлить жизнь флеш-накопителей, поскольку файловая система учитывает внутреннюю геометрию расположения чипов в носителе и работу контроллера. Для снижения износа флеш-накопителя данные по возможности распределяются равномерно, сводя к минимуму повторную запись в одни и те же блоки.

    Достоинства:

    • Специально оптимизирована для твердотельных накопителей и может существенно продлить их срок службы, а также обеспечить максимальное быстродействие.

    Недостатки:

    • F2FS слишком молода, и пока не может похвастаться высокой надёжностью.
    • Недоступна непосредственно при установке большинства дистрибутивов (необходимо вручную переносить систему на раздел с F2FS).

    NILFS


    Это журнально-структурированная файловая система, разработанная специально для Linux. Будучи журнально-структурированной файловой системой (одна из разновидностей технологии «копирования-при-записи»), NILFS записывает данные в специальные журналоподобные файлы, при этом никогда их не перезаписывая, что позволяет минимизировать время поиска информации и избежать возможной потери данных, характерной для других файловых систем. Для примера, такая потеря может произойти на файловой системе ext3 при крахе компьютера в момент, когда производилась запись: после перезагрузки запись в журнале будет отменена и частично записанные данные потеряются.

    Достоинства:
    • Малое время записи и восстановления данных
    • Минимальные повреждения файловых данных и целостности системы при аппаратных сбоях.
      • 32-битные контрольные суммы (CRC32) для контроля целостности данных и метаданных (для групп блоков, для отдельных сегментов)
      • Запись данных и метаданных в правильном порядке
      • Резервные копии суперблока
    • Блоки файлов и inode-ов управляются B-tree структурой
    • 64-битные внутренние данные
    • Поддержка больших файлов (8 Эксабайт)
    • Размер блоков меньше размера страницы (напр. 1 кб. или 2 кб.)
    • Изменение размера "на лету" (начиная с Linux-3.x и nilfs-utils 2.1)
    Недостатки:

    • Отсутствие инструмента проверки ФС на ошибки (fsck)
    • Довольно неэкономное расходование дискового пространства.
    • Необходимость в использовании сборщика мусора  nilfs_cleanerd, в противном случае количество свободного места на диске определяется неправильно.
    • Недоступна во время установки системы.

    Reiser4


    Raiser4 - четвёртая версия одной из первых журналируемых файловых систем, разработанная специально для Linux.
     включает в себя такие современные технологии как задержка выделения пространства, встроенную возможность кодирования и сжатия данных, транзакции. В настоящее время практически не развивается, так как главный разработчик ФС Ганс Рейзер, находится в тюремном заключении. Поддержка Raiser4 ведётся русским программистом Эдуардом Шишкиным. Raiser4 штатно отсутствует в ядре Linux, поэтому необходимо её добавление посредством патча.

    Достоинства:
    • атомарная структура ФС (atomic filesystem) — позволяет производить операции файловой системы или полностью, или никак, но не наполовину; это повышает надёжность хранения данных;
    • использует алгоритм танцующего дерева, который пришёл на смену алгоритму B+-дерева, используемого в базах данных; Это позволяет Reiser4 более эффективно использовать пространство, благодаря тому, что маленькие файлы хранятся вместе и более высокой скорости работы, так как дерево балансируется только при записи на диск, достижении предела памяти или завершении транзакции; Благодаря редкой оптимизации появляется возможность достижения более глубокого уровня её проведения.
    • Архитектура Reiser4 основана на плагинах, что может облегчить добавление новых возможностей в файловую систему. Из значимых плагинов на данный момент существует плагин прозрачной компрессии (архиватор), позволяющий сжимать содержимое файлов перед записью на диск (что также значительно увеличивает скорость работы, уменьшая непосредственно считываемый/записываемый объём данных).
    Недостатки:

    • Raiser4 в настоящее время почти не развивается, ведётся лишь исправление мелких ошибок и адаптация под новые версии ядра Linux, а также небольшие изменения функциональности.
    • Отсутствует в ядре Linux.

    Прочие файловые системы.


    NTFS


    Linux поддерживает файловую систему NTFS, применяемую в Windows. Её поддержкой занимается драйвер ntfs-3g, который работает через FUSE (File System on Userpace, файловая система в пространстве пользователя). Однако производительность будет ниже, чем при использовании модуля для ядра от компании Paragon (модуль платный). Тем не менее, скорость чтения/записи весьма высока, ntfs-3g работает с любыми NTFS-накопителями, в следствии простой реализации драйвера, высока его надёжность.

    HFS+


    Linux поддерживает файловую систему HFS+, используемую в Mac OS X в режиме чтения со включённым журналированием, и в режиме чтения/записи с отключённым. Для возможности полноценного использования HFS+ в режиме чтения/записи, также существует платный драйвер от Paragon.

    UFS


    Linux поддерживает файловую систему UFS (Unix File System), используемую в FreeBSD и других UNIX-системах. Штатно поддерживается монтирование в режиме только чтение, для монтирования в режиме чтение/запись, в ядре должна быть включена поддержка UFS.

    FAT/FAT32


    Разумеется Linux поддерживает старые (я бы даже сказал, древние) фаловые системы FAT и FAT32

    extFAT


    Linux поддерживает файловую систему extFAT, разработанную компанией Майкрософт в режиме чтения/записи, посредством FUSE-драйвера. Это современная версия FAT, обладающая следующими достоинствами:

    • Уменьшение количества перезаписей одного и того же сектора, что важно для флеш-накопителей, у которых ячейки памяти необратимо изнашиваются после определённого количества операций записи (это сильно смягчается выравниванием износа — wear leveling, — встроенным в современные USB-накопители и SD-карточки). Это была основная причина разработки ExFAT.
    • Теоретический лимит на размер файла 264 байт (16 эксабайт).
    • Максимальный размер кластера увеличен до 225 байт (32 мегабайта).
    • Улучшение распределения свободного места за счёт введения бит-карты свободного места, что может уменьшать фрагментацию диска.
    • Введена поддержка списка прав доступа.
    • Поддержка транзакций (опциональная возможность, должна поддерживаться устройством).

    Из недостатков:

    • Более сложная структура, чем у FAT,  вызывает больший расход вычислительных ресурсов компьютера.
    • Проприетарная, разрабатывается Майкрсоофт и очень плохо поддерживается в относительно старых системах (нужно устанавливать драйвера).

    Конечно, это не весь список файловых систем, которые поддерживает Linux. Есть там ещё малоизвестные и специфичные файловые системы. Линукс обладает, наверное, самой широкой поддержкой разнообразных файловых систем, поэтому какой-бы накопитель вы не подключили, с вероятностью в 98% он будет работать сразу и без нареканий.

    4 комментария:

    1. Хорошая статья.

      Немного дополню:

      У btrfs/zfs и вообще всех Copy-on-Write высокая скорость работы есть ровно до первого снепшота после него фрагментация убивает всю скорость. Для SSD это менее актуально, но всё же.

      Драйвер NTFS от Paragon бесплатный, платная версия отличается наличием утилит для работы с NTFS разделами, при наличии пакета ntfs-3g не актуально для большинства пользователей.

      Сжатие данных у ZFS тоже есть, более того у ZFS, в отличии от btrfs, доступно lz4 сжатие, которое на сегодня является самым быстрым (читай меньше всего грузит проц)

      Мереджер томов ZFS (zvol) позволяет использовать SSD в качестве быстрого кеша для HDD без особых усилий (все другие способы доступные в линуксе менее надежны и сложны в настройке). Также он позволяет использовать любые другие файловые системы (ext4/XFS и т.д.) на создаваемых им томах, что позволяет получить прозрачное сжатие, чексуммы на данные и другие фишки ZFS на файловых системах, которые изначально этого не поддерживают. Более того, это позволяет в специфических задачах получить скорость близкую к скорости работы с данными соответствующих ФС.

      Нагрузка на проц у XFS меньше чем у ZFS и btrfs. Информация о большой нагрузке на проц была актуальна до их появления в линуксе.

      З.Ы. Опечатка:
      > В начале 90-х, XFS была выпущена как свободное ПО, и включена в ядро Linux.
      В начале 00-х

      ОтветитьУдалить
    2. Reiser4 не только "мелко исправляется", но и адаптирована под работу на SSD, а также уже давно включена в состав ядра GNU/Linux.

      ОтветитьУдалить