Найти в Дзене

Raid массив средствами файловой системы Btrfs

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по настройке программного RAID-массива средствами файловой системы Btrfs (в основном для собственного пользования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности. Btrfs имеет встроенную поддержку управления несколькими устройствами, что
позволяет использовать ее в качестве программного RAID-массива. Это упрощает администрирование, так как функции RAID встроены непосредственно в файловую систему, позволяя легко добавлять и удалять
диски, а так же выполнять балансировку данных. Чуть позже посмотрим на практике. Btrfs поддерживает несколько стандартных уровней RAID. Обратите внимание, что Btrfs может применять разные уровни RAID для данных (-d) и метаданных (-m). RAID 0 Чередование (Stripe). Увеличивает производительность и общий объем, но не имеет избыточности (отказ одного диска приводит к п
Оглавление

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по настройке программного RAID-массива средствами файловой системы Btrfs (в основном для собственного пользования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности.

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

Btrfs поддерживает несколько стандартных уровней RAID. Обратите внимание, что Btrfs может применять разные уровни RAID для данных (-d) и метаданных (-m).

Уровень RAID на Btrfs

RAID 0 Чередование (Stripe). Увеличивает производительность и общий объем, но не имеет избыточности (отказ одного диска приводит к потере всех данных). Стабильный. Хорошо подходит для временных данных или кэша.

RAID 1 Зеркалирование (Mirror). Обеспечивает избыточность (отказ до половины дисков, но минимум одного, в зависимости от конфигурации), но уменьшает доступный объем вдвое. Работает с 2 и более дисками, в том числе разного размера. Стабильный и рекомендуемый. Широко используется для надежного хранения данных.

RAID 10 Комбинация зеркалирования и чередования. Высокая производительность и избыточность. Требует минимум 4 диска. Стабильный и рекомендуемый. Хороший выбор для баланса между производительностью и надежностью.

RAID 5 Чередование с распределенной четностью. Экономичное использование пространства (N-1 дисков), но сложная реализация. Экспериментальный/Не рекомендованный. В реализации Btrfs RAID 5/6 были обнаружены ошибки, которые могут привести к повреждению данных при определенных сценариях (например, при выходе из строя диска во время
"скраббинга").
Избегайте его использования для критически важных данных.

RAID 6 Чередование с двойной четностью. Позволяет пережить отказ двух дисков. Экспериментальный/Не рекомендованный. Имеет те же проблемы, что и RAID 5.

Преимущества RAID массива средствами Btrfs

  • Гибкость: Устройства можно добавлять или удалять из массива "на лету" без перемонтирования.
  • Управление пространством: Возможно использование дисков разного размера (Btrfs максимально эффективно использует доступное пространство, создавая внутренние RAID-сегменты).
  • Простота: Создание файловой системы на нескольких устройствах проще, чем с помощью классического mdadm, и не требует длительной инициализации массива.
  • Целостность данных: Btrfs включает контрольные суммы (checksums) для данных и метаданных, что позволяет обнаруживать и (в случае использования RAID 1/10) автоматически исправлять поврежденные данные (Bit Rot).

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

На данном этапе повествования делаем выводы, что для надежного хранения данных в производственной среде рекомендуется использовать RAID 1 или RAID 10. Реализации RAID 5/6 в Btrfs все еще считаются экспериментальными и не рекомендуются для критически важных данных из-за известных проблем со стабильностью и производительностью при операциях восстановления.

Создание RAID-массива средствами Btrfs

Для создания RAID-массива на Btrfs используется команда mkfs.btrfs. Управление массивом (добавление дисков, балансировка) осуществляется через команду btrfs.

Команда mkfs.btrfs форматирует указанные диски и объединяет их в массив. Вам нужно указать, какой уровень RAID использовать для данных (-d, от "data") и для метаданных (-m, от "metadata").

Важно: Помните, при форматировании все данные на указанных дисках будут удалены.

  • Создание RAID 1 (Зеркалирование)
    Рекомендуется для надежного хранения данных, требует минимум 2 диска (можно разного размера). Пример: создание RAID 1 на четырех дисках /dev/vdb, /dev/vdc, /dev/vdd, /dev/vde
sudo mkfs.btrfs -d raid1 -m raid1 /dev/vd{b,c,d,e}
  • Создание RAID 0 (Чередование)
    Увеличивает скорость и общий объем, но не имеет отказоустойчивости. Требует минимум 2 диска. Пример: создание RAID 0 на четырех дисках /dev/vdb, /dev/vdc, /dev/vdd, /dev/vde
sudo mkfs.btrfs -d raid0 -m raid0 /dev/vd{b,c,d,e}
-2
  • Создание RAID 10 (Зеркалирование+Чередование)
    Баланс между производительностью и надежностью, требует минимум 4 диска. Пример: создание RAID 10 на четырех дисках
sudo mkfs.btrfs -d raid10 -m raid10 /dev/vd{b,c,d,e}
-3
  • Создание RAID 5 (Чередование с распределенной четностью). Помним из выше сказанного крайне не надежна, экспериментальная. Пример: создание RAID 5 на четырех дисках
sudo mkfs.btrfs -d raid5 -m raid5 /dev/vd{b,c,d,e}
  • Создание RAID 6 (Чередование с двойной четностью) Помним из выше сказанного крайне не надежна, экспериментальная. Пример: создание RAID 6 на четырех дисках
sudo mkfs.btrfs -d raid6 -m raid6 /dev/vd{b,c,d,e}
Обратите внимание есть предупреждение теперь данный raid в стадии тестирования
Обратите внимание есть предупреждение теперь данный raid в стадии тестирования

Монтирование массива

После создания массива его необходимо смонтировать. Используйте UUID файловой системы или один из дисков (Btrfs автоматически определит остальные диски, входящие в массив):
Создаем точку монтирования

sudo mkdir /mnt/myraid

Монтируем массив по имени устройства (достаточно указать одно) Используйте опцию "compress" для сжатия данных (рекомендуется)

sudo mount -o compress=zstd:6 /dev/vdb /mnt/myraid
-5

Чтобы монтирование происходило автоматически при загрузке, добавьте запись в файл /etc/fstab. Лучше всего использовать UUID файловой системы:
Получите UUID вашего нового массива

sudo blkid /dev/vdb

Добавьте строку в /etc/fstab (замените UUID_ВАШЕГО_МАССИВА на реальный)

...
UUID=UUID_ВАШЕГО_МАССИВА /mnt/myraid btrfs defaults,compress=zstd:6 0 0
...

Управление массивом (после монтирования)

Просмотр статуса RAID. Убедитесь, что массив работает правильно и какие диски используются:

sudo btrfs filesystem show /mnt/myraid
sudo btrfs device stats /mnt/myraid
-6

Добавление нового диска в массив. Вы можете добавить диск в уже работающий массив "на лету". Например, вы хотите добавить /dev/vdf

sudo btrfs device add /dev/vdf /mnt/myraid

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

Балансировка массива (обязательно после добавления диска) Балансировка перераспределяет существующие данные и метаданные по всем доступным дискам, используя выбранный уровень RAID: Запуск процесса балансировки

sudo btrfs balance start /mnt/myraid

Просмотр статуса балансировки в другом терминале

sudo btrfs balance status /mnt/myraid

-7

Удаление диска из массива. Сначала переместите данные с диска, который хотите удалить

sudo btrfs replace start /dev/vdf /dev/vdg /mnt/myraid

где /dev/vdg - это новый диск, который заменит /dev/vdf (если замена)

-8

Если просто удаляете диск из массива

sudo btrfs device delete /dev/vdg /mnt/myraid
-9

Обслуживание

Скраббинг (Scrubbing) рекомендуется запускать проверку целостности данных (аналог fsck для Btrfs) регулярно, например, раз в месяц. Это обнаруживает и исправляет ошибки чтения с помощью избыточных копий (если у вас RAID 1/10). Запустить скраббинг в фоне

sudo btrfs scrub start /mnt/myraid

# Проверить статус

sudo btrfs scrub status /mnt/myraid
-10

Подведем итоги данного повествования, достаточно интересная реализация RAID-массивов средствами файловой системы Btrfs, думаю для домашнего хранилища вполне актуальное решение в виде RAID1/RAID10 с учетом всех возможностей самой файловой системы как например сжатие, снепшоты, контрольные суммы данных и другие достоинства.

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