Восcтановление RAID после сбоя в Debian

Всегда легко говорить о восстановление RAID массива, если все вы делали сами и с нуля. Тут вам и карта в руки. И количество разделов, и структура все вам знакома. Сложнее когда сервер чужой и уже рабочий, соответственно придется разбираться. Если же учесть что вы в первый раз восстанавливаете RAID задача усложняется, поскольку любая ошибка может привести к сбою сервера.

Да и помочь вам мало кто сможет, службы поддержки от потенциально опасных задач пытаются откреститься.

Понятно что для квалифицированного сотрудника это мало вероятно, но зачем рисковать. Так что в бой пойдем одни с книжкой в руках.

Для начала нам нужно определиться, что у нас RAID массивом. Проверяем его состояние:

cat /proc/mdstat

Так выглядит классический, RAID1 в рабочем состояние при двух винтах.

Восстановление RAID после сбоя в Debian

При ошибке [UU] будет иметь вид [U_] [_U] в зависимости от диска, вышедшего из строя.

Personalities : [raid1] 
md1 : active raid1 sdb3[0] sda3[2](F) 
1860516800 blocks [2/1] [U_] 
md0 : active raid1 sdb1[0] sda1[2](F) 
499904 blocks [2/1] [U_] 
 

К сожалению, в момент написания статьи у меня RAID массив уже восстанавливался, а сделать скрин, я попросту забыл, так что довольствуемся текстом и картинками в перемешку.

Как мы видим, диск sda вышел из строя, соответственно разделы sda1 и sda3 вылетели из массивов, соответственно я предполагаю, что sda2 вышел из строя тоже, но не задействован в рейд.

Проверяем какие диски у нас на данный момент есть в системе.

fdisk –l

Его я приводить не буду, но думаю вам почитать лучше там.

Для простоты я использую

fdisk –l | grep /dev/
Восстановление RAID после сбоя в Debian

Как видим, диск вообще из системы пропал, и мы не сможем пометить разделы как «ошибочные» Но зато мы видим четко 3 раздела на sdb это:

  • sdb1 отданный под md0 очевидно это /boot
  • sdb2 явно swap соответственно
  • sda3 наши данные

Ну и основной диск sdb3 его копия sda3 ныне почившая, остальные соответственно.

Проверяем:

vim /etc/fstab
Восстановление RAID после сбоя в Debian

Все верно, в системе было два диска побитых по 3 раздела + 1 ssd накопитель

Помечаем раздел как сбойный раздел

mdadm --manage /dev/md0 --fail /dev/sda1

Однако видим:

mdadm: cannot find /dev/sda1: No such file or directory

Пробуем удалить раздел:

 mdadm --manage /dev/md0 --remove /dev/sda1

mdadm: cannot find /dev/sda1: No such file or directory

Что же происходит, мы сделали все по правилам, пометили как сбойный и попробовали удалить, однако ни один из вариантов не сработал вообще. Дело тут в том что диск вообще из системы пропал, и следовательно система честно отвечает что удалить его не может поскольку диска попросту нет. Тут я в свое время впал в небольшой ступор, поскольку вариантов удалить не так уж и много. Но нашелся вариант удаления и отсутствующих дисков

mdadm /dev/md0 -r detached mdadm /dev/md1 -r detached

В таком случае мы их сможем удалить, поскольку массивов два соответственно чистим каждый из них.

Далее все просто. Просим службу поддержки поменять диски, или делаем это самостоятельно. Единственное на что пришлось обратить внимание так на то что smart отказался давать серийник дисков отсутствующих в системе.

smartctl --all /dev/sda|grep Serial

klondike-server:~# smartctl -all /dev/sda

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)

Copyright © 2002–10 by Bruce Allen, http://smartmontools.sourceforge.net

