Количество файловых систем во всем мире определяется количеством способов организации и хранения файлов на различных устройствах. Разработчики Microsoft, Apple, Linux работают над своими файловыми системами. Они различаются между собой скоростью работы, масштабируемостью, наличием дополнительных функций, возможностью поддерживать диски с разными объемами памяти, устойчивостью к повреждению файлов и др. Не существует идеальной файловой системы, которая подошла бы любой компании для любых целей.

Мы в vStack решили сделать полный обзор популярных файловых систем. В первой части расскажем в целом про файловые системы, их типы и разберем ZFS. А в следующих разберем еще четыре вида и сравним все их между собой.

Что такое файловые системы

Файловая система — это способ хранения, структурирования и управления данными на устройстве хранения (жесткий диск, SSD, USB-накопитель и т.д.). Она определяет, как информация будет организована и доступна для чтения и записи. Обычно файловая система включает в себя блоки данных, таблицы индексов, журналы транзакций и метаданные.

  • Блок данных — физический блок информации для хранения файлов или частей файлов. Представляет собой небольшие фрагменты данных, которые могут быть прочитаны или записаны на диск. Блоки данных обычно имеют фиксированный размер и являются основными единицами хранения информации в файловых системах.

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

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

  • Метаданные — информация о размере файла, его типе, времени создания и изменения, правах доступа и других атрибутах. Обычно хранятся в специальных метаданных таблицах или блоках внутри файловой системы. Метаданные помогают системе управлять и организовывать файлы и папки, а также обеспечивают надежность и безопасность взаимодействия с файловой системой.

В современных системах могут быть определены также разнообразные методы обеспечения целостности данных, их сжатия, функции программного RAID, в том числе распределенного. RAID (Redundant Array of Independent Disks) — это метод объединения нескольких физических жестких дисков в одну логическую систему для обеспечения увеличенной производительности, надежности или обоих этих параметров.

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

Типы файловых систем корпоративного уровня 

  • Сетевая файловая система (Network File System, NFS) — это файловая система, позволяющая компьютерам в сети обмениваться файлами как локально расположенными, несмотря на то, что физически они находятся на сервере (физическом или виртуальном). С помощью NFS можно монтировать удаленную директорию на локальном компьютере, что делает ее доступной так же, как и локальные файлы.

Основные функции:

  • совместное использование файлов и директорий между компьютерами;

  • организация единого пространства, доступного из разных компьютеров;

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

  • передача файловых данных по сети с помощью протокола TCP или UDP.

  • Кластерная файловая система (Cluster File System) — эта распределенная файловая система так же позволяет компьютерам в сети работать с файлами как с локально расположенными. Но теперь они могут физически находиться на нескольких серверах, объединенных в кластер, несмотря на то, что с пользовательской стороны находятся, например, в одной папке.

Основные характеристики: 

  • распределение данных. Данные разбиты на блоки и распределены между узлами кластера. Это позволяет достичь более высокой производительности и отказоустойчивости, так как данные доступны для чтения и записи с нескольких компьютеров одновременно;

  • согласованный доступ к данным. При одновременном доступе к файлам и директориям не происходит конфликтов и сохраняется целостность данных;

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

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

Примеры: Lustre, GlusterFS, Ceph.

  • Распределенная файловая система (Distributed File System, DFS) — это тоже распределенная файловая система. В основе DFS лежит идея создания единого логического пространства, в котором файлы и директории на разных компьютерах объединяются и представляются пользователю или приложениям как единое целое. В отличие от кластерных систем, в которых сервера хоть и разные, но находятся в одной локальной сети и связаны высокоскоростной и устойчивой локальной сетью, сервера распределенных систем могут быть географически разнесены и связаны через глобальную сеть. Важно учитывать такие ее особенности: большие задержки и низкая надежность соединений. 

Основные характеристики:

  • прозрачность. DFS обеспечивает прозрачный доступ к файлам и директориям, скрывая детали об их физическом расположении и способе хранения. Пользователи могут работать с файлами так, будто они находятся на локальном компьютере, не заботясь о том, где фактически хранятся данные;

  • распределение данных. Файлы и директории в DFS физически распределены между несколькими компьютерами. Это позволяет достичь высокой производительности и отказоустойчивости, так как данные могут быть доступны для чтения и записи с нескольких устройств одновременно. Также распределение данных позволяет балансировать нагрузку между компьютерами;

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

  • управление и контроль доступа. DFS предоставляет механизмы для управления доступом к файлам и директориям. Это позволяет ограничить доступ к конкретным файлам или разрешить его только определенным пользователям или группам.

