Menu

Меняем отказавший жёсткий диск в программном RAID в Linux

В данной статье рассмотрим, как удалить неисправный жёсткий диск из массива Linux RAID1 (программное обеспечение RAID) и добавить новый жёсткий диск в массив RAID1 без потери данных. Для копирования схемы раздела диска будем использовать gdisk. Данная программа также работает на большинстве жёстких дисков с GPT (GUID Partition Table).

 

1 Предварительные замечания

Рассмотрим в качестве примера 2 жёстких диска, /dev/sda и /dev/sdb, с разделами /dev/sda1, /dev/sda2, /dev/sdb1 и /dev/sdb2.

/dev/sda1 and /dev/sdb1 создают массив RAID1 /dev/md0.
/dev/sda2 and /dev/sdb2 создают массив RAID1 /dev/md1.
/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1

/dev/sdb неисправен и нам потребуется заменить его.

2 Как узнать, что жёстких диск неисправен?

Если жёсткий диск неисправен, в журнале регистрации событий появится большое количество ошибок, например в /var/log/messages или /var/log/syslog.

Можно также выполнить:

cat /proc/mdstat

и вместо строки [UU] получится [U_], что означает, что массив RAID1 неполон.

3 Удаление неисправного жёсткого диска

Для удаления /dev/sdb, пометим /dev/sdb1 и /dev/sdb2 как неисправные и удалим их из соответствующих массивов RAID (/dev/md0 и /dev/md1).

Для начала отметим /dev/sdb1 как неисправный:

mdadm --manage /dev/md0 --fail /dev/sdb1

Выходные данные в

cat /proc/mdstat

должны выглядеть следующим образом:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: 

Затем удалим /dev/sdb1 из /dev/md0:

mdadm --manage /dev/md0 --remove /dev/sdb1

Выходные данные должны быть следующими:

server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

и

cat /proc/mdstat

должно быть следующим:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: 

Теперь проделаем тоже самое с /dev/sdb2 (который является частью /dev/md1):

mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[2](F)
24418688 blocks [2/1] [U_]
unused devices: 
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
24418688 blocks [2/1] [U_]
unused devices: 

Затем выключим систему:

shutdown -h now

и заменим старый жёсткий диск /dev/sdb на новый (по крайней мере объём нового жесткого диска должен совпадать со старым –если размер на несколько МБ меньше, то перестроить массивы будет невозможно).

4-Добавление нового жёсткого диска

После замены жёсткого диска /dev/sdb, включим систему.

Первым делом необходимо создать точно такое же разбиение на разделы, что и в /dev/sda. Выполним это командой sgdisk из пакета gdisk. Если у Вас не установлен gdisk, установите его, выполнив для Debian и Ubuntu следующее:

apt-get install gdisk

Для rpm-дистрибутивов Linux, таких как CentOS:

yum install gdisk

и для OpenSuSE:

yast install gdisk

Следующий шаг необязательный, но рекомендуемый. Для проверки того, что у нас есть резервная копия схемы раздела, воспользуемся sgdisk для записи схем раздела обоих дисков в файл. В нашем случае файл сохраним в /root folder.

sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb

В случае неудачи можно восстановить таблицу разделов с помощью опции --load-backup в sgdisk .

Теперь скопируем схему раздела из /dev/sda в /dev/sdb:

sgdisk -R /dev/sdb /dev/sda

Затем необходимо рандомизировать GUID на новом жёстком диске, чтобы убедится, что он уникален.

sgdisk -G /dev/sdb

Выполним

sgdisk -p /dev/sda
sgdisk -p /dev/sdb

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

Далее добавим /dev/sdb1 в /dev/md0 и /dev/sdb2 в /dev/md1:

mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2

Теперь оба массива (/dev/md0 и /dev/md1) будут синхронизированы.

Результат можно увидеть по команде:

cat /proc/mdstat

Во время синхронизации выходные данные должны выглядеть следующим образом:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec
unused devices: 

А по окончании синхронизации выходные данные должны выглядеть следующим образом:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: 

Поздравляем, Вы успешно заменили /dev/sdb!

4 комментарии

  • Евгений

    написал Евгений

    Воскресенье, 03 Май 2015 16:04

    Благодаря статье Владимира (кстати практически самая качественная в рунете), я заменил диск на рейде сам.
    Единственное, я бы добавил, как создать разделы для MBR и установку загрузчика на заменённый диск.

    Спасибо огромное!!!!

    Пожаловаться
  • Владимир Драч

    написал Владимир Драч

    Воскресенье, 03 Май 2015 16:39

    Евгений, искренне благодарю за отзыв! Очень приятно читать такие комментарии. Я рад, что информация с этого сайта может быть кому-то полезна.

    Пожаловаться
  • Владимир

    написал Владимир

    Пятница, 21 Сентябрь 2018 13:20

    Очень понятно написано, спасибо

    Пожаловаться
  • Ильжан

    написал Ильжан

    Вторник, 03 Август 2021 02:45

    Автору большое спасибо.
    P. S. Опечатка (была) в команде sdgisk -G /dev/sdb

    Пожаловаться
Авторизуйтесь, чтобы получить возможность оставлять комментарии
Go to top