Вопрос или проблема
У меня есть 2 массива RAID с использованием mdadm (RAID1 для ОС и RAID6 для хранения), и у меня есть 2 резервных диска в машине, которые я хотел бы использовать в любом из массивов в случае отказа дисков (особенно если второй диск выйдет из строя во время восстановительного процесса). Если я выделяю один резервный диск для каждого массива и вручную отключаю диск, автоматическое восстановление начинается немедленно из этого резервного диска. Однако, если я пытаюсь поместить оба резервных диска в одну группу и добавить
spare-group=shared
в строку ARRAY для каждого в /etc/mdadm/mdadm.conf, и затем вручную отключаю диск из массива без резервных дисков, резервный диск из другого массива не используется, как я ожидал.
Вот мой mdadm.conf (я использую postfix, чтобы получать уведомления по электронной почте)
ARRAY /dev/md/ubuntu-server:1 metadata=1.2 UUID=2aade141:cd708a11:ce218c5b:88e6a1cb spare-group=shared
ARRAY /dev/md/ubuntu-server:0 metadata=1.2 UUID=b99fe735:32b1db20:5164600b:c635da79 spare-group=shared
MAILADDR [email protected]
Я также пробовал вариации, такие как эта, так как видел что-то похожее в других обсуждениях этого вопроса.
ARRAY /dev/md/ubuntu-server:1 metadata=1.2 UUID=2aade141:cd708a11:ce218c5b:88e6a1cb spare-group=shared level=raid6 num-devices=8 devices=/dev/nvme0n1p2,/dev/nvme1n1p2,dev/nvme3n1p2,/dev/nvme4n1p2,/dev/nvme5n1p2,/dev/nvme6n1p2,/dev/nvme9n1p2,/dev/nvme10n1p2,/dev/nvme11n1p2,/dev/nvme12n1p2
ARRAY /dev/md/ubuntu-server:0 metadata=1.2 UUID=b99fe735:32b1db20:5164600b:c635da79 spare-group=shared level=raid1 num-devices=3 devices=/dev/nvme2n1p2,/dev/nvme7n1p2,dev/nvme8n1p2
MAILADDR [email protected]
Вот мой /proc/mdstat (в данный момент идет восстановление, так как я только что тестировал отказ и повторное добавление дисков)
Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] [raid10]
md0 : active raid1 nvme7n1p2[2] nvme8n1p2[1] nvme2n1p2[0]
1952279552 blocks super 1.2 [3/2] [UU_]
[=>...................] recovery = 7.6% (148611072/1952279552) finish=146.1min speed=205728K/sec
bitmap: 5/15 pages [20KB], 65536KB chunk
md127 : active raid6 nvme11n1p2[9](S) nvme5n1p2[8](S) nvme12n1p2[7] nvme1n1p2[0] nvme9n1p2[5] nvme6n1p2[4] nvme10n1p2[6] nvme3n1p2[2] nvme4n1p2[3] nvme0n1p2[1]
11713683456 blocks super 1.2 level 6, 512k chunk, algorithm 2 [8/7] [UUUUUUU_]
[=>...................] recovery = 9.1% (179126524/1952280576) finish=112.4min speed=262720K/sec
bitmap: 4/15 pages [16KB], 65536KB chunk
Я также видел, что кто-то отметил, что необходимо остановить mdadm и перезапустить его, но это снова не сработало.
sudo killall mdadm
sudo mdadm --monitor --scan --mail [email protected] --daemonise
Это на свежей установке 24.04.2, mdadm v4.3. Я также заметил, что имена устройств массива отображаются как игнорируемые, что, как мне кажется, не является проблемой, но я включил это на всякий случай (и если есть простой способ изменить это даже на массиве, используемом для ОС, было бы хорошо знать). Изначально массивы были md0 и md1, но 1 изменился на 127 после перезагрузки, поэтому я использую UUID в fstab, это не проблема, но, опять же, было бы хорошо, если бы это не изменялось.
mdadm: Value "ubuntu-server:1" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.
mdadm: Value "ubuntu-server:0" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.
.
Ответ или решение
Ваша проблема связана с использованием резервных дисков в двух разных RAID-массивах с помощью утилиты mdadm
в системе. Вы хотите, чтобы два запасных диска могли автоматически использоваться любым из массивов в случае выхода из строя, особенно при отказе второго диска в период восстановления. Давайте разберем, как это можно реализовать в системе.
Теория
Утилита mdadm
позволяет объединять физические диски в RAID-массивы на уровне программного обеспечения в Linux. Существует функциональность по назначению "резервных групп" (spare group), что позволяет нескольким массивам иметь общий пул резервных дисков. Когда один из дисков в массиве выходит из строя, резервный диск из этой группы может быть автоматически использован для восстановления массива.
Пример
Для иллюстрации разберем следующий пример настройки:
ARRAY /dev/md/ubuntu-server:1 metadata=1.2 UUID=2aade141:cd708a11:ce218c5b:88e6a1cb spare-group=shared
ARRAY /dev/md/ubuntu-server:0 metadata=1.2 UUID=b99fe735:32b1db20:5164600b:c635da79 spare-group=shared
В этой конфигурации используется одна и та же группа запасных дисков (spare-group=shared
) для обоих массивов. Это означает, что любой массив может использовать запасные диски из этой группы в случае отказа одного из своих дисков.
Применение
Теперь перейдем к практическому аспекту. Опираясь на предоставленные вами данные, можно выделить несколько моментов, которые нужно учесть для успешной настройки резервных дисков:
-
Общая конфигурация и настройки в
mdadm.conf
: В вашем файле конфигурацииmdadm.conf
присутствует правильная настройка дляspare-group
. Однако, для того чтобы эта функциональность работала корректно, есть несколько нюансов, которые важно соблюдать:- Убедитесь, что запасные диски действительно назначены массивам. Это можно проверить с помощью команды
mdadm --detail /dev/md/ubuntu-server:0
и/dev/md/ubuntu-server:1
. Резервные диски должны отображаться как "(S)". - Возможно, вам потребуется явно добавлять запасные диски в вашу группу при помощи команды
mdadm --add /dev/mdX /dev/sdy
.
- Убедитесь, что запасные диски действительно назначены массивам. Это можно проверить с помощью команды
-
Перезапуск демона мониторинга: Если демон
mdadm
мониторинга не работает должным образом, резервные диски могут не срабатывать автоматически. Перезапуск демона, как вы и делали — это правильный шаг:sudo killall mdadm sudo mdadm --monitor --scan --mail [email protected] --daemonise
Однако, убедитесь, что после этого демон успешно перезапустился и сканирует ваши массивы.
-
Просмотр и проверка состояний с помощью
/proc/mdstat
: Используйте информацию из/proc/mdstat
для диагностики текущего состояния массивов и резервных дисков. Убедитесь, что они активно занесены в конфигурацию. -
Устранение проблем с именами массивов: Обратите внимание на сообщения типа "Value cannot be set as devname". На самом деле это предупреждение указывает на то, что использование нестандартных имен может стать причиной проблем при назначении или идентификации массивов.
-
Версия программного обеспечения и окружение: Иногда такие проблемы могут быть вызваны багами в конкретной версии программного обеспечения. Возможно, стоит проверить наличие обновлений для
mdadm
или использовать более стабильную версию, если такая есть.
Заключение
Если вы все еще сталкиваетесь с тем, что резервные диски не переключаются между массивами на лету, стоит обратить внимание на документацию и форумы, где могут быть обсуждены проблемы похожих конфигураций. Иногда мелочи, такие как порядок инициализации дисков при загрузке, могут влиять на работу резервной группы.
Разумеется, регулярные резервные копии данных и мониторинг состояния дисков через мониторинг SMART будут необходимыми мерами для обеспечения безопасности ваших данных, особенно в процессе отладки и тестирования конфигураций RAID.