замена диска в программном raid1
Применимость: Linux
Слова для поиска: зеркало, сбойный диск
Задача:
Вы получаете сообщения о росте ошибок диска от демона smartd или есть другие признаки, что один из дисков неисправен.
Так или иначе требуется замена диска.
Как это сделать без остановки сервера?
Решение:
1. Определение неисправного диска
Каждый час демон smartd проверяет счетчики ошибок если вы настроили его заранее. Смотрите статью - мониторинг состояния дисков smartd
Демон будет писать уведомления в логи и отправлять почтовые уведомления.
Если уведомления о росте числа ошибок появляются несколько раз в день, то это причина для беспокойства.
пример сообщений в системном журнале
Nov 19 12:25:02 server1 smartd[1949]: Device: /dev/sdb [SAT], SMART Prefailure Attribute: 1 Raw_Read_Error_Rate changed from 82 to 83 Nov 19 12:25:02 server1 smartd[1949]: Device: /dev/sdb [SAT], SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 118 to 119
Проверьте состояние массива
cat /proc/mdstat Personalities : [raid1] md2 : active raid1 sda3[0](F) sdb3[1] 956741496 blocks super 1.2 [2/1] [_U] md1 : active raid1 sda2[0](F) sdb2[1] 19529656 blocks super 1.2 [2/1] [_U] md0 : active raid1 sda1[0](F) sdb1[1] 487412 blocks super 1.2 [2/1] [_U] unused devices: <none>
2. Определение расположения диска
Вы знаете, что, например, неисправен диск sda, но нужно определить какой именно диск называется sda, где он расположен физически.
Для этого можно использовать команду
dd if=/dev/sdX of=/dev/null
На указанном диске загорится лампочка активности. Если сбойный диск вообще мертв, идентифицируйте живой диск и методом исключения определите где мертвый. Главное знать точно где какой диск и не перепутать.
Удаление поврежденного диска
Не торопитесь сразу выдергивать диск. Лучше сперва вывести его из конфигурации массива. Выполните эти команды для каждого раздела и для каждого соответствующего раздела:
Пометить диск как сбойный:
mdadm --manage /dev/mdX --fail /dev/sdbX
Отключить раздел:
mdadm --manage /dev/mdX --remove /dev/sdbX
После удаления диска проверьте состояние массивов
cat /proc/mdstat
cat /proc/mdstat Personalities : [raid1] md2 : active raid1 sdb3[1] 956741496 blocks super 1.2 [2/1] [_U] md1 : active raid1 sdb2[1] 19529656 blocks super 1.2 [2/1] [_U] md0 : active raid1 sdb1[1] 487412 blocks super 1.2 [2/1] [_U]
В этом примере остался в работе диск sdb.
Если Вы не уверены, что ваш сервер поддерживает Горячую Замену Дисков (Hot-Swap) нужно обязательно сервер выключить, вынуть неисправный диск и вставить исправный на его место и включить сервер. Если поддержка есть, то это можно сделать без отключения.
Использование нового диска
Оба диска должны иметь идентичные разделы и mbr
Копирование MBR
dd if=/dev/sda of=/dev/sdb bs=512 count=1
Надо скопировать таблицу разделов на новый диск этой командой:
sfdisk -d /dev/sd? | sfdisk --Linux /dev/sdX
Добавить каждый раздел нового диска в соответствующий массив:
mdadm --manage /dev/mdX --add /dev/sdbX
Убедиться что идет синхронизация
Синхронизация
cat /proc/mdstat Personalities : [raid1] md2 : active raid1 sdb3[2] sda3[0] 960744312 blocks super 1.2 [2/1] [U_] resync=DELAYED md1 : active raid1 sdb2[2] sda2[0] 15624120 blocks super 1.2 [2/1] [U_] [========>............] recovery = 44.1% (6902400/15624120) finish=131.8min speed=1101K/sec md0 : active raid1 sdb1[2] sda1[0] 390132 blocks super 1.2 [2/2] [UU]