Перейти к основному содержимому
Заменить диск в RAID
Последнее изменение:

Заменить диск в RAID

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

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

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

Удалить диск из массива

Проверьте, как размечен диск в массиве:

cat /proc/mdstat

Personalities : [raid1]
md1 : active raid1 sda3[0] sdb3[1]
975628288 blocks super 1.2 [2/2] [UU]
bitmap: 3/8 pages [12KB], 65536KB chunk

md0 : active raid1 sda2[2] sdb2[1]
999872 blocks super 1.2 [2/2] [UU]

unused devices: <none>

В данном случае массив собран так, что md0 состоит из sda2 и sdb2, md1 — из sda3 и sdb3.

На этом сервере md0 — это /boot, а md1 — своп и корень.

lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 985M 1 loop
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 977M 0 part
│ └─md0 9:0 0 976.4M 0 raid1
└─sda3 8:3 0 930.6G 0 part
└─md1 9:1 0 930.4G 0 raid1
├─vg0-swap_1 253:0 0 4.8G 0 lvm
└─vg0-root 253:1 0 925.7G 0 lvm /
sdb 8:16 0 931.5G 0 disk
├─sdb1 8:17 0 1M 0 part
├─sdb2 8:18 0 977M 0 part
│ └─md0 9:0 0 976.4M 0 raid1
└─sdb3 8:19 0 930.6G 0 part
└─md1 9:1 0 930.4G 0 raid1
├─vg0-swap_1 253:0 0 4.8G 0 lvm
└─vg0-root 253:1 0 925.7G 0 lvm /

Удалите sdb из всех устройств:

mdadm /dev/md0 --remove /dev/sdb2
mdadm /dev/md1 --remove /dev/sdb3

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

В этом случае перед удалением пометьте диск как сбойный:

mdadm /dev/md0 -f /dev/sdb2
mdadm /dev/md1 -f /dev/sdb3

Снова выполните команды по удалению разделов из массива.

После удаления сбойного диска из массива запросите замену диска, создав тикет с указанием s/n сбойного диска. Наличие downtime зависит от конфигурации сервера.

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

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

Установите gdisk:

apt-get install gdisk -y

Выполните команду:

gdisk -l /dev/sda

Где /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

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

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

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

sgdisk -R /dev/sdb /dev/sda

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

Второй способ копирования разметки:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb

После копирования присвойте диску новый случайный UUID:

sgdisk -G /dev/sdb

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

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

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

Здесь первым пишется диск, с которого копируется разметка, а вторым — на который копируется.

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

sfdisk -R /dev/sdb

Добавить диск в массив

Если на /dev/sdb созданы разделы, то можно добавить диск в массив:

mdadm /dev/md0 -a /dev/sdb2
mdadm /dev/md1 -a /dev/sdb3

После добавления диска в массив должна начаться синхронизация. Скорость зависит от размера и типа диска (ssd/hdd):

cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda3[1] sdb3[0]
975628288 blocks super 1.2 [2/1] [U_]
[============>........] recovery = 64.7% (632091968/975628288) finish=41.1min speed=139092K/sec
bitmap: 3/8 pages [12KB], 65536KB chunk

md0 : active raid1 sda2[2] sdb2[1]
999872 blocks super 1.2 [2/2] [UU]

unused devices: <none>

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

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

Если сервер загружен в нормальном режиме или в infiltrate-root, то это делается одной командой:

grub-install /dev/sdb

Если сервер загружен в Recovery или Rescue (т.е. с live cd), то для установки загрузчика:

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

    mount /dev/md2 /mnt
  2. Смонтируйте boot:

    mount /dev/md0 /mnt/boot
  3. Смонтируйте /dev, /proc и /sys:

    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
  4. Выполните chroot в примонтированную систему:

    chroot /mnt
  5. Установите grub на sdb:

    grub-install /dev/sdb

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

Заменить диск, если он сбойный

Диск в массиве можно условно сделать сбойным с помощью ключа --fail (-f):

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

или

mdadm /dev/md0 -f /dev/sda1

Сбойный диск можно удалить с помощью ключа --remove (-r):

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

или

mdadm /dev/md0 -r /dev/sda1

Добавить новый диск в массив можно с помощью ключей --add (-a) и --re-add:

mdadm /dev/md0 --add /dev/sda1

или

mdadm /dev/md0 -a /dev/sda1

Ошибка при восстановлении загрузчика после замены диска в RAID1

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

root #grub-install --root-directory=/boot /dev/sda
Could not find device for /boot/boot: not found or not a block device

В таком случае выполните:

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