В этой статье мы продолжим рассмотрение файловой системы BTRFS и, в частности, поговорим о том, как работать в этой файловой системе с RAID массивами.

В начале я немного напомню о том, что такое RAID массив и какие они бывают. А то вдруг кто-то забыл или на собеседовании спросят. И затем мы перейдем уже к непосредственной настройке этого функционала в BTRFS.

Какие RAID бывают

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

RAID 0 не является отказоустойчивым решением, но данный вид дисковых массивов востребован там, где требуется поддержка высокоскоростного режима чтения и записи.  Чередование дисков без избыточности данных, используемое в RAID 0 также может быть использовано для временных данных или в ситуациях, когда основная копия данных легко восстанавливается с другого устройства. Мы можем использовать 100% дискового пространства каждого из устройств хранения, добавленных в файловую систему, но, если одно из устройств хранения данных выйдет из строя, вся файловая система будет повреждена. Для настройки файловой системы Btrfs в профиле raid0 вам потребуется как минимум два устройства хранения данных.

RAID 1 и его вариации

RAID 1 это один из самых распространенных видов построения отказоустойчивых дисковых хранилищ. В данном случае происходит зеркальное отображение дисков, составляющих единый массив, с последующей синхронизацией. В профиле BTRFS RAID 1 две копии данных/метаданных будут храниться на устройствах хранения, добавленных в файловую систему. Такая архитектура, с одной стороны позволит нам сохранить все данные при потере одного диска, но с другой мы можем использовать только половину от всего дискового пространства, в отличие от RAID 0 где нам были доступны для записи оба диска.

В BTRFS можно использовать специальные профили для работы с RAID 1, состоящих из нескольких дисков. Так в профиле raid1c3 три копии данных будут храниться на устройствах хранения, добавленных в файловую систему. Для данного профиля вам потребуется не менее трех дисков, вы можете позволить себе потерять два из них, но и использовать вы сможете только 33% от общего объема.

Аналогично, можно использовать профиль raid1c4. В нем имеются уже четыре копии данных, которые хранятся на дисках. Соответственно, здесь мы можем потерять уже три диска, но эффективность использования дискового пространства будет только 25%. Количество необходимых для использования этого профиля дисков начинается от четырех.

RAID 10 (RAID 1+0) – еще одна довольно распространенная архитектура организации дисковых массивов. Этот тип массивов представляет собой объединение зеркалирования и чередования дисков. Для реализации такой архитектуры требуется не менее четырех дисков, в которых данные чередуются на зеркальных парах. Пока один диск в каждой зеркальной паре функционирует, данные могут быть извлечены. В BTRFS профиле raid10 две копии данных будут храниться на устройствах хранения, добавленных в файловую систему, как и в профиле raid1. Кроме того, данные будут распределены по устройствам хранения, как в профиле raid0. Как и в RAID 1 здесь вы можете использовать 50% от общего дискового пространства в конфигурации raid10. Для настройки файловой системы Btrfs в профиле raid10 вам потребуется как минимум четыре устройства хранения данных.

RAID 5 и 6

Конфигурация RAID 5 получила широкое распространение в различных системах хранения и серверах с большим количеством дисков. В BTRFS профиле RAID5 одна копия данных будет разделена между устройствами хранения, таким образом, что единая четность будет вычислена и распределена между устройствами хранения RAID-массива.

Формула расчета эффективного дискового пространства здесь будет несколько сложнее, чем в предыдущих случаях. Полезный объем равен 100x(N-1)/N %, где N – это количество дисков одинакового размера. В конфигурации RAID5 файловая система может пережить один сбой диска. Если диск выходит из строя, вы можете добавить новый диск в файловую систему, и потерянные данные будут рассчитаны на основе распределенной четности запущенных дисков. Соответственно, в профиле BTRFS RAID5 вам потребуется как минимум три устройства хранения данных.

RAID 6 — массив из четырёх или более дисков с проверкой чётности, разработанный для защиты от потери данных при выходе из строя сразу двух жестких дисков в массиве. В профиле RAID6 одна копия данных/метаданных будет разделена между устройствами хранения. Будут рассчитаны два соотношения и распределены между устройствами хранения RAID-массива.

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

Здесь эффективное пространство рассчитывается по следующей формуле 100x(N-2)/N % от общего дискового пространства в конфигурации raid6, где N - количество устройств хранения, добавленных в файловую систему. Для настройки файловой системы Btrfs в профиле raid6 вам потребуется как минимум четыре устройства хранения данных.

Бочка дегтя в ложке меда

Однако с поддержкой RAID5 и RAID6 в BTRFS все не так просто, как хотелось бы. На текущий момент на странице англоязычной википедии режимы RAID 5 и RAID 6 имеют статус реализованы, но не рекомендованы (Implemented but not recommended for production use). Ну а по мнению многих ИТ блоггеров, высказывающихся по данной проблеме, данные не просто могут быть потеряны, они будут обязательно потеряны.

Поэтому в примерах работы RAID с BTRFS я не буду описывать настройку RAID 5 и RAID 6. Но для тех, кто все-таки хочет рискнуть и использовать эти архитектуры вот несколько советов:

  • никогда не используйте raid5 для метаданных. Используйте raid1 для метаданных (raid1c3 для raid6).

  • почаще используйте команду btrfs scrub. Данная команда проходит по всем данным файловой системы и метаданным и проверяет контрольные суммы. Если доступна действительная копия (реплицированные профили группы блоков), то поврежденная копия восстанавливается.

  • выполняйте очистку btrfs scrub на одном диске за раз.

  • когда диск выходит из строя, используйте "btrfs replace", чтобы заменить его.

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

