Как заменить отказавший жесткий диск в программном RAID-массиве Linux
На этой странице
- 1 Предварительное примечание
- 2 Как определить, что жесткий диск вышел из строя?
- 3 Удаление неисправного диска
- 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!