Вступление
В этой статье используется пример для описания необходимых шагов, связанных с заменой неисправного диска в программном RAID ( mdadm
).
ВАЖНОЕ ПРИМЕЧАНИЕ: Все команды являются примерами и должны быть соответственно скорректированы!
Видео с инструкциями можно найти на нашем канале Hetzner на Youtube.
Пример сценария
Предполагается следующая конфигурация:
# 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 как своп
- / 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_]
состояние.
Назначение встречи с поддержкой для обмена неисправного диска
Чтобы иметь возможность обменять неисправный диск, необходимо заранее договориться о встрече со службой поддержки. Сервер нужно будет на короткое время отключить от сети.
Используйте раздел запросов на поддержку в Robot, чтобы связаться с техническими специалистами.
Подготовка нового диска
Оба диска в массиве должны иметь одинаковые разделы. В зависимости от типа используемой таблицы разделов ( MBR
или GPT
) должны использоваться соответствующие утилиты для копирования таблицы разделов. Таблица разделов GPT обычно используется в дисках емкостью более 2 ТБ (например, жесткие диски объемом 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
На диске хранится несколько избыточных копий таблицы разделов GUID (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
После этого диск можно добавить в массив. В качестве последнего шага необходимо установить загрузчик.
Festplatten mit MBR
Таблицу разделов можно просто скопировать на новый диск, используя sfdisk
:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
где /dev/sda
— исходный диск, а /dev/sdb
— целевой диск.
(Необязательно): Если разделы не обнаруживаются системой, то таблица разделов должна быть перечитана из ядра:
# sfdisk -R /dev/sdb
Естественно, что перегородки также могут быть созданы вручную с помощью fdisk
, cfdisk
или другими инструментами. Перегородки должны быть Linux raid autodetect (ID fd)
типами.
E Интеграция нового привода
После удаления неисправного диска и установки нового его необходимо интегрировать в массив 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
mappen: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
#
Для ремонта через Rescue System необходимо сначала смонтировать установленную систему . Все шаги по установке GRUB должны быть выполнены после chroot
.