Ну и следует помнить, что btrfs raid5 не обеспечивает такой полной защиты от повреждения данных на диске, как btrfs raid1. Если вы планируете использовать запасные диски, не добавляйте их в файловую систему до возникновения сбоев одного из основных дисков. Возможно, вам не удастся перераспределить данные с отсутствующих дисков по существующим дискам с помощью удаления устройства. Держите запасные диски пустыми и активируйте их с помощью "btrfs replace", если активные диски выходят из строя.

И если подводить итоги приведенному в этом разделе, то не доверяйте RAID 5 и RAID 6, а если доверяете, убедитесь, что у вас есть резервные копии!

Немного настроек RAID

Теперь мы можем перейти к практической части, а именно, к настройке различных видов RAID массивов в BTRFS. Начнем с RAID-0. Я, как обычно использую Ubuntu 22.04 к которой будут подключены три диска sdb, sdc,sdd.

lsblk -e7

 

Для создания RAID любой архитектуры в BTRFS достаточно одной команды mkfs.btrfs. Так для RAID эта команда будет иметь следующий вид:

mkfs.btrfs -L bt_raid -d raid0 -m raid0 -f /dev/sdb /dev/sdc /dev/sdd

На скриншоте представлен результат успешного выполнения этой команды. Далее подмонтируем наш раздел /dev/sdb к каталогу /bt_raid и посмотрим сколько свободного места у нас есть.  

mount /dev/sdb /bt_raid

df -h /bt_raid

 

Как видно, мы можем использовать объем всех трех дисков для хранения данных.

Далее, развернем “зеркало” RAID-1. Здесь у нас будут участвовать два диска /dev/sdb и /dev/sdc.

mkfs.btrfs -L bt_raid -d raid1 -m raid1 -f /dev/sdb /dev/sdc

Как и предполагалось полезный объем равен половине дискового пространства.

И напоследок посмотрим построение RAID-1C3 массива. Как можно понять из названия, здесь у нас будут участвовать три диска.

mkfs.btrfs -L bt_raid -d raid1c3 -m raid1c3 -f /dev/sdb /dev/sdc /dev/sdd

В результате успешного выполнения команды мы получили раздел, размером в 33% от общего объема дискового пространства.

 

Заключение

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

В конце статьи, традиционно приглашаю вас на бесплатный вебинар. Тема вебинара: "Мини-лаборатория: Vagrant".

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

 

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


  1. 13werwolf13
    10.04.2023 15:36

    отус рекламирует свои вебинары коротенькой копипастой небольшого кусочка из официальной доки btrfs?

    помоему это скорее антиреклама..


    1. ALito
      10.04.2023 15:36

      Особенно внушает доверие конечно же нет вот это:

      Однако с поддержкой RAID5 и RAID6 в BTRFS все не так просто, как хотелось бы. На текущий момент на странице англоязычной википедии режимы RAID 5 и RAID 6 имеют статус реализованы, но не рекомендованы (Implemented but not recommended for production use). Ну а по мнению многих ИТ блоггеров, высказывающихся по данной проблеме, данные не просто могут быть потеряны, они будут обязательно потеряны.


  1. thegriglat
    10.04.2023 15:36

    Чем btrfs RAID лучше классического на mdadm?

    По идее сделать mdadm raid любой конфигурации и на нем уже файловую систему...


    1. Hitman95
      10.04.2023 15:36

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


    1. edo1h
      10.04.2023 15:36

      Чем btrfs RAID лучше классического на mdadm?

      (планируемым) отсутствием write hole?


    1. 13werwolf13
      10.04.2023 15:36

      как минимум гибкостью, отсутствием лишнего слоя абстракции, и наличием кучи плюшек. например:
      1) в случае btrfs я могу в любой момент времени свой 10 рейд из12 дисков превратить в 0 или 1c3, могу сделать страйпом и вернуть обратно по желанию
      2) если мне много места я могу просто взять и вытащить пару дисков из пула так же легко как добавить диски в пул
      3) могу включить сжатие, сменить алгоритм сжатия
      4) могу нарезать пачку подразделов с разными параметрами (сжатие, квоты, CoW)

      и всё это без какого либо даунтайма.

      а ещё btrfs сам без проблем определит ssd под ним или hdd, в случае mdadm иногда приходится тыкать фс носом чтобы работал trim


      1. tuupic
        10.04.2023 15:36

        Могу добавить, что btrfs позволяет делать raid1 на жёстких дисках разной ёмкости.


        1. 13werwolf13
          10.04.2023 15:36

          Кстати да

          Кстати как и zfs

          Но я так и не понял плюс это или минус, есть аргументы в обе стороны..


          1. tuupic
            10.04.2023 15:36

            Тьфу, опечатался. raid5/raid6 конечно же имел ввиду.

            Он позволяет собирать их на дисках, к пример 1+2+2тб. Внутри бьёт на виртуальные чанки и из размазывает по дискам, чтоб соблюдалось правило, что один диск может умереть без потери информации. Какие-то чанки оказываются, на самом, деле, в raid1