Title: Восстановление программного RAID1
Author: Viva Calman
Date: 2023-09-17 15:09:13
Correction code: 169495256949276

Есть у меня домашняя файлопомойка в виде подаренного 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

Понятное дело, процесс восстановления не будет мгновенным, но в принципе, в этот момент уже все хорошо.

Дабы не было претензий, весь текст выше — это нетворческое изложение содержимого статьи по ссылке. Я просто изложил это для себя на будущее, чтобы не искать потом.

Метки:
^HOME