Есть у меня домашняя файлопомойка в виде подаренного midi-tower системника, напичканного жесткими дисками.
Большая часть дисков собрана в два зеркала RAID1 на хардварном адаптековском контроллере, но еще один раздел представляет из себя программный RAID1-массив, на базе штатных средств Linux.
И вот недавно с этим программным RAID начались проблемы — один из дисков начал сыпать в dmesg тонны ошибок, которые, как единогласно признал интернет, означали, что он поет свою погребальную песнь. В конце концов, этот диск даже не смог пройти проверку при загрузке системы и в итоге она свалилась в rescue-mode.
Благо, у меня был запасной диск аналогичной емкоски, так что простой намечался недолгий (тем более, что я обычно держу файлопомойку выключенной, чтобы диски зря ресурс не вырабатывали). Все, что требовалось сделать — поменять диск и запустить процесс ребилда массива.
Это оказалось проще, чем я думал. Для начала можно подать команду:
# sync
чтобы сбросить на диск все данные из буферов. Это полезно делать, если ваш диск только начал сыпаться по S.M.A.R.T. и не вывалился из системы совсем. В моем случае подавать sync было уже поздно, так как никакие данные на раздел не писались, соответственно, сбрасывать было нечего.
Дальше надо было выяснить, какой именно диск у нас превратился в тыкву. Я это узнал из потока сообщений об ошибках, в других случаях это понятно из того, на каком диске S.M.A.R.T. начал показывать неблагоприятный прогноз, короче говоря, если у вас начал сыпаться диск, вы скорее всего знаете, какой именно и как он называется в системе.
Чтобы пометить диск, как отказавший, подаем команду:
# mdadm --manage /dev/mdX --fail /dev/sdYZ
Где правильно указываем устройство нашего софтрейда и отказавший диск.
После чего проверяем статус массива вообще:
# cat /proc/mdstat
Буква (F) в скобках рядом с именем физического диска будет указывать на то, какой диск мы пометили, как отказавший.
Следующим этапом удаляем этот диск из массива:
# mdadm --manage /dev/mdX --remove /dev/sdYZ
По идее, все это можно делать на горячую, но я не люблю ковырять машину во включенном состоянии, поэтому погасил системник командой shutdown -h now и уже после этого заменил отказавший диск на рабочий. Полезно заранее в том же smartctl посмотреть серийный номер устройства, чтобы случайно не отключить не тот диск.
Заменив диск и загрузившись (в этот раз успешно, не падая в режим восстановления), я скопировал таблицу разделов с оставшегося в массиве диска на новый:
# sfdisk -d /dev/sdX | sfdisk /dev/sdY
Где sdX — диск, который остался в массиве, sdY — наш новый диск. Заметьте, в этом случае, без указания номера раздела, мы работаем с физическими устройствами.
Осталось лишь добавить новый диск в массив, после чего автоматически запустится ребилд:
# mdadm --manage /dev/mdX --add /dev/sdYZ
Процесс ребилда можно контролировать все той же командой
# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sde1[0]
1953381376 blocks super 1.2 [2/1] [U_]
[===>.................] recovery = 19.5% (381606144/1953381376) finish=186.5min speed=140403K/sec
bitmap: 6/15 pages [24KB], 65536KB chunk
Ну а статус массива можно узнать командой
# /sbin/mdadm --detail /dev/mdX
Понятное дело, процесс восстановления не будет мгновенным, но в принципе, в этот момент уже все хорошо.
Дабы не было претензий, весь текст выше — это нетворческое изложение содержимого статьи по ссылке. Я просто изложил это для себя на будущее, чтобы не искать потом.