Как безопасно заменить еще отказавший диск в массиве Linux RAID5?

Короткий ответ:

ssh -t fs "stty isig intr ^N -echoctl ; trap '/bin/true' SIGINT; sleep 1000; echo f" > foo

и остановите программу CTRL+N.

Долгое объяснение:

  1. Необходимо использовать stty опция intr изменить Ваш сервер или локальный символ прерывания для не столкновения друг с другом. В команде выше я изменил символ прерывания сервера на CTRL+N. Можно изменить локальный символ прерывания и оставить один сервера без любых изменений.
  2. Если Вы не хотите, чтобы символ прерывания был в Вашем выводе (и какой-либо другой управляющий символ) использование stty -echoctl.
  3. Необходимо гарантировать, что управляющие символы включаются на ударе сервера, вызванном sshd. Если Вы не делаете можно закончить с процессами, все еще бродящими вокруг после того, как Вы выходите из системы. stty isig
  4. Вы на самом деле ловите SIGINT сигнал trap '/bin/true' SIGINT с пустым оператором. Без прерывания у Вас не будет stdout после сигнала SIGINT на Вашем конце.
26
08.05.2013, 01:43
3 ответа

Используя mdadm 3.3

С тех пор 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 опция является дополнительной, если не указанный, какая-либо доступная запчасть будет использоваться.

Более старая mdadm версия

Примечание: Вам все еще нужны 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, который нашел исходное решение (см. дублирующийся вопрос).

Более старые ядра

Другие ответы предлагают:

  • Подход Johnny: преобразуйте массив в RAID6, "замените" диск, затем обратно в RAID5,
  • Подход Hauke Laging: кратко удалите диск из массива RAID5, сделайте его частью RAID1 (зеркало) с новым диском и добавьте, что зеркало возвращается к (теоретическому) массиву RAID5...
36
27.01.2020, 19:40
  • 1
    mdadm --add все еще необходим прежде --replace будет работать. (mdadm 3.3, Ubuntu 15.10). Если Вы делаете --add после --replace, копирование начнется, как только запчасть добавляется. (Устройство остается отмеченным как "желание замены"). –  Peter Cordes 16.03.2016, 07:51

Это может быть возможным соответствием требованиям

  1. онлайн
  2. не подчеркивайте диск за исключением того, который должен быть заменен

Но даже если следующее может работать, Вы, вероятно, не найдете рекомендации того вида "в книгах"...

Идея:

  1. Возьмите диск, СТАРЫЙ из массива (в течение короткого момента): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Создайте новое md устройство (RAID-1) из дисков, СТАРЫХ и НОВЫХ: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Отложите RAID-1 в массиве (вместо/dev/OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Что должно :-) произойти:

  1. RAID-5 получает/dev/md42 в синхронизации. Это не должно занимать много времени.
  2. RAID-5 является обычно операционным снова (но медленнее).
  3. /dev/NEW синхронизируется с/dev/OLD.

Наблюдайте синхронизирующий прогресс (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, это стало бы немного сложным, все же.

3
27.01.2020, 19:40

Если Вы не возражаете против рабочего RAID-6 (2 диска четности, а не 1), и если Вы выполняете mdadmin 3.1.x или выше, Вы могли бы преобразовать свой массив RAID-5 в RAID-6 для добавления дополнительного диска четности. Это желание поместит массив под напряжением во время восстанавливания, как бы то ни было. И это имеет некоторые последствия производительности, так как существует больше дисков четности для обновления во время записей.

Но если это завершается успешно, затем можно удержать сбойный диск на месте и когда это в конечном счете перестало работать, Вы все еще получили защиту четности для массива. Я думаю, что Вы можете conver массив от RAID6 назад к RAID5, если Вы не ожидаете для хранения его как RAID6.

Я не знаю о способе онлайн сохранить массив как RAID-5 и заменить диск, не помещая массив в ухудшенный режим, поскольку я думаю, что необходимо отметить его, как отказавший заменить его. Ваша идея копии dd могла бы быть способом сделать это.

3
27.01.2020, 19:40

Теги

Похожие вопросы