Алгоритм решения:
- Определение проблемы
- Удаление поврежденного диска
- Подготовка нового диска
- Добавление жёсткого диска в массив после замены
Определение проблемы
Для начало разберем проблему. Имеется физический сервер с установленным на нём 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_], то дело плохо, целостность одного из дисков нарушена – нужно менять диск.
-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
Когда мы создали разделы на /dev/sdb, то можно добавлять диск в массив.
# mdadm /dev/md0 -a /dev/sdb2
# mdadm /dev/md1 -a /dev/sdb3
# mdadm /dev/md2 -a /dev/sdb4
После добавления диска в массив нужно установить на него загрузчик. Если сервер загружен в нормальном режиме, то это делается одной командой:
# 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/