Как преобразовать существующую конфигурацию RAID5 (с одинарной четностью) btrfs в конфигурацию RAID6 с двойной четностью при наличии достаточного свободного места на диске, используя те же диски и не выгружая данные?
По сути, это должно быть просто удаление диска и сохранение резервного диска, чтобы Btrfs перераспределила все данные на оставшиеся диски, а затем повторное добавление удаленного диска?
Так какой же процесс рекомендуется?
Я думал о чем-то подобном
btrfs device delete /dev/sdx /mnt/fs
btrfs balance start -dconvert=raid6 -mconvert=raid6 /mnt/fs
btrfs device add /dev/sdx /mnt/fs
Нужно ли мне вообще удалять и добавлять диск, или я могу просто преобразовать установку напрямую?
btrfs balance start -dconvert=raid6 -mconvert=raid6 /mnt/fs
решение1
https://www.howtoforge.com/a-beginners-guide-to-btrfs-p2
Это утверждает, что вы можете изменить уровень рейда на работающем массиве, предполагая, что у вас достаточно свободного места. Убедитесь, что вы используете последнее стабильное ядро Linux.
Пример (по ссылке): btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
-dconvert — для данных
-mconvert — для метафайла (вы хотите, чтобы он был продублирован, поверьте мне)
/mnt — это место, где смонтирован том BTRFS. Вы можете сделать это без монтирования, но я не пробовал и хочу быть честным.
У вас есть raid0, raid1, raid5 и raid6. Если у вас достаточно свободного места, я полагаю, что это n-2 или количество дисков [свободное место] минус 2 для raid6. Хотя с BTRFS вы можете обойтись меньшим и вместо этого использовать данные для измерения. Возможно иметь функции, подобные raid6, с меньшим, чем приемлемое, количеством дисков, если вы храните небольшой объем данных. Возможно, но не рекомендуется.
Также имейте в виду, что это займет некоторое время в зависимости от того, сколько данных у вас на дисках. Также есть небольшая вероятность, что балансировка выйдет из строя и массив либо полностью убьет, либо переведет его в нестабильный режим только для чтения. Как всегда, сохраняйте резервные копии.
решение2
- RAID5 требует 3+ дисков(n) с эффективностью пространства 1-1/n
- RAID6 требует 4+ дисков(n) с эффективностью пространства 1-2/n
Общее пространство (приблизительное) массива размером 1 ТиБ и изменение (%) от RAID5 до RAID6:
- 4 x 250 ГиБ ~ 1 ТиБ -> RAID5 ~ 768 ГиБ -> RAID6 ~ 512 ГиБ -> -50%
- 5 x 200 ГиБ ~ 1 ТиБ -> RAID5 ~ 819,2 ГиБ -> RAID6 ~ 614,4 ГиБ -> -25%
- 6 x 170 ГиБ ~ 1 ТиБ -> RAID5 ~ 853,3 ГиБ -> RAID6 ~ 682,6 ГиБ -> -20%
Вы можете изменить уровень RAID на работающем массиве, если у вас достаточно свободного места и дисков.
- не удаляйте и не убирайте какие-либо диски из конечного массива
- путем удаления -> добавления -> преобразования вы получите «двойную» балансировку
- Во время удаления метаданные и фрагменты данных перераспределяются на оставшиеся диски, затем вы добавляете диск, который необходимо будет снова сбалансировать при преобразовании в RAID6.
Если вам необходимо добавить диск(и), добавьте их все перед балансировкой/конвертацией.
btrfs device add /dev/sdc /mnt
btrfs device add /dev/sdd /mnt
Фильтры балансировки - btrfs.wiki.kernel.org
Пример «конвертации» баланса btrfs по ссылке (обновлено):
btrfs balance start -dusage=90 -dconvert=raid6 -mconvert=raid6 /mnt
-dusage — это пороговое значение использования для балансировки фрагментов данных.
-dconvert — для данных
-mconvert — для метаданных
/mnt — это место, где смонтирован том BTRFS. Вы не можете сделать это без монтирования.
Данные и/или метаданные btrfs могут быть:
- одинокий
- рейд0
- рейд01
- рейд1
- рейд5
- рейд6
- рейд1c3
- рейд1c4
Можно использовать команды для приостановки, возобновления, отмены или получения статуса.
btrfs balance pause /mnt
btrfs balance resume /mnt
btrfs balance cancel /mnt
btrfs balance status -v /mnt
Предостережения
- В зависимости от объема данных на дисках восстановление может занять некоторое время.
- Существует вероятность сбоя балансировки и повреждения массива и/или перевода его в нестабильный режим «только чтение».
- Перед конвертацией сделайте резервную копию данных.
- Убедитесь, что вы используете последнюю стабильную версию ядра Linux.