Эта статья использует пример для описания необходимых шагов при замене неисправного диска в программном RAID (mdadm
).
ВАЖНО: Все команды представлены только в качестве примера. Их нужно соответствующим образом адаптировать!
Пример сценария
Вот пример конфигурации:
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1]
1822442815 blocks super 1.2 [2/2] [UU]
md2 : active raid1 sda3[0] sdb3[1]
1073740664 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
524276 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
33553336 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Всего четыре раздела:
- /dev/md0 как swap
- /dev/md1 как /boot
- /dev/md2 как /
- /dev/md3 как /home
/dev/sdb
является неисправным диском в данном случае. Отсутствующий или неисправный диск показывается как [U_]
и/или [_U]
. Если массив RAID целый, то отображается [UU]
.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1](F)
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0] sdb3[1](F)
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1](F)
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0] sdb1[1](F)
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Изменения в программном RAID можно вносить при работающей системе. Если proc/mdstat
показывает, что диск отказывает, как в приведенном примере, можно договориться о замене диска с нашими техниками поддержки (см. далее).
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0]
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0]
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0]
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0]
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Удаление неисправного диска
Прежде чем добавить новый диск, необходимо сначала удалить старый неисправный диск из массива RAID. Это нужно сделать для каждого отдельного раздела.
# mdadm /dev/md0 -r /dev/sdb1
# mdadm /dev/md1 -r /dev/sdb2
# mdadm /dev/md2 -r /dev/sdb3
# mdadm /dev/md3 -r /dev/sdb4
Следующая команда показывает диски, входящие в массив:
# mdadm --detail /dev/md0
В некоторых случаях диск может быть частично неисправен, например, только /dev/md0
находится в состоянии [U_]
, тогда как все остальные устройства в состоянии [UU]
. В этом случае команда
# mdadm /dev/md1 -r /dev/sdb2
завершится ошибкой, поскольку массив /dev/md1
в порядке.
В этом случае сначала нужно выполнить команду
# mdadm --manage /dev/md1 --fail /dev/sdb
Настройка и конфигурация аппаратного контроллера RAID Adaptec
Эта статья использует пример для описания необходимых шагов при замене неисправного диска в программном RAID (mdadm
).
ВАЖНО: Все команды представлены только в качестве примера. Их нужно соответствующим образом адаптировать!
Пример сценария
Вот пример конфигурации:
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1]
1822442815 blocks super 1.2 [2/2] [UU]
md2 : active raid1 sda3[0] sdb3[1]
1073740664 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
524276 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
33553336 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Всего четыре раздела:
- /dev/md0 как swap
- /dev/md1 как /boot
- /dev/md2 как /
- /dev/md3 как /home
/dev/sdb
является неисправным диском в данном случае. Отсутствующий или неисправный диск показывается как [U_]
и/или [_U]
. Если массив RAID целый, то отображается [UU]
.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1](F)
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0] sdb3[1](F)
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1](F)
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0] sdb1[1](F)
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Изменения в программном RAID можно вносить при работающей системе. Если proc/mdstat
показывает, что диск отказывает, как в приведенном примере, можно договориться о замене диска с нашими техниками поддержки (см. далее).
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda4[0]
1822442815 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0]
1073740664 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0]
524276 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0]
33553336 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Удаление неисправного диска
Прежде чем добавить новый диск, необходимо сначала удалить старый неисправный диск из массива RAID. Это нужно сделать для каждого отдельного раздела.
# mdadm /dev/md0 -r /dev/sdb1
# mdadm /dev/md1 -r /dev/sdb2
# mdadm /dev/md2 -r /dev/sdb3
# mdadm /dev/md3 -r /dev/sdb4
Следующая команда показывает диски, входящие в массив:
# mdadm --detail /dev/md0
В некоторых случаях диск может быть частично неисправен, например, только /dev/md0
находится в состоянии [U_]
, тогда как все остальные устройства в состоянии [UU]
. В этом случае команда
# mdadm /dev/md1 -r /dev/sdb2
завершится ошибкой, поскольку массив /dev/md1
в порядке.
В этом случае сначала нужно выполнить команду
# mdadm --manage /dev/md1 --fail /dev/sdb2
чтобы перевести RAID в состояние [U_]
.
Организация встречи с командой поддержки для замены неисправного диска
Для замены неисправного диска вам необходимо предварительно назначить встречу с командой поддержки. Команде поддержки потребуется ненадолго выключить сервер.
Подготовка нового диска
Оба диска в массиве должны иметь точно такое же разбиение на разделы. В зависимости от типа таблицы разделов, который вы используете (MBR
или GPT
), вам нужно использовать соответствующие утилиты для копирования таблицы разделов. Таблица разделов GPT обычно используется на дисках объемом более 2 ТБ (например, на HDD объемом 3 ТБ в формате EX4
и EX6
).
Резервное копирование MBR/GPT
Перед копированием MBR/GPT на новый диск вам нужно сделать его резервную копию. Таким образом, если что-то пойдет не так во время копирования, вы сможете восстановить оригинал.
Резервное копирование с MBR
sfdisk --dump /dev/sda > sda_parttable_mbr.bak
sfdisk --dump /dev/sdb > sdb_parttable_mbr.bak
sfdisk --dump /dev/sdX > sdX_parttable_mbr.bak
Восстановление с MBR
sfdisk /dev/sda < sda_parttable_mbr.bak
sfdisk /dev/sdb < sdb_parttable_mbr.bak
sfdisk /dev/sdX < sdX_parttable_mbr.bak
Резервное копирование с GPT
sgdisk --backup=sda_parttable_gpt.bak /dev/sda
sgdisk --backup=sdb_parttable_gpt.bak /dev/sdb
sgdisk --backup=sdX_parttable_gpt.bak /dev/sdX
Восстановление с GPT
sgdisk --load-backup=sda_parttable_gpt.bak /dev/sda
sgdisk --load-backup=sdb_parttable_gpt.bak /dev/sdb
sgdisk --load-backup=sdX_parttable_gpt.bak /dev/sdX
Диски с GPT
На диске существует несколько избыточных копий таблицы разделов (GPT), поэтому вам нужно использовать инструменты, поддерживающие GPT
(например, parted
или GPT fdisk
), чтобы редактировать таблицу. Вы можете использовать инструмент sgdisk
из GPT fdisk, чтобы легко скопировать таблицу разделов на новый диск. Вот пример копирования таблицы разделов с sda на sdb:
sgdisk --backup=sda_parttable_gpt.bak /dev/sda
sgdisk --load-backup=sda_parttable_gpt.bak /dev/sdb
Затем вам нужно присвоить диску новый случайный UUID
:
sgdisk -G /dev/sdb
После этого вы можете добавить диск в массив. В качестве последнего шага необходимо установить загрузчик.
Диски с MBR
Вы можете просто скопировать таблицу разделов на новый диск, используя sfdisk
.
# sfdisk -d /dev/sda | sfdisk /dev/sdb
где /dev/sda
– исходный диск, а /dev/sdb
– целевой диск.
(Дополнительно): Если разделы не обнаруживаются системой, то таблица разделов должна быть повторно считана из ядра:
# blockdev --rereadpt /dev/sdb
Естественно, вы также можете создать разделы вручную с использованием fdisk
, cfdisk
или других инструментов. Разделы должны иметь тип Linux raid autodetect (ID fd)
.
Интеграция нового диска
После того, как вы удалили неисправный диск и установили новый, вам нужно интегрировать его в массив RAID. Это необходимо сделать для каждого раздела.
# mdadm /dev/md0 -a /dev/sdb1
# mdadm /dev/md1 -a /dev/sdb2
# mdadm /dev/md2 -a /dev/sdb3
# mdadm /dev/md3 -a /dev/sdb4
Новый диск теперь является частью массива и будет синхронизирован. В зависимости от размера разделов этот процесс может занять некоторое время. Вы можете проверить состояние синхронизации, используя команду cat /proc/mdstat
.
# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sdb4[1] sda4[0]
1028096 blocks [2/2] [UU]
[==========>..........] resync = 50.0% (514048/1028096) finish=97.3min speed=65787K/sec
md2 : active raid1 sdb3[1] sda3[0]
208768 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
208768 blocks [2/2] [UU]
unused devices: <none>
Установка загрузчика
Поскольку серийный номер диска изменился, нам нужно создать новое отображение устройств с помощью GRUB2:
grub-mkdevicemap -n
Если вы выполняете эту операцию в загруженной системе, то для GRUB2 достаточно выполнить команду grub-install
на новом диске. Например:
grub-install /dev/sdb
Для Grub1 (grub-legacy
) в зависимости от того, какой диск был неисправным, вам может потребоваться выполнить дополнительные шаги.
- Запустите консоль GRUB:
grub
- Укажите раздел, на котором расположен
/boot
:root (hd0,1) (/dev/sda2 = (hd0,1))
- Установите загрузчик в MBR:
setup (hd0)
- Чтобы также установить загрузчик на второй диск:
- Отобразите второй диск как
hd0
:device (hd0) /dev/sdb
- Повторите шаги 2 и 3 точно так же (не изменяйте команды!)
- Отобразите второй диск как
- Выйдите из консоли GRUB:
quit
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> device (hd0) /dev/sdb
device (hd0) /dev/sdb
grub> root (hd0,1)
root (hd0,1)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 26 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+26 p (hd0,1)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
#
Также выполните следующие привязки для установленной системы:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
Затем выполните все вышеуказанные шаги установки GRUB в среде chroot
. Можете безопасно проигнорировать предупреждение grub-install couldn't find physical volumes
.