Поиск по сайту:

Как заменить отказавший жесткий диск в программном RAID-массиве Linux


На этой странице

  1. 1 Предварительное примечание
  2. 2 Как определить, что жесткий диск вышел из строя?
  3. 3 Удаление неисправного диска
  4. 4 Добавление нового жесткого диска

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

1 Предварительное примечание

В этом примере у меня есть два жестких диска, /dev/sda и /dev/sdb, с разделами /dev/sda1 и /dev/sda2, а также /dev/sdb1 и /dev/sdb2.

/dev/sda1 и /dev/sdb1 составляют массив RAID1 /dev/md0.

/dev/sda2 и /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: <none>

Затем мы удаляем /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: <none>

Теперь повторим те же шаги для /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: <none>
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: <none>

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

shutdown -h now

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

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

После смены жесткого диска /dev/sdb загрузите систему.

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

apt-get install gdisk

Для дистрибутивов Linux на основе RedHat, таких как CentOS, используйте:

yum install gdisk

и для использования OpenSuSE:

yast install gdisk

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

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: <none>

Когда синхронизация завершится, вывод будет выглядеть так:

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: <none>

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