Спасение данных с умирающего диска

Не далее, чем вчера пришлось заниматься вытаскиванием данных с диска, по которому строевым шагом пошли бедблоки. Методика некоторое время обдумывалась, потом была приведена в исполнение. Логика проста: ставим в сервер рядом с проблемным диском такой же по размеру (в моем случае это были Seagate и WD, так что производитель не суть важен, хотя новый честно подбирал похожий по параметрам) и вместо конвульсий в виде dd и прочего копирования пробуем по-тихому отзеркалить все на новый диск. Итак, приступим:

# echo 'geom_mirror_load=YES' >> /boot/loader.conf
# sysctl kern.geom.debugflags=16

Здесь мы включили модуль geom_mirror при загрузке системы и режим отладки, при котором возможно создание программного зеркала. Создаем массив и запихиваем туда проблемный диск:

# gmirror label -v -b round-robin gm0 /dev/ad4
Metadata value stored on /dev/ad4.
Done.

Далее надо поправить /etc/fstab, заменив подстроку /dev/ad4 на /dev/mirror/gm0. В итоге вместо записей вида

/dev/ad4s1a             /               ufs     rw              1       1

получится

/dev/mirror/gm0s1a             /               ufs     rw              1       1

Перезагружаемся в single user mode (Это важный момент, его нет в статьях по настройке gmirror — обычно все отрабатывает нормально и без него. Но в случае с проблемным диском он может и не отзеркалиться.) Далее:

# gmirror insert gm0 /dev/ad7

После чего команда gmirror status некоторое время будет показывать приблизительно следующее:

Name    Status  Components
 mirror/gm0  DEGRADED  ad4
                  ad7 (1%)

Что будет означать, что идет процесс перестройки зеркала. после того, как DEGRADED сменится на COMPLETE, можно тушить сервер и заменять проблемный диск новым. После чего загружаемся и разбираем зеркало. Сначала попросим gmirror забыть о лишнем диске ad7 (теперь он стал ad4):

# gmirror forget gm0

Теперь gmirror status покажет такое:

Name    Status  Components
mirror/gm0  COMPLETE ad4

После чего опять правим /etc/fstab, меняем /dev/mirror/gm0 назад на /dev/ad4 и просим gmirror вытащить из массива последний диск:

# gmirror remove gm0 /dev/ad4

Машина самостоятельно уходит в перезагрузку, по окончании которой зеркала нет, новый диск называется точно так, как старый и данные на нем остались те, что надо.

Вам также может понравиться

Об авторе jared

1 комментарий

  1. Можно ещё было перелить данные с помощью утлтты tar (также желательно в single user mode). Недостаток подобного метода — пришлось бы готовить диск (разбивка, создание ФС и т.д.), достоинство — скорость (если сравнивать с зеркалированием).

    Ещё одно моаленькое «но»: описаный в статье метод может быть неприменим в том случае, когда используется GPT, т.к. подсистема GEOM пишет метаданные в конец раздела (в данном случае — диска), где располагается резервная копия таблицы разделов GPT.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *