Переезд на новые диски в конфигурации 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
.
Теперь можно попробовать выключить сервер, вытащить из него старые диски и загрузить. Если всё было сделано правильно, то сервер должен загрузиться.