Количество файловых систем во всем мире определяется количеством способов организации и хранения файлов на различных устройствах. Разработчики 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.
Популярные файловые системы
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 имеет более продвинутый механизм, называемый Redirect-on-Write (RoW). Использование термина Copy-on-Write (CoW) в отношении ZFS носит исключительно маркетинговый характер, так как 95% потребителей знакома с механизмом CoW и не знает о существовании более сложного и продвинутого механизма.
Снапшоты
Функция копирования при записи служит базой для моментальных снимков (снапшотов). В 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 во всех его проявлениях
Lazhu
Похоже, что автор - чатжпт
BasilioCat
Судя по таблице с ограничениями - точно он. И нет тени сомнений в лимите на 248 снапшотов и 248 файлов в файловой системе
P.S.: Имелось в виду 2^48 файлов, и это только в одном каталоге, но для снапшотов этот лимит - 2^64 (хотя втыкать начинает после 10000)