Замена диска в софт RAID массиве на ОС Linux

У нас есть сервер в котором 2 диска: /dev/sda и /dev/sdb. Эти диски собраны у нас в софтверный RAID1 с помощью mdadm.

Один из дисков вышел из строя, в нашем случае это /dev/sdb.

I. Удаление диска из массива 

Перед заменой диска желательно убрать диск из массива. Для начала проверим как размечен диск в массиве:

# cat /proc/mdstat

Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]

md2 : active raid1 sda4[0] sdb4[1]

      1456504640 blocks super 1.2 [2/2] [UU]

      

md1 : active raid1 sda3[0] sdb3[1]

      7996352 blocks super 1.2 [2/2] [UU]

      

md0 : active raid1 sda2[0] sdb2[1]

      499392 blocks super 1.2 [2/2] [UU]

      

unused devices: <none>

Bash

В данном случае массив собран так. Что md0 состоит из sda2 и sdb2, md1 из sda3 и sdb3, md2 из sda4 и sdb4. На этом сервере md0 это /boot, md1 — своп, md2 — корень. Убираем sdb из всех устройств.

# mdadm /dev/md0 --remove /dev/sdb2

# mdadm /dev/md1 --remove /dev/sdb3

# mdadm /dev/md2 --remove /dev/sdb4

Bash

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

# mdadm /dev/md0 -f /dev/sdb2

# mdadm /dev/md1 -f /dev/sdb3

# mdadm /dev/md2 -f /dev/sdb4

Bash

А затем снова выполним команды по удалению разделов из массива. Все, мы удалили сбойный диск из массива. Теперь можем писать в дата центр запрос на замену диска.

II. Добавление диска в массив после замены 

1. Определение таблицы разделов(GPT или MBR) и перенос её на новый диск

После замены поврежденного диска нужно добавить новый диск в массив. Для этого надо определить какая у нас таблица разделов: GPT или MBR. Для этого будем использовать gdisk Установим gdisk:

# apt-get install gdisk -y

Bash

Выполняем:

# gdisk -l /dev/sda

Bash

Где /dev/sda — исправный диск находящийся в raid. В выводе будет примерно это для MBR:

Partition table scan:

MBR: MBR only

BSD: not present

APM: not present

GPT: not present

И примерно это для GPT:

Partition table scan:

MBR: protective

BSD: not present

APM: not present

GPT: present

Bash

Перед добавлением диска в массив нам нужно на нем создать разделы в точности такие же как и на sda. В зависимости от разметки диска это делается по разному.

Копирование разметки для GPT:

# sgdisk -R /dev/sdb /dev/sda

Bash

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

Даем диску новый случайный UIDD:

# sgdisk -G /dev/sdb

Bash

Копирование разметки для MBR:

# sfdisk -d /dev/sda | sfdisk /dev/sdb

Bash

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

# sfdisk -R /dev/sdb

Bash

2. Добавление диска в массив

Когда мы создали разделы на /dev/sdb, то можно добавлять диск в массив.

# mdadm /dev/md0 -a /dev/sdb2

# mdadm /dev/md1 -a /dev/sdb3

# mdadm /dev/md2 -a /dev/sdb4

Bash

III. Установка загрузчика 

После добавления диска в массив нужно установить на него загрузчик. Если сервер загружен в нормальном режиме, то это делается одной командой:

# grub-install /dev/sdb

Bash

Если сервер загружен в recovery или rescue, т.е с live cd, то установка загрузчика выглядит следующим образом.

Монтируем корневую файловую систему в /mnt:

# mount /dev/md2 /mnt

Bash

Монтируем boot:

# mount /dev/md0 /mnt/boot

Bash

Монтируем /dev, /proc и /sys:

# mount --bind /dev /mnt/dev

# mount --bind /proc /mnt/proc

# mount --bind /sys  /mnt/sys

Bash

Затем делаем chroot в примонтированную систему:

# chroot /mnt

Bash

И устанавливаем grub на sdb:

# grub-install /dev/sdb

Bash

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

Если при установке grub вы получаете ошибку следующего содержания:

root #grub-install --root-directory=/boot /dev/sda

Could not find device for /boot/boot: not found or not a block device

Bash

Выполните:

root #grep -v rootfs /proc/mounts > /etc/mtab

Bash

—-

Дополнительные команды:

lshw — Эта программа показывает информацию не только о HDD, так же она выводит в удобном для вас формате (TXT-формате, HTML или XML):

# lshw -C disk
# lshw -class disk -class storage

Bash

Если вам нужно вывести информацию только об установленных дисках на вашей ОС, вы можете использовать:

# lshw -short -C disk