В этой статье мы продолжим рассмотрение файловой системы 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)
thegriglat
10.04.2023 15:36Чем btrfs RAID лучше классического на mdadm?
По идее сделать mdadm raid любой конфигурации и на нем уже файловую систему...
Hitman95
10.04.2023 15:36Классический mdadm ничего не знает о файловой системе и данных которые в ней лежат, из-за этого даже на пустых дисках забитыми нулями ребилд и первичная сборка идет очень медленно. В реализации BTRFS, как и в ZFS сам массив знает где и сколько данных у него лежит, по этому при ребилде будет работать только с настоящими данными.
edo1h
10.04.2023 15:36Чем btrfs RAID лучше классического на mdadm?
(планируемым) отсутствием write hole?
13werwolf13
10.04.2023 15:36как минимум гибкостью, отсутствием лишнего слоя абстракции, и наличием кучи плюшек. например:
1) в случае btrfs я могу в любой момент времени свой 10 рейд из12 дисков превратить в 0 или 1c3, могу сделать страйпом и вернуть обратно по желанию
2) если мне много места я могу просто взять и вытащить пару дисков из пула так же легко как добавить диски в пул
3) могу включить сжатие, сменить алгоритм сжатия
4) могу нарезать пачку подразделов с разными параметрами (сжатие, квоты, CoW)и всё это без какого либо даунтайма.
а ещё btrfs сам без проблем определит ssd под ним или hdd, в случае mdadm иногда приходится тыкать фс носом чтобы работал trim
tuupic
10.04.2023 15:36Могу добавить, что btrfs позволяет делать raid1 на жёстких дисках разной ёмкости.
13werwolf13
10.04.2023 15:36Кстати да
Кстати как и zfs
Но я так и не понял плюс это или минус, есть аргументы в обе стороны..
tuupic
10.04.2023 15:36Тьфу, опечатался. raid5/raid6 конечно же имел ввиду.
Он позволяет собирать их на дисках, к пример 1+2+2тб. Внутри бьёт на виртуальные чанки и из размазывает по дискам, чтоб соблюдалось правило, что один диск может умереть без потери информации. Какие-то чанки оказываются, на самом, деле, в raid1
13werwolf13
отус рекламирует свои вебинары коротенькой копипастой небольшого кусочка из официальной доки btrfs?
помоему это скорее антиреклама..
ALito
Особенно внушает доверие
конечно же нетвот это:Однако с поддержкой RAID5 и RAID6 в BTRFS все не так просто, как хотелось бы. На текущий момент на странице англоязычной википедии режимы RAID 5 и RAID 6 имеют статус реализованы, но не рекомендованы (Implemented but not recommended for production use). Ну а по мнению многих ИТ блоггеров, высказывающихся по данной проблеме, данные не просто могут быть потеряны, они будут обязательно потеряны.