У меня есть программный массив RAID5 (Linux md) на 4 дисках.
Я хотел бы заменить один из дисков на новый, не помещая массив в деградированное состояние и, если возможно, в режиме онлайн. Как это возможно?
Это важно, потому что я не хочу:
Я полагаю, что делать это онлайн слишком много, и я должен просто скопировать ( dd
) данные старого диска в новый в автономном режиме, а затем заменить его, но я думаю, что это теоретически возможно …
В некотором контексте : все эти диски работают почти непрерывно более 5,5 лет. Они все еще работают отлично на данный момент, и все они проходят (длинный) SMART самотестирование. Однако у меня есть основания полагать, что один из этих 4 дисков не будет длиться намного дольше (предполагаемый прогностический сбой).
Поскольку mdadm
3.3 (выпущен 2013, 3 сентября), если у вас есть ядро 3.2+ , вы можете действовать следующим образом:
# mdadm /dev/md0 --add /dev/sdc1 # mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1
sdd1
– это устройство, которое вы хотите заменить, sdc1
является предпочтительным устройством для этого и его нужно объявить как запасной для вашего массива.
Опция --with
является необязательной, если не указано, будет использоваться любой доступный запасной.
Примечание. Вам все равно требуется ядро 3.2+ .
Во-первых, добавьте новый диск в качестве запасного (замените md0
и sdc1
на ваш RAID и дисковое устройство соответственно):
# mdadm /dev/md0 --add /dev/sdc1
Затем инициируйте операцию замены копии следующим образом ( sdd1
является неисправным устройством):
# echo want_replacement > /sys/block/md0/md/dev-sdd1/state
Система скопирует все считываемые блоки из sdd1
в sdc1
. Если речь идет о нечитаемом блоке, он восстановит его из четности. Как только операция будет завершена, первый запасной (здесь: sdc1
) станет активным, а неисправный диск будет отмечен как сбой (F), чтобы вы могли его удалить.
Примечание: кредит идет на frostschutz и Ansgar Esztermann, который нашел оригинальное решение (см. Дублированный вопрос ).
Другие ответы:
Возможно, это будет соответствовать требованиям
Но даже если следующие могут работать, вы, вероятно, не найдете каких-либо рекомендаций такого рода «в книгах» …
Идея:
mdadm --manage /dev/raid5 --fail /dev/OLD
mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
mdadm --manage /dev/raid5 --re-add /dev/md42
Что должно 🙂 быть:
Следите за ходом синхронизации ( cat /proc/mdstat
или mdadm --monitor
). Если синхронизация завершена, выньте RAID-1 из RAID-5, остановите RAID-1, повторно добавьте / dev / NEW в RAID-5. Если все в порядке, перезапишите суперблоки mdraid на / dev / OLD, чтобы избежать проблем: mdadm --zero-superblock
Предупреждение . Быстрая синхронизация RAID-5 может работать только при использовании растрового изображения. Если у вас его нет, то лучше сначала провести тест с манекеном RAID-5 (без растрового изображения). Или добавьте его. Должно быть возможно по крайней мере добавление внешнего. В противном случае может потребоваться остановить RAID-5 перед сменой устройств. Если вы загрузитесь с RAID-5, это станет немного сложнее.
Если вы не против запуска RAID-6 (2 диска четности, а не 1), и если вы используете mdadmin 3.1.x или выше, вы можете преобразовать свой массив RAID-5 в RAID-6, чтобы добавить дополнительный диск четности , Тем не менее, это приведет к усилению массива во время перестройки. И это имеет некоторые последствия для производительности, так как во время записи существует множество дисков для проверки четности.
Но если он завершается успешно, вы можете сохранить свой диск с ошибкой на месте, а когда он в конечном итоге не удастся, у вас все еще есть защита от четности для массива. Я думаю, вы можете преобразовать массив из RAID6 обратно в RAID5, если вы не дожидаетесь его хранения в качестве RAID6.
Я не знаю онлайн-способа сохранить массив как RAID-5 и заменить диск, не помещая массив в деградированный режим, так как я думаю, вы должны отметить его как неспособный заменить его. Идея вашей dd-копии может быть способом сделать это.