Замена диска в программном RAID(mdadm)
В жизни любого администратора Linux систем однажды возникает проблема развалившегося рейда. К счастью, при использовании софтового рейда процедура замена диска не представляет никакой трудности.
Итак перед заменой диска проводим первичный анализ ситуации по выводу команды
root@ubuntu:~# cat /proc/mdstat
вывод здорового рейда выглядит следующим образом:
root@ubuntu:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md127 : active raid1 sdc1[1] sdb1[0] 5235712 blocks super 1.2 [2/2] [UU] unused devices: <none>
В случае каких либо неполадок с диском вывод будет таким:
1) В случае если диск полностью выпал из системы
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md127 : active raid1 sdc1[1] 5235712 blocks super 1.2 [2/1] [_U]
2) В случае если диску плохо, около отвалившихся разделов будет стоять флаг F
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md127 : active raid1 sdc1[1] sdb1(F) 5235712 blocks super 1.2 [2/1] [_U]
Бывает также ситуации когда на сбойном диске несколько разделов и по выводу cat /proc/mdstat
видно что выпал, например, один. В таком случае, если другие разделы участвуют в построении рейд или куда-либо примонтированы нужно дать на них нагрузку, например, чтения и снова проверить вывод команды. Чаще всего в новом выводе уже все разделы будут отмечены флагом F
Так или иначе в любой из ситуаций нам необходимо принять решение о дальнейшем использовании диска или его замене. В ситуации №1 мы можем попробовать переподключить диск и если системе удастся его определить, провести диагностику.
В первую очередь стоит обратить внимание на вывод smartctl -a /dev/<device_name>
и внимательно его изучить. Также можно запустить быстрый тест диска smartctl -t short /dev/<device_name>
и проверить вывод dmesg
на сообщения о плохих блоках. Обычно этих действий хватает чтобы принять решение о дальнейшей судьбе диска.
После того как решение принято мы готовы чинить рейд. Если в выводе /proc/mdstat
есть разделы отмеченные флагом F
, нам нужно прежде всего их удалить.
mdadm /dev/md127 --remove failed
Если на диске несколько разделов и некоторые из них также используются в построении рейд массивов, но было принято решение заменить диск, то такие разделы нужно пометить как сбойные
mdadm /dev/md127 -f /dev/sdb2
и только после этого произвести их удаление.
После замены диска создаем на нем нужную нам разметку и производим добавление новых разделов в рейд
mdadm /dev/md127 --add /dev/sdb1
В случае если было принято решение не менять диск, то достаточно выполнить удаление(remove failed) и также передобавить разделы через опцию --add
При замене диска(загрузочного) в системном рейд Вам может также потребоваться выполнить установку GRUb после всех процедур
grub-install /dev/sdb
процесс синхронизации рейда мы можем наблюдать через тот же вывод cat /proc/mdstat
root@ubuntu:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdc1[1] sdb1[0] 5235712 blocks super 1.2 [2/2] [UU] [======>..............] resync = 30.5% (1601792/5235712) finish=0.2min speed=228827K/sec unused devices: <none>
В конце хочется отметить, что восстановление рейда это довольно высоконагруженная процедура. Если Ваш сервер находиться под нагрузкой рекомендуется снизить скорость синронизации, например через sysctl
root@ubuntu:~# sysctl -a | grep raid dev.raid.speed_limit_max = 200000 dev.raid.speed_limit_min = 1000 root@ubuntu:~# sysctl -w dev.raid.speed_limit_max=80000 dev.raid.speed_limit_max = 80000 root@ubuntu:~# sysctl -a | grep raid dev.raid.speed_limit_max = 80000 dev.raid.speed_limit_min = 1000
Это снизит просадку производительности и потенциальный выход из строя еще одного диска.