Примеры: CIFS (Common Internet File System) и HDFS (Hadoop Distributed File System.

Распределенные файловые системы делятся на два типа:

  • параллельные системы, которые предоставляют параллельный доступ к серверам хранения для каждого клиента. Например, pNFS и Lustre;

  • полностью параллельные системы, в которых параллельно между всеми клиентами распределяются не только данные, но и метаданные. Например, OrangeFS и Ceph.

Соотношение между видами распределенных файловых систем. Источник: lvee.org/en/abstracts/33
Соотношение между видами распределенных файловых систем. Источник: lvee.org/en/abstracts/33

Популярные файловые системы

ZFS — современная файловая система с огромным адресным пространством

Файловая система ZFS поддерживает большие объемы данных и предоставляет возможности для гибкого управления. Она содержит механизмы обеспечения избыточности данных, менеджер логических томов и использует принципы легковесных файловых систем. Поэтому ее выбирают те, кому важно возможность управлять большими объемами данных и обеспечивать их целостность. Среди пользователей ZFS: научные институты, государственные учреждения, компании из сферы финансов и телекоммуникаций, медиа и развлекательные компании

История ZFS

В 2001 году инженеры Sun Microsystems начали разработку ZFS для операционной системы Solaris на базе Unix. В 2005 году компания выпустила исходный код ZFS под общей лицензией на разработку и распространение как часть ОС OpenSolaris с открытым исходным кодом. Изначально аббревиатура расшифровывалась как Zettabyte File System. Однако сегодня слово zettabyte утратило значение в контексте файловой системы. Потенциал масштабирования 128-битной системы ZFS — до 256 квадриллионов зеттабайт.

  • 2006 год — ZFS появилась в коммерческой версии Solaris;

  • 2010 год — компания Sun Microsystems была приобретена компанией Oracle. После этой сделки развитие шло в двух направлениях: ZFS от Oracle и открытая система OpenZFS, объединившая разработчиков и компании, которые используют и развивают файловую систему ZFS;

  • в настоящее время ZFS продолжает развиваться.

Особенности файловой системы

Изначально ZFS была спроектирована с большим запасом по параметрам, который должен был закрыть потребности, вызванные стремительным ростом объема данных. В отличие от 32- и 64-битных систем того времени, ZFS  получила адресное пространство 128 бит. Это в 16 млрд раз больше, чем у конкурентов. Создатель системы Джефф Бонвик (Jeff Bonwick) заявил, что для питания такой емкости нужна  энергия, которая способна вскипятить все океаны мира. Еще одна особенность ZFS — упор на целостность и удобную группировку данных. 

Пределы параметров, заложенные при проектировании ZFS:

  • количество снимков в файловой системе — 248;

  • количество файлов в любой файловой системе — 248;

  • максимальный размер файловой системы — 256 зеттабайт (1021 байт);

  • максимальный размер одного файла — 16 эксабайт (264 байт);

  • максимальный размер любого атрибута — 16 эксабайт (264 байт);

  • максимальный размер любого пула хранения  — 3×1023 петабайт;

  • возможное количество файлов в каталоге (ограничено количеством файлов в файловой системе ZFS: 248) — 256;

  • количество устройств в любом пуле — 264;

  • количество пулов — 264;

  • число файловых систем в одном пуле — 264;

  • максимальная длина имени файла относительно родительской папки — 255 байт;

  • максимальная длина полного имени хранилища данных — 255 байт.

Архитектура ZFS

Файловая система включает набор дисков, над которыми находится уровень абстракции в виде виртуального устройства — Vdev (virtual device). Vdev — это отдельная виртуальная единица хранения, которая может быть реализована в виде дублирующего информацию на два диска Mirror или RAID-Z. Набор виртуальных устройств формирует общий пул. В рамках пула каждый блок данных будет храниться на одном Vdev.

Элементы ZFS условно можно поделить на три категории:

  • SPA (Storage Pool Allocator) — отвечает за размещение блоков данных на диске и нарезку на диски;

  • DMU (Data Management Unit) — уровень объектного хранилища;

  • DSL (Data and Snapshot Layer) — использует объектное хранилище. Компонент занимается непосредственно файловыми системами, снапшотами, то есть логикой, которая реализует POSIX-совместимую файловую систему (в него входит слой ZPL — ZFS POSIX layer).

Функции ZFS

ZFS предоставляет расширенные возможности для хранения данных:

  • хранение в отдельных пулах;

  • копирование при записи (Copy-on-Write);

  • снапшоты;

  • верификация целостности данных и автоматическое исправление; 

  • собственная технология резервирования RAID-Z;

  • автоматическая замена на запасной диск;

  • копирование данных; 

  • кэширование на уровне файловой системы;

  • динамическое расширение хранилища;

  • сжатие и дедупликация данных.

Рассмотрим каждую из этих функций подробнее.

Хранение в отдельных пулах

В отличие от большинства файловых систем, в ZFS объединены функции файловой системы и менеджера томов. Чтобы добавить новую емкость в пул, достаточно присоединить новый накопитель, партиция и форматирование выполнятся автоматически. В пулах можно создавать файловые системы для каждого приложения.

Пулы хранения в ZFS
Пулы хранения в ZFS

Копирование при записи

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

Перезапись в обычной файловой системе
Перезапись в обычной файловой системе
Копирование при записи данных в ZFS
Копирование при записи данных в ZFS

Важный нюанс: на самом деле ZFS имеет более продвинутый механизм, называемый Redirect-on-Write (RoW). Использование термина Copy-on-Write (CoW) в отношении ZFS носит исключительно маркетинговый характер, так как 95% потребителей знакома с механизмом CoW и не знает о существовании более сложного и продвинутого механизма.

Снапшоты

Функция копирования при записи служит базой для моментальных снимков (снапшотов). В ZFS она позволяет мониторить изменения в системе. В снапшоте находится оригинальная версия файловой системы, а в самой файловой системе есть только те изменения, которые появились с момента создания снимка. При записи новых данных выделяются новые блоки для сохранения этих данных. Можно выбрать для снапшотов режим чтения и восстановить прежнюю версию файла или откатить систему до предыдущего снапшота. При этом изменения, которые были сделаны после этого снапшота, будут потеряны, а все остальные сохранятся.

Верификация целостности и автоматическое восстановление данных

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

Верификация целостности и автоматическое восстановление данных в ZFS
Верификация целостности и автоматическое восстановление данных в ZFS

RAID-Z

ZFS имеет собственный вариант избыточности данных — RAID-Z. RAID-Z — вариант RAID-5, в котором есть средства преодоления ошибки write hole error, присущей RAID-5. При этой ошибке после случайного перезапуска системы данные и информация о паритете перестают соответствовать друг другу. 

У RAID-Z три уровня: 

  • RAID-Z1 (один диск для избыточности); 

  • RAID-Z2 (два диска для избыточности);

  • RAID-Z3 (три диска для избыточности).

Автоматическая замена на запасной диск

При отказе диска в пуле хранения он может быть автоматически заменен запасным.

Автоматическая замена дисков при отказе
Автоматическая замена дисков при отказе

Копирование данных

В ZFS существует два вида копирования данных: первичное копирование и инкрементное копирование.

Первичное копирование — процесс, при котором создается точная копия файла или датасета. Вся информация сохраняется в новом месте, и оригинал остается нетронутым. Это полезно, когда требуется создать полную резервную копию данных.

Инкрементное копирование — метод копирования только измененных или новых данных. При создании инкрементной резервной копии ZFS сравнивает новые данные с предыдущей копией и сохраняет только изменения. Это позволяет сэкономить место на диске и уменьшить время, необходимое для создания резервной копии.

Кэширование на уровне файловой системы

В ZFS используется технология Adaptive Replacement Cache (ARC) для кэширования часто используемых данных. ARC автоматически отслеживает самые популярные данные и хранит их в памяти для быстрого доступа. Это позволяет ускорить операции чтения и записи.

ARC использует алгоритмы на основе LRU (Least Recently Used — наименее недавно использованные) и LFU (Least Frequently Used — наименее часто используемые), которые оптимизируют применение доступной памяти и выбирают наиболее релевантные данные для кэширования.

Кроме того, ZFS также поддерживает Level 2 ARC (L2ARC), который представляет собой расширенное кэширование на основе SSD-накопителей. L2ARC используется для хранения данных, которые не помещаются в памяти ARC. Это позволяет увеличить объем кэшируемых данных и улучшить производительность. Для использования L2ARC в ZFS необходимо добавить одно или несколько SSD-накопителей в пул хранения данных. После этого ZFS автоматически начнет использовать L2ARC для кэширования данных на SSD.

Кэширование на уровне файловой системы в ZFS позволяет значительно повысить производительность операций чтения и записи. ARC и L2ARC оптимизируют использование доступной памяти и SSD-накопителей, чтобы хранить наиболее релевантные данные и обеспечить максимальное быстродействие.

Важно отметить, что размер кэша ARC и L2ARC может быть настроен в соответствии с требуемыми потребностями и доступными ресурсами системы. Это позволяет настроить оптимальные параметры кэширования для конкретных сценариев использования и максимизировать производительность файловой системы ZFS.

Сжатие и дедупликация данных

ZFS позволяет сжимать данные на уровне файловой системы. Это означает, что данные сжимаются перед записью на диск, а при чтении с диска они автоматически разжимаются. Сжатие данных в ZFS помогает сэкономить дисковое пространство и повысить производительность операций ввода-вывода. ZFS предлагает несколько алгоритмов сжатия, таких как LZ4, Gzip и др.

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

Подпишитесь, чтобы не пропустить подробный обзор еще четырех файловых систем и их сравнительный анализ.

Эта статья поддерживается командой vStack

vStack — гиперконвергентная платформа для построения виртуальной инфраструктуры корпоративного уровня. Продукт входит в реестр российского ПО.  

•  Наш сайт
• 
Наш блог про Enterprise IT во всех его проявлениях

Комментарии (2)


  1. Lazhu
    19.10.2023 09:49
    +2

    Похоже, что автор - чатжпт


    1. BasilioCat
      19.10.2023 09:49
      +4

      Судя по таблице с ограничениями - точно он. И нет тени сомнений в лимите на 248 снапшотов и 248 файлов в файловой системе
      P.S.: Имелось в виду 2^48 файлов, и это только в одном каталоге, но для снапшотов этот лимит - 2^64 (хотя втыкать начинает после 10000)