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

Рассмотрим как заменить неисправный жесткий диск ( диск с S.M.A.R.T. ошибками ) в массиве Linux RAID 1 без потери данных. Для работы с схемами разделов будем использовать gdisk. для проверки S.M.A.R.T. используем утилиту smartctl из пакета smartmontools

Для начала установим GDISK.

Debian и Ubuntu

apt-get install gdisk

RedHat(CentOS)

yum install gdisk

Установка SMARTCTL

Debian и Ubuntu

sudo apt-get install smartmontools

RedHat(CentOS)

yum install smartmontools

 1. Вводная

Есть 2-ва жестких диска, с разделами /dev/sda и /dev/sdb, с разделами /dev/sda1, /dev/sda2, /dev/sda3 и /dev/sdb1, /dev/sdb2, /dev/sdb3.

/dev/sda1 and /dev/sdb1 загрузочный диск

/dev/sda2 and /dev/sdb2 создают массив RAID1 /dev/md1.

/dev/sda3 and /dev/sdb3 создают массив RAID1 /dev/md2.

/dev/sda2 + /dev/sdb2 = /dev/md1

/dev/sda3 + /dev/sdb3 = /dev/md2 
Необходимо заменить 2-й диск /dev/sdb

2. Как узнать что необходимо заменить диск

Проверяем исправность массива


cat /proc/mdstat

 В штатном режиме видим [UU], если видим [U_] - 2-й диск не исправен


smartctl -q errorsonly -a /dev/sdb

В зависимости от ошибок принимаем решение о замене диска.

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

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


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

mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3

Проверяем

cat /proc/mdstat

Вывод

Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1] (F) 
      1047552 blocks super 1.2 [2/2] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md2 : active raid1 sda3[0] sdb3[1] (F) 
      3905836032 blocks super 1.2 [2/2] [U_]
      bitmap: 5/30 pages [20KB], 65536KB chunk

unused devices: 

Удаляем разделы из массива

mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3
Вывод

Personalities : [raid1]
md1 : active raid1 sda2[0]
      1047552 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md2 : active raid1 sda3[0]
      3905836032 blocks super 1.2 [2/1] [U_]
      bitmap: 5/30 pages [20KB], 65536KB chunk

unused devices: 

В случае если не поддерживается горячая замена диска то выключаем систему

shutdown -h now
заменяем жесткий диск ( объем нового диска должен быть не меньше исходного )

4. Добавляем новый жесткий диск

После загрузки системы производим перенос схемы разделов с 1-го диска на новый диск, для того используем gdisk

Создаем резервную копию разделов в папку /root/

sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
Копируем схему и рандомизируем GUID на новом жестком диске

sgdisk -R /dev/sdb /dev/sda
sdgisk -G /dev/sdb
Сравниваем разделы

sgdisk -p /dev/sda
sgdisk -p /dev/sdb
Добавляем /dev/sdb2 в /dev/md1 и /dev/sdb3 в /dev/md2

mdadm --manage /dev/md1 --add /dev/sdb2

mdadm: re-added /dev/sdb2

mdadm --manage /dev/md1 --add /dev/sdb3

mdadm: re-added /dev/sdb3
2-й диск добавлен в массив и началась синхронизация Вывод mdstat при синхронизации

Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      1047552 blocks super 1.2 [2/1] [U_]
      [========>]  recovery =  99.9% (1047052/1047552) finish=2.8min speed=127535K/sec

md2 : active raid1 sda3[0] sdb3[1]
      3905836032 blocks super 1.2 [2/1] [U_]
      [========>]  recovery =  99.9% (3905830032/3905836032) finish=2.8min speed=127535K/sec

unused devices: 
По успешному завершению синхронизации

Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md2 : active raid1 sda3[0] sdb3[1]
      3905836032 blocks super 1.2 [2/2] [UU]
      bitmap: 5/30 pages [20KB], 65536KB chunk

unused devices: 

5. Копируем загрузочный диск

dd if=/dev/sda1 of=/dev/sdb1

Партнеры