Так что в службу поддержки пришлось писать о замене диска sda, но в связи с отсутствием возможности посмотреть серийник, были перечислены диски НЕ требующие замены. В привычку у меня вошел и еще один момент, я всегда указываю какой именно диск менять и другие диску категорически прошу не менять. Даже при нахождение на них сбоев, поскольку я попросту мог их не забэкапить (было дело выкинули не реплицируемый SSD накопитель, на котором болтались базы данных 300 сайтов.

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

После замены диска (уж не знаю зачем германцы тормозят сервера для замены диска это остается для меня тайной).

fdisk -l
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes 
255 heads, 63 sectors/track, 243201 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x00071549 

Device Boot Start End Blocks Id System 
/dev/sdb1 1 63 500000 fd Linux raid autodetect 
Partition 1 does not end on cylinder boundary. 
/dev/sdb2 63 312 1998848 82 Linux swap / Solaris 
Partition 2 does not end on cylinder boundary. 
/dev/sdb3 312 231935 1860516864 fd Linux raid autodetect 
 
Disk /dev/sdc: 60.0 GB, 60022480896 bytes 
255 heads, 63 sectors/track, 7297 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x00000000 
 
Disk /dev/sdc doesn't contain a valid partition table 
 
Disk /dev/md0: 511 MB, 511901696 bytes 
2 heads, 4 sectors/track, 124976 cylinders 
Units = cylinders of 8 * 512 = 4096 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x00000000 
 
Disk /dev/md0 doesn't contain a valid partition table 
 
Disk /dev/md1: 1905.2 GB, 1905169203200 bytes 
2 heads, 4 sectors/track, 465129200 cylinders 
Units = cylinders of 8 * 512 = 4096 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x00000000 
 
Disk /dev/md1 doesn't contain a valid partition table 
 
Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes 
255 heads, 63 sectors/track, 243201 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x00000000 
 
Disk /dev/sdd doesn't contain a valid partition table

Смотим на систему, видим появился чистенький диск /dev/sdd и он не размечен.

Нам осталось разбить его на разделы нужного нам размера и добавить нужный раздел в нужный массив.

На самом деле все куда проще, поскольку RIAD1 и разделы у нас должны быть идентичны мы их попросту скопируем с рабочего диска.

Внимательно делайте это действие. Копируем с sdb на sdd

sfdisk -d /dev/sdb | sfdisk /dev/sdd

Однако, я в начале сделаю backup.

sfdisk -d /dev/sdb > /var/backup/sdb.part

Восстановим с backup на другой диск, поскольку диск реципелент совершенно чистый, добавим -force

  sfdisk  /dev/sdd < /var/backup/sdb.part –force

Проверяем.

Восстановление RAID после сбоя в Debian

Как видим разметка в наличие.

Остается добавить их в соответствующие массивы.

mdadm --add /dev/md0 /dev/sdd1 mdadm --add /dev/md1 /dev/sda3
Восстановление RAID после сбоя в Debian

Процесс восстановления запущен, а md0 очень маленький уже восстановил свою работоспособность.

Осталось нам заменить sda2 на sdd2 в /etc/fstab

vim /etc/fstab
Восстановление RAID после сбоя в Debian

И ждем восстановление основного массива.

Если процесс восстановления идет слишком медленно или слишком сильно ест ресурсы системы, можно искусственно понизить скорость восстановлениия или увеличить ее.

Проверяем:

cat /proc/sys/dev/raid/speed_limit_min

Изменяем:

echo 50000 > /proc/sys/dev/raid/speed_limit_min

Можно тут:

vim /etc/sysctl.conf

Выставляем нужные нам пределы

dev.raid.speed_limit_min = 50000 
dev.raid.speed_limit_max = 200000 

Для вступления изменений в силу.

sysctl -p

На этом все.

Дополнительно: sfdisk не работает!

# sfdisk -s /dev/sda

WARNING: GPT (GUID Partition Table) detected on ’/dev/sda’! The util sfdisk doesn’t support GPT. Use GNU Parted.

В данном случае утилита sysctl не сможет работать с дисками с GPT, для переноса разделов нам понадобится другая утилита.

Устанавливаем пакет gdisk

apt-get install gdisk

Копируем таблицу разделов с рабочего диска на замененный:

ВНИМАТЕЛЬНО СИНТАКСИС! sgdisk -R <Новый_диск> <Рабочий_диск>

sgdisk -R /dev/sda /dev/sdb

Успешный результат даст нам: The operation has completed successfully.

Теперь нам изменить у копи GUID, поскольку он тоже скопирован.

sgdisk -G /dev/sda

Смотрим результат:

gdisk -l /dev/sda
Восстановление RAID после сбоя в Debian

Оставить комментарий