Hetzner - DokuWiki

Festplattenaustausch im Software-RAID/ru

В данной статье описаны действия, необходимые при замене неисправного жёсткого диска в программном RAID-массиве (mdadm).

ВНИМАНИЕ: все команды приведены лишь для примера, и должны быть изменены в соответствиями с реалиями вашей системы!

Пошаговая инструкция доступна (на английском языке) на: Hetzner Youtube Channel

Inhaltsverzeichnis

Исходная ситуация

Исходные настройки:

# 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/md0swap
  • /dev/md1/boot
  • /dev/md2/
  • /dev/md3/home

Например, /dev/sdb — это сбойный диск. [U_] или [_U] показывает, что массив не синхронизирован. Когда массив в порядке, он отображается как [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 можно из работающей системы. Если один из дисков не отображается в массиве как показано ниже, то можете сразу согласовать время замены диска.

# 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

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

# mdadm /dev/md1 -r /dev/sdb2

не пройдёт, так как устройство /dev/md1 в порядке.

Чтобы это исправить, нужно сначала выполнить команду

# mdadm --manage /dev/md1 --fail /dev/sdb2

чтобы изменить статус RAID-массива на [U_].

Согласование с поддержкой времени замены повреждённого жёсткого диска

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

Пожалуйста, используйте для этого форму контакта в панели Robot.

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

Оба диска в массиве должны иметь абсолютно одинаковое разбиение. В зависимости от используемого типа таблицы разделов (MBR или GPT) необходимо использовать соответствующие утилиты для копирования таблицы разделов. Как правило, GPT используется в дисках более 2ТБ (например, EX4 и EX6).

Жёсткий диск с GPT

На жёстком диске хранится несколько копий таблицы разделов GUID (GPT), поэтому для её редактирования следует использовать утилиты, поддерживающие GPT, например parted или GPT fdisk. Утилита sgdisk из GPT fdisk (уже установленная в Rescue-системе) позволяет простым способом скопировать таблицу разделов на новый жёсткий диск. Пример копирования таблицы разделов с sda на sdb:

sgdisk -R /dev/sdb /dev/sda

Далее жёсткому диску надо задать новый случайный UUID:

sgdisk -G /dev/sdb

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

Жёсткий диск с MBR

Таблица разделов может быть просто скопирована на новый диск с помощью sfdisk:

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

где /dev/sda — это источник, а /dev/sdb — жёсткий диск назначения.

(Опционально): если разделы не видны в системе, то таблица разделов должна быть перечитана ядром:

# sfdisk -R /dev/sdb

Конечно же, разделы можно создать вручную с помощью fdisk, cfdisk или других инструментов. Разделы должны иметь тип Linux raid autodetect (ID fd).

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

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

# 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-install на новый жёсткий диск, например, так:

grub-install /dev/sdb

В случае Grub1 (устаревшая версия grub) то, в зависимости от того какой диск выпал, потребуется больше шагов

  • Запустить консоль grub: grub
  • Указать раздел, на котором лежит /boot: root (hd0,1) (/dev/sda2 = (hd0,1))
  • Записать загрузчик в MBR: setup (hd0)
  • Для того чтобы записать загрузчик на второй жёсткий диск:
    • Укажите grub переключиться на sdb: 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-систему установленную систему необходимо сначала смонтировать. Все действия по установке grub необходимо выполнять после chroot.



© 2017. Hetzner Online GmbH. Alle Rechte vorbehalten.