Замена жесткого диска в софтовом RAID 1

Алгоритм решения:

  1. Определение проблемы
  2. Удаление поврежденного диска
  3. Подготовка нового диска
  4. Добавление жёсткого диска в массив после замены

Определение проблемы

Для начало разберем проблему. Имеется физический сервер с установленным на нём CentOS 7, в котором 2 HDD диска по 2 ТБ: /dev/sda, /dev/sdb. Эти диски собраны в софтварный RAID1. Предположим, что вышел из строя диск — sdb. Проверив диск в массиве, вы увидите следующую картину:

# cat /proc/mdstat


У нас имеется 3 массива:

# /dev/md125 - /boot 
# /dev/md126 - swap 
# /dev/md127 - /

В данном случае мы можем наблюдать, что диски действительно собраны в RAID1. Когда массив в порядке, то он отображается как [UU]. Так как диски зеркальны, то каждый раздел объединен между собой и назван по своему. Например: md125 состоит из sda2,sdb2. Md125 в данном случае это – /boot. Более подробную информацию о разбивки дисков вы можете узнать, командой:

# lsblk

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

# mdadm --detail /dev/md125

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

Для установки нового диска в RAID 1 массив, необходимо удалить сперва сбойный диск. Данную процедура проводится для каждого раздела.

# mdadm /dev/md125 -r /dev/sdb2
# mdadm /dev/md126 -r /dev/sdb1
# mdadm /dev/md127 -r /dev/sdb3

В некоторых случаях, жёсткий диск может быть повреждён частично. Пример: статус [U_] у массива /dev/md127, а у других массивов статус [UU]. В данном случае нам необходимо указать только одну команду:

# mdadm /dev/md127 -r /dev/sdb3

Следовательно остальные разделы будут отображены, как устройство /dev/sdb1 и /dev/sdb2 — впорядке. После попытки удалить раздел из массива, будет отображаться ошибка.

Чтобы исправить и изъять их, необходимо будет выполнить команды:

# mdadm --manage /dev/md125 --fail /dev/sdb2 
# mdadm --manage /dev/md126 --fail /dev/sdb1

Тем самым вы измените их статус на [U_]. Далее провести процедуру, что и с массивом md127.

Посмотрим диски и разделы, входящие в массив, чтобы убедиться, что диск был изъят полность:

# mdadm --detail /dev/md125 
# mdadm --detail /dev/md126 
# mdadm --detail /dev/md127
# cat /proc/mdstat

Теперь диск готов к замене. Необходимо будет отправить запрос через нашу систему тикетов, для замены диска и согласовать время проведения работ с техником.

П.С. Сервер будет остановлен на некоторое время!

Подготовка нового диска

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

Новый диск, будучи в массиве должен иметь абсолютно одинаковое разбиение. В зависимости от используемых типов таблиц разделов (GPT/MBR), нужно использовать соответствующие утилиты для копирования таблиц разделов.

GPT – sgdisk

MBR – sfdisk

Так как у нас диски HDD по 2ТБ, то мы будем использовать утилиту sgdisk. Можно также увидеть, что именно мы будем копировать, на второй диск. Используйте команду:

# gdisk -l /dev/sda


Утилиту можно скачать, используя репозиторий операционной системы. В зависимоти от ОС, необходимо указать корректный менеджер пакетов.

CentOS: yum install sgdisk/sfdisk

Debian/Ubuntu: apt install sgdisk/sfdisk

Создание и восстановление резервного копирования MBR/GPT

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

Для MBR

Создать:

# sfdisk --dump /dev/sdx > sdх_parttable_mbr.bak

Восстановить:

# sfdisk /dev/sdb > sdх_parttable_mbr.bak

Для GPT

Создать:

# sgdisk --backup=sdх_parttable_gpt.bak /dev/sda

Восстановить:

# sgdisk --load-backup=sdx_parttable_gpt.bak /dev/sdb

sda – диск, с которого создаётся копия.

sdb — диск, на который загружается копия таблицы.

Добавление жёсткого диска в массив после замены

Вставте скопированную таблицу разделов с первого диска в новый, используя команду выше. Как только повреждённый диск удалён из массива, можно добавить новый. Это необходимо сделать для каждого раздела.

# mdadm /dev/md125 -a /dev/sdb2 
# mdadm /dev/md126 -a /dev/sdb1 
# mdadm /dev/md127 -a /dev/sdb3

Теперь новый диск является частью массива. Синхронизацию дисков вы можете увидеть, введя команду:

# cat /proc/mdstat


Далее перезагружаем сервер и видим, что все разделы смонтированы правельно:

# lsblk

https://my.fairyhosting.com/knowledgebase.php?action=displayarticle&id=334&language=swedish

**********

Замена сбойного диска в программном RAID массиве.

Ситуация (для примера): с помощью mdadm собран программный RAID1(зеркало) /dev/md0 из 2-х разделов /dev/sda1 и /dev/sdb1.

Задача: заменить сбойный диск /dev/sdb.

Прежде всего, смотрим диагностику:

cat /proc/mdstat

или

mdadm --detail /dev/md0

Если вместо [UU] видим [U_], то дело плохо, целостность одного из дисков нарушена – нужно менять диск.

Для автоматического слежения и мониторинга дисков и массивов можно и нужно использовать возможности пакетов mdadm (monitor mode) и smartmontools (технология S.M.A.R.T.).

-1- Прежде всего, делаем так, чтобы с устройством никто не работал – см. п.1,2 Удаление программного (software) массива RAID.

-2- Помечаем раздел как сбойный:

mdadm --manage /dev/md0 --fail /dev/sdb1

-3- Отключаем раздел (удаляем из RAID1):

mdadm --manage /dev/md0 --remove /dev/sdb1

-4- Выключаем машину, меняем диск.

-5- Создаем через cfdisk или fdisk идентичные разделы, или c помощью sfdisk автоматически копируем структуру разделов первого диска /dev/sda:

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

Этим способом можно пользоваться, поскольку в нашем примере «зеркальный» RAID1. При других уровнях (raid level), нужно разбить диск на раздел(ы) и пометить его(их) типом ФС «Linux raid autodetect».

-6- Добавляем раздел в RAID1 массив:

mdadm --manage /dev/md0 --add /dev/sdb1

-7- Ждем синхронизации массива:

mdadm --wait /dev/md0

http://avreg.net/howto_software-raid-replacing-faulty-drive.html

У нас есть сервер в котором 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>

В данном случае массив собран так. Что 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

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

# mdadm /dev/md0 -f /dev/sdb2
# mdadm /dev/md1 -f /dev/sdb3
# mdadm /dev/md2 -f /dev/sdb4

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

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

  1. Определение таблицы разделов(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:

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

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

# sgdisk -G /dev/sdb

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

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

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

# sfdisk -R /dev/sdb

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

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

# mdadm /dev/md0 -a /dev/sdb2
# mdadm /dev/md1 -a /dev/sdb3
# mdadm /dev/md2 -a /dev/sdb4

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

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

# 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

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

P.S. Если при установке загрузчика возникнет ошибка Could not find device for /boot/boot: not found or not a block device то вам сюда.

https://anikin.pw/all/zamena-dika-v-programnom-raid1-v-linux/