Заменить диск в 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), то для установки загрузчика:
-
Смонтируйте корневую файловую систему в
/mnt
:mount /dev/md2 /mnt
-
Смонтируйте
boot
:mount /dev/md0 /mnt/boot
-
Смонтируйте
/dev
,/proc
и/sys
:mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys -
Выполните
chroot
в примонтированную систему:chroot /mnt
-
Установите
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