Intereting Posts
как связать команды типа «Ctrl + C» с одним ключом (например, «F5»)? SHH Туннелирование принимается только на некоторых портах rsync игнорировать владельца, группу, время и perms Создание неформатированного раздела с нераспределенного дискового пространства Переименовать подмножество файлов в каталоге Будут ли компилировать модули make-kpkg? Время ожидания SSH. это не клиент или сервер … что теперь? получить части строки, используя сценарий оболочки Как найти только файлы, с которыми успешно завершена команда xyz? Как установить цвет вывода по умолчанию / вещи, введенные в Bash Alias ​​или Intercept сложная команда bash с args Идентификация MaxSpeed ​​связанного интерфейса полностью игнорировать строки, начинающиеся с определенного шаблона совместное использование папок в виртуальной коробке Удаление миллиардов файлов из каталога при одновременном прогрессе

Как безопасно заменить диск с не-неудачей в массиве RAID RAID5?

У меня есть программный массив RAID5 (Linux md) на 4 дисках.

Я хотел бы заменить один из дисков на новый, не помещая массив в деградированное состояние и, если возможно, в режиме онлайн. Как это возможно?

Это важно, потому что я не хочу:

  • рискуйте подчеркнуть другие диски, чтобы можно было сбой во время восстановления,
  • рискуйте оказаться в «состоянии без паритета», поэтому я не имею страховки в течение некоторого времени.

Я полагаю, что делать это онлайн слишком много, и я должен просто скопировать ( dd ) данные старого диска в новый в автономном режиме, а затем заменить его, но я думаю, что это теоретически возможно …

В некотором контексте : все эти диски работают почти непрерывно более 5,5 лет. Они все еще работают отлично на данный момент, и все они проходят (длинный) SMART самотестирование. Однако у меня есть основания полагать, что один из этих 4 дисков не будет длиться намного дольше (предполагаемый прогностический сбой).

Использование 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, который нашел оригинальное решение (см. Дублированный вопрос ).

Старые ядра

Другие ответы:

  • Подход Джонни : преобразовать массив в RAID6, «заменить» диск, затем вернуться к RAID5,
  • Подход Hauke ​​Laging : кратко удалите диск из массива RAID5, сделайте его частью RAID1 (зеркало) с новым диском и добавьте этот зеркальный диск обратно в массив RAID5 (теоретический) …

Возможно, это будет соответствовать требованиям

  1. онлайн
  2. не нажимайте на какой-либо диск, кроме той, которая должна быть заменена

Но даже если следующие могут работать, вы, вероятно, не найдете каких-либо рекомендаций такого рода «в книгах» …

Идея:

  1. Снять диск OLD из массива (на короткое время): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Создайте новое устройство md (RAID-1) с дисков OLD и NEW: 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, это станет немного сложнее.

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

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

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