Главная / Linux / Что такое Btrfs?

Что такое Btrfs?

Btrfs – это файловая система B-tree для копирования при записи с повышенной производительностью, отказоустойчивостью, исправлением данных и функциями администрирования. Она была впервые разработана в Oracle в 2007 году для Linux. Ожидается, что он заменит ext4 в качестве файловой системы по умолчанию в Linux. Она использует B-Tree в качестве основной структуры данных на диске. Btrfs похожа на ZFS в том смысле, что это файловая система копирования при записи. Дублированные (скопированные) данные не записываются на диск, если они не изменены. В отличие от ZFS, которая записывает данные в блоки, Btrfs поддерживает запись «экстентов данных», что позволяет эффективно упаковывать небольшие файлы.
Расширенные функции Btrfs включают в себя:

Несколько физических устройств.
Снимки, субтома и клоны.
Контрольные суммы для метаданных и данных.
Сжатие и шифрование.
Эффективное хранилище для небольших файлов.

Надёжность Btrfs

Btrfs по сравнению с ext4 повышает надежность файловой системы благодаря следующим новым функциям:

Копирование при записи (COW) семантика.
Контрольные суммы (CRC32C) для метаданных и пользовательских данных.
Избыточные метаданные.

COW обеспечивает быстрое создание подразделов и образов. Что ещё более важно, это обеспечивает целостность системы и легкий откат в случае повреждения.

Контрольные суммы защищают целостность данных. В сочетании с избыточными метаданными они обеспечивают эффективный способ исправления коррупции на лету.

Текущее состояние

Текущая версия Btrfs стабильна. Структуры на диске не должны меняться. Даже если они изменятся, ожидается, что устаревший том будет монтируемым. Тем не менее, код всё ещё находится в стадии интенсивной и быстрой разработки. Всегда нужно запускать последнее доступное ядро.

Схемы хранения данных

Btrfs имеет собственный RAID механизм. В настоящее время он поддерживает RAID 0, RAID 1 и RAID 10. RAID 5 и RAID 6 являются экспериментальными и не рекомендуются для производственных данных. RAID 2, RAID 3 и RAID 4 не поддерживаются.

Btrfs делит своё виртуальное пространство на блоки по 256 МБ или более. Каждый блок имеет свой собственный стиль отображения (один диск, дубликат или полоса) и управляется узлом CHUNK_ITEM в дереве фрагментов. Эта реализация позволяет Btrfs поддерживать устройства разного размера и даже разных уровней RAID в томе.

Btrfs обрабатывает метаданные иначе, чем пользовательские данные. Метаданные не делятся кусками с пользовательскими данными. Куски для метаданных обычно хранятся в дублированном виде (стиль отображения RAID 1). Когда есть только один диск, фрагменты метаданных сохраняются с избыточностью в двух физических местах.

В случае аппаратного сбоя Btrfs позволяет перебалансировать массив чанков различными способами. Если неисправный диск будет заменен, он будет восстановлен аналогично аппаратному RAID. В противном случае Btrfs может «перебалансировать» массив в меньший.

Схемы хранения данных в текущей версии Btfrs имеют некоторые недостатки:

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

Балансировка онлайн

Эта функция недоступна в других файловых системах. Она поддерживает конфигурацию живого хранилища. Btrfs способна преобразовывать уровень RAID в другой уровень RAID во время работы системы. Конечно, нельзя использовать функции нового уровня RAID, пока не будет выполнено преобразование.

Подобъем и снимок

Подобъёмы и снимки являются новыми функциями файловых систем «следующего поколения». Пользователь может создать несколько файловых систем на одном виртуальном устройстве, которое может быть одним диском или массивом дисков.

При форматировании тома Btrfs создаётся один корневой том (с идентификатором подобъёма 5). После этого создаются подобъёмы и снимки и отображаются в виде каталогов в корневом томе. Но они обрабатываются иначе, чем каталог. Например, создание ссылки на подобъём приведет к ошибке «Неверная ссылка между устройствами». Чтобы просмотреть содержимое подобъёма, нужно его смонтировать.

Подобъём может быть доступен двумя способами:

Из родительского подобъёма, в этом случае он рассматривается как каталог.
Из отдельной точки крепления.

Подобъём рассматривается как его собственная файловая система. Как и раздел в другой файловой системе, подобъёмный объект индексируется по собственному номеру inode, начиная с 257. Номер inode корневого каталога (всегда 256) записывается в структуре ROOT_ITEM. В отличие от раздела, подобъём Btrfs может динамически увеличивается по мере необходимости и не требует предварительно выделенного дискового пространства.

Каждый подобъём управляется деревом FS. Каждое дерево FS имеет свой номер. Том верхнего уровня (корневой) имеет номер 5. Следующие подобъёмы (и снимки) будут 256, 257 и т. д.

Снимок – это подобъём, содержимое которого является копией текущего состояния некоторого другого подобъёма (или даже корневого тома). Благодаря COW, после создания снимка любое изменение снимка не влияет на исходный подобъём и наоборот.

В отличие от NTFS Volume Snapshot Service (VSS), моментальный снимок в Btrfs может быть создан мгновенно. Вновь созданный моментальный снимок просто имеет ссылку на текущий корень подобъёма, на котором он основан. Снимок можно смонтировать, просмотреть и изменять как обычный подобъем.

Тем не менее, снимок имеет своё ограничение:

Снимок не является резервной копией. Если данные повреждены, например, из-за плохих секторов, снимок и исходный подобъём будут повреждены.
В качестве источника для создания снимка можно использовать только подобъём или снимок. Каталог не может быть создан.
Снимок не является рекурсивным, то есть он не будет содержать вложенных подобъемов.

Восстановление Btrfs

Дерево фрагментов

Дерево фрагментов является одним из самых важных метадата объектов, необходимых для восстановления данных Btrfs. Дерево устройств и дерево фрагментов (чей идентификатор дерева равен 3) являются основными таблицами сопоставления между логическими и физическими адресами. Чтобы найти дерево фрагментов, дубликаты системных фрагментов хранятся в суперблоках. Это помогает загрузить корень дерева фрагментов во время загрузки.

В дереве фрагментов есть два типа ключей:

DEV_ITEM: хранит информацию обо всех базовых устройствах в файловой системе.
CHUNK_ITEM: сопоставляет логический и физический адрес.

Если дерево фрагментов недоступно, возможно только необработанное восстановление на основе сигнатур файлов.

Исключение

Удаленные данные легко восстанавливаются благодаря COW. Когда файл удален, файловая система обновит связанные узлы. Будут созданы новые метаданные с обновленной информацией. Суперблок будет обновлён последним в атомарной операции, чтобы указать на вновь созданный корень. Старая цепочка узлов не повреждена. Таким образом, можно восстановить удалённые данные по полному пути, при условии, что и метаданные, и пользовательские данные не были перезаписаны.

Но трудность при восстановлении данных из файловой системы COW заключается в обработке нескольких копий метаданных. Все копии, кроме одной, устаревают. Например, документ Word мог быть изменен несколько раз, прежде чем он был случайно удалён. Чтобы восстановить текущую версию файла, необходимо выбрать последнюю копию метаданных в наборе узлов дерева.

Необработанное восстановление

Необработанное восстановление – это метод восстановления файлов на основе их шаблонов данных. Необработанное восстановление используется в случае потери метаданных. Давайте обсудим это подробнее, противопоставив Btrfs – NTFS.

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

Когда запись FILE была перезаписана новыми данными, восстановление всё ещё возможно для определенных типов файлов, которые содержат идентифицируемые шаблоны данных. Примером является файл растрового изображения (расширение .bmp). Он начинается с растрового заголовка, который содержит специальную подпись и размер файла. После обнаружения подписи программа знает, что это начало файла растрового изображения. Имея размер файла, программа знает, где заканчивается файл, при условии, что файл хранится целиком на одном диске. (Если файл хранится в двух непересекающихся экстентах, восстановление в необработанном виде будет невозможно, и необходимо использовать методы вырезания файлов.

В Btrfs возможно сканирование узлов дерева FS. Но, как и в других файловых системах COW, необходимо обрабатывать несколько узлов с немного другим содержимым. Крайне важно, чтобы были выбраны самые современные узлы.

Если метаданные потеряны, для смежных файлов возможно восстановление в не обработанном виде на основе сигнатур файлов. Если удаленный файл фрагментирован и его метаданные потеряны, необработанное восстановление будет невозможно, и необходимо использовать методы вырезания файлов.



Оставьте комментарий

Ваш email не будет опубликован. Обязательные поля помечены *

*