Переезд на новые диски в конфигурации RAID 1 и LVM

Содержание

Введение

Ранее я уже описывал, как я перевёл доманший компьютер с одного простого диска на RAID 1, а затем описывал, как я переводил этот же доманший компьютер с RAID 1 на комбинацию RAID 1 и LVM.

На самом деле на этом миграции домашнего компьютера не закончились и я дважды переносил эту конфигруацию на диски большего объёма. Описывать тогда это в виде отдельной статьи я не стал, поскольку процедура казалась мне довольно тривиальной и я проделывал её буквально на ходу, даже не успев переодеться, сразу после покупки новых жёстких дисков, без использования каких-либо шпаргалок.

И вот эту же процедуру мне понадобилось проделать ещё два раза, уже с рабочими серверами. Дома я делал всё довольно расслабленно, т.к. при возникновении ошибок загрузки мог бы воспользоваться загрузочной флешкой и починить всё, не особо переживая о неудаче. На работе же ошибки могли бы привести к длительному простою важных для предприятия систем, поэтому сначала я проделал эту процедуру на резервном сервере, тщательно документируя каждое действие и прибегая к экспериментам на виртуальной машине для прояснения неочевидных подробностей. Эти же действия я затем повторил и на основном сервере, перенеся на время работ нагрузку с него на уже готовый резервный сервер.

Поскольку у меня образовалась более-менее подробная инструкция, решил выложить её здесь. Кратко опишу последовательность действий:

  • в сервер вставляются новые диски, на которые мы помещаем таблицу разделов в формате DOS, создаём один раздел максимального размера, помечаем его как загрузочный и имеющий тип Linux RADI autodetect,
  • оба диска собираем в массив RAID 1, который добавляем к существующей группе томов,
  • перемещаем логические тома с текущего физического тома на новый физический том, после чего удаляем текущий физический том из группы томов,
  • при необходимости разбираем старый массив RAID и удаляем диски из системы,
  • обновляем информацию о RAID-массивах в образе initramfs и устанавливаем загрузчик в MBR на новых дисках.

Предупреждаю, что я не несу никакой ответственности за выполняемые вами действия. Я лишь поделился своим опытом. Перед выполнением описанных действий советую сделать резервные копии, приготовить загрузочную флешку и получить физический доступ к серверу, чтобы иметь возможность устранить возникшие проблемы. Устранять возможные проблемы вам придётся самостоятельно, поэтому расчитывайте на свои силы и не делайте ничего, если не уверены.

Определение дисков

Имена новых вставленных в сервер дисков можно узнать из последних строк команды:

# dmesg -T

В моём случае два новых диска определились под именами /dev/sdc и /dev/sdd.

Удаление существующего массива

Доставшиеся мне диски ранее уже состояли в RAID-массиве, поэтому после вставки собрались в виде устройства /dev/md127 в режиме "только чтение". Мне этот RAID-массив не был нужен, поэтому я его отключил с помощью команды:

# mdadm --manage /dev/md127 --stop

Разметка дисков

Для разметки диска воспользуемся утилитой fdisk:

# fdisk /dev/sdc

Создадим пустую таблицу разделов в формате DOS:

o

Создадим первичный раздел с номером 1 максимального размера:

n
p
1
<enter>
<enter>

Поменяем тип этого первичного раздела с номером 1 на Linux RAID autodetect:

t
fd

Пометим этот первичный раздел с номером 1 как загрузочный:

a

И запишем изменения на диск:

w

Те же действия повторим и для второго диска /dev/sdd.

Создание нового RAID-массива

Создаём новый массив:

# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

Замена физического тома в LVM

Создаём физический том на новом RAID-массиве:

# pvcreate /dev/md1

Добавляем новый физический том к группе томов:

# vgextend vg0 /dev/md1

Перемещаем экстенты со старого физического тома на новый физический том:

# pvmove /dev/md0 /dev/md1

Удаляем старый физический том из группы томов:

# vgreduce vg0 /dev/md0

Удаление старого RAID-массива

Если собираемся извлечь диски без отключения сервера, то удаляем старый RAID-массив с помощью команды:

# mdadm --stop /dev/md0

Извлечение старых дисков

Если собираемся извлечь диски без отключения сервера, то можно подготовить диски, состоявшии в массиве md0, к удалению следующим образом:

# echo 1 > /sys/block/sda/device/delete
# echo 1 > /sys/block/sdb/device/delete

Обновляем настройки загрузки

Просканируем RAID-массивы и внесём обновления в файл /etc/mdadm/mdadm.conf:

# mdadm --detail --scan > /etc/mdadm/mdadm.conf

На самом деле я поступил не столь прямолинейно, а просто вывел на экран обнаруженные массивы, после чего вручную скопировал данные нового RAID-массива в файл /etc/mdadm/mdadm.conf и поменял имена устройств. /dev/md/0 и /dev/md1 я поменял на /dev/md1 и /dev/md0 соответственно, так чтобы после перезагрузки новый RAID-массив определился как устройство /dev/md0, а старый при этом определился бы как устройство /dev/md1. Если старые диски предполагается извлечь из сервера, то соответствующую запись из файла /etc/mdadm/mdadm.conf можно удалить.

Значения полей name и UUID в этом файле менять нельзя - они используются для идентификации массивов. Если их изменить, то массив может во-первых не обнаружиться в процессе загрузки операционной системы, а во-вторых - определиться как устройство с неожиданным индексом типа /dev/md127 в режиме "только чтение".

Чтобы операционная система в процессе загрузки определяла массивы, обновим файл /etc/mdadm/mdadm.conf в загрузочном образе initramfs:

# update-initramfs -u

Осталось установить загрузчик в MBR всех аппаратных дисков:

# dpkg-reconfigure grub-pc

Настройки в полях "Linux command line" и "Linux default command line" оставляем прежними. В поле "Grub install devices" добавляем новые дисковые устройства для установки Grub. В моём случае новыми были устройства /dev/sdc и /dev/sdd.

Теперь можно попробовать выключить сервер, вытащить из него старые диски и загрузить. Если всё было сделано правильно, то сервер должен загрузиться.

Дополнительные материалы