Перенос XCP-ng на RAID 1 и обновление до 8 версии
Устанавливал XCP, когда она была ещё XenServer. В то время штатной возможности установки на RAID не было. Теперь XCP умеет устанавливаться на RAID-1 и загружаться с него. Пора обновиться с 7.6 на 8.0 и заодно перетащить систему на зеркало.
Текущая конфигурация
XCP установлена на sda. Хранилище виртуалок: sda3 и sdb1 в RAID-10, sda7 и sdb2 в RAID-0.
# parted /dev/sda print
Number Start End Size File system Name Flags
5 1049kB 4296MB 4295MB ext3
2 4296MB 23.6GB 19.3GB ext3
1 23.6GB 43.0GB 19.3GB ext3
4 43.0GB 43.5GB 537MB bios_grub, legacy_boot
6 43.5GB 44.6GB 1074MB linux-swap(v1)
3 44.6GB 2500GB 2455GB
7 2500GB 3001GB 501GB
# parted /dev/sdb print
Number Start End Size File system Name Flags
1 44.6GB 2500GB 2455GB
2 2500GB 3001GB 501GB
# cat /proc/mdstat
Personalities : [raid10] [raid0]
md2 : active raid0 sda7[1] sdb2[0]
977457152 blocks super 1.2 512k chunks
md1 : active raid10 sda3[2] sdb1[0]
2397758464 blocks super 1.2 512K chunks 2 offset-copies [2/2] [UU]
bitmap: 2/18 pages [8KB], 65536KB chunk
Сохранение конфигурации
Запускаем xsconsole. Заходим в Backup, Restore and update -> Backup Virtual Machine Metadata. Выбираем хранилище и сохраняем метаданные виртуальных машин. Можно из флешки создать локальное хранилище и сохранить на него. Можно сохранять конфигурацию через xe-backup-metadata.
Установка
Останавливаем сервер. Подключаем новую пару дисков, отключаем старую. Загружаемся в режиме BIOS с установочного диска или флешки.
Установка проходит, как обычно, только вместо выбора диска нужно в меню Software RAID выбрать пару дисков.

После успешной установки подключаем старую пару дисков и загружаемся вместе с ней. Новая пара дисков будет выглядеть примерно так:
# parted /dev/md127 print
Model: Linux Software RAID Array (md)
Disk /dev/md127: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name Flags
5 1049kB 4296MB 4295MB ext3
2 4296MB 23.6GB 19.3GB
1 23.6GB 43.0GB 19.3GB ext3
4 43.0GB 43.5GB 537MB bios_grub, legacy_boot
6 43.5GB 44.6GB 1074MB linux-swap(v1)
3 44.6GB 250GB 205GB sr-1
# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sdb[1] sda[0]
244198400 blocks super 1.0 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk
Восстановление конфигурации
Сначала нужно восстановить все старые хранилища. Если хранилище размещалось на RAID, то собираем сначала его. Рассмотрим восстановление одного хранилища.
Ищем идентификатор хоста:
# xe host-list
uuid ( RO) : 208cd3c1-6a1b-4062-b3e0-735b0c374cb2
Ищем идентификатор хранилища:
# pvscan
PV /dev/mapper/storage2 VG VG_XenStorage-f25ac47f-f6dd-5a74-f520-650d087907c1 lvm2 [932.16 GiB / >387.15 GiB free]
PV /dev/mapper/storage1 VG VG_XenStorage-148b4f48-3d4d-7cd1-ddbc-a7ee7972f313 lvm2 [2.23 TiB / 543.16 GiB free]
В моём случае это f25ac47f-f6dd-5a74-f520-650d087907c1 и 148b4f48-3d4d-7cd1-ddbc-a7ee7972f313. Для примера возьмём второй:
# xe sr-introduce uuid=148b4f48-3d4d-7cd1-ddbc-a7ee7972f313 type=lvm content-type=user name-label="LSR2 HDD R10"
# xe pbd-create host-uuid=208cd3c1-6a1b-4062-b3e0-735b0c374cb2 sr-uuid=148b4f48-3d4d-7cd1-ddbc-a7ee7972f313 device-config:device=/dev/mapper/storage1
# xe pbd-plug uuid=2e11c952-9da9-42e3-680a-ebf7a6e2a062
Аналогично восстанавливаем остальные хранилища, если имеются.
Далее запускаем xsconsole. Заходим в Backup, Restore and update -> Restore Virtual Machine Metadata. Выбираем хранилище и восстанавливаем метаданные виртуальных машин. Можно из флешки создать локальное хранилище и восстановить из него. Можно восстанавливать конфигурацию через xe-restore-metadata.
После этого должны появиться виртуальные машины. Можно запускать.
Исправление сборки RAID массивов
В параметрах загрузки GRUB настроена автосборка RAID массивов (rd.auto=1). Но в initramfs включен драйвер только для RAID-1. Поэтому системный RAID-1 автоматически собирался, а мои 10 и 0 на этапе загрузки не могли собраться и переходили в состояние inactive. А поэтому они не могли собраться и в загруженной системе по конфигурации из mdadm.conf.
Нужно сделать так, чтобы при загрузке ядра собирался только системный RAID-1.
Ищем идентификатор системного RAID:
# mdadm --detail /dev/md127
/dev/md127:
Version : 1.0
Raid Level : raid1
Name : localhost:127
UUID : 2a284c09:a7ec68ec:f9b7e3ee:97b62ec8
Идём в /etc/grub.cfg, меняем параметр rd.auto=1 на rd.md.uuid=2a284c09:a7ec68ec:f9b7e3ee:97b62ec8. Перезагружаемся.
Системный RAID должен собраться при загрузке ядра. Остальные — при загрузке ОС по конфигурации из /etc/mdadm/mdadm.conf.