Перенос предустановленной AlmaLinux 8.10 на программный RAID

Пришлось, как-то, поднимать на сервере из не самого удобного дата-центра программный RAID и переносить туда предустановленную AlmaLinux 8.10.
К сожалению, IPMI/KVM/iDRAC недоступен, и варианта выбрать установку на RAID с кастомной разбивкой не представлялось возможным.
Ну что же, есть руки и есть SSH-доступ на предустановленную на один из дисков систему.

Сервер приехал с такой разбивкой:

sda       8:0    0   1.8T  0 disk
├─sda1    8:1    0   200M  0 part /boot/efi
├─sda2    8:2    0     1G  0 part /boot
├─sda3    8:3    0     8G  0 part [SWAP]
└─sda4    8:3    0   1.7T  0 part /
sdb       8:16   0   1.8T  0 disk
sdc       8:32   0   1.8T  0 disk
sdd       8:48   0   1.8T  0 disk

Поставил необходимые пакеты и вырубил swap:

yum install -y mc nano vim wget mdadm gdisk grub2-efi-* efibootmgr && swapoff -a

Скопировал разметку с первого диска на второй (чтобы был одинаковый размер EFI System Partition):

sgdisk --backup=part /dev/sda
sgdisk --load-backup=part /dev/sdb

В gdisk’е удалил все разделы, кроме EFI System Partition, и разбил дальше на разделы требуемых размеров:

Number Start (sector) End (sector) Size       Code Name
1      2048           411647       200.0 MiB  EF00 EFI System Partition
2      411648         2508799      1024.0 MiB FD00 Linux RAID
3      2508800        421939199    200.0 GiB  FD00 Linux RAID
4      421939200      3907029134   1.6 TiB    FD00 Linux RAID

Далее скопировал эту разметку на оставшиеся два диска:

sgdisk --backup=part /dev/sdb
sgdisk --load-backup=part /dev/sdc
sgdisk --load-backup=part /dev/sdd

Создал из этих трех дисков RAID’ы:

mdadm -C /dev/md0 -f -l 1 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb2 /dev/sdc2 /dev/sdd2 -e 0.90
mdadm -C /dev/md1 -f -l 1 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb3 /dev/sdc3 /dev/sdd3
mdadm -C /dev/md2 -f -l 10 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb4 /dev/sdc4 /dev/sdd4 --assume-clean

Нарезал ФС и примонтировал в /mnt:

mkfs.ext2 /dev/md0
mkfs.ext4 /dev/md1
mount /dev/md1 /mnt
mkdir -p /mnt/boot
mount /dev/md0 /mnt/boot

Записал UUID’ы файловых систем (нужны будут для fstab):

blkid | grep md
/dev/md0: UUID="FS_UUID_BOOT" BLOCK_SIZE="4096" TYPE="ext2"
/dev/md1: UUID="FS_UUID_ROOT" BLOCK_SIZE="4096" TYPE="ext4"

Закинул UUID’ы RAID’ов в mdadm.conf:

echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9] /dev/vd*[0-9] /dev/cciss/*" > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

И записал их себе (понадобятся для GRUB’а):

cat /etc/mdadm.conf
DEVICE /dev/hd*[0-9] /dev/sd*[0-9] /dev/vd*[0-9] /dev/cciss/*
ARRAY /dev/md0 metadata=0.90 UUID=MD_UUID_0
ARRAY /dev/md1 metadata=1.2 name=1 UUID=MD_UUID_1
ARRAY /dev/md2 metadata=1.2 name=2 UUID=MD_UUID_2

В /etc/fstab прикомментировал старые записи и добавил новые (сюда идут UUID’ы ФС):

vim /etc/fstab
UUID=FS_UUID_BOOT /boot ext2 defaults 1 2
UUID=FS_UUID_ROOT / ext4 defaults 1 1

Поправил /etc/default/grub (сюда идут UUID’ы RAID’ов):

vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10"
GRUB_PRELOAD_MODULES="part_gpt raid mdraid mdraid09 mdraid1x"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=false
GRUB_DISABLE_OS_PROBER=true

Перегенерировал initramfs:

dracut --mdadmconf --fstab --add="mdraid" --add-drivers="raid0 raid1" --force /boot/initramfs-$(uname -r).img $(uname -r) -M

Скопировал EFI-раздел с первого диска на остальные:

dd if=/dev/sda1 of=/dev/sdb1
dd if=/dev/sda1 of=/dev/sdc1
dd if=/dev/sda1 of=/dev/sdd1

Перемонтировал /boot/efi со второго диска и указал EFI грузить систему с диска /dev/sdb:

umount /dev/sda1
mount /dev/sdb1 /boot/efi
efibootmgr -c -d /dev/sdb -p 1 -L "AlmaLinux-sdb" -l '\EFI\almalinux\shim.efi'

Скопировал файлы корневого раздела и файлы /boot на RAID’ы:

cp -dpRxv / /mnt && cp -dpRxv /boot /mnt

Подготовил chroot в RAID:

mount /dev/sdb1 /mnt/boot/efi
mount -o bind /dev /mnt/dev
mount -o bind /run /mnt/run
mount -t proc none /mnt/proc
mount -o bind /sys /mnt/sys

И зашел в него:

chroot /mnt

В chroot-окружении перегенерировал конфиги GRUB’а и раскидал по EFI-разделам (тут понадобятся и UUID’ы ФС, и UUID’ы RAID’ов):

grub2-mkconfig -o /boot/grub2/grub.cfg

grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10 root=UUID=FS_UUID_ROOT" --config-file=/boot/grub2/grub.cfg

grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10 root=UUID=FS_UUID_ROOT" --config-file=/boot/efi/EFI/almalinux/grub.cfg
umount /boot/efi

mount /dev/sda1 /boot/efi
grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10 root=UUID=FS_UUID_ROOT" --config-file=/boot/efi/EFI/almalinux/grub.cfg
umount /boot/efi

mount /dev/sdc1 /boot/efi
grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10 root=UUID=FS_UUID_ROOT" --config-file=/boot/efi/EFI/almalinux/grub.cfg
umount /boot/efi

mount /dev/sdd1 /boot/efi
grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
grubby --update-kernel=ALL --args="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M selinux=0 rd.auto rd.auto=1 rd.md.uuid=MD_UUID_0 rd.md.uuid=MD_UUID_1 rd.md.uuid=MD_UUID_2 rootdelay=10 root=UUID=FS_UUID_ROOT" --config-file=/boot/efi/EFI/almalinux/grub.cfg

Вышел из chroot, отмонтировал RAID’ы, подождал пока синхронизируются RAID’ы и перезагрузил сервер:

exit
umount -R /mnt
reboot

После того как ОС загрузилась с RAID’а скопировал разметку на самый первый диск и добавил разделы в RAID’ы. Подождал пока RAID’ы синхронизировались и сделал контрольный ребут:

sgdisk --backup=part /dev/sdb
sgdisk --load-backup=part /dev/sda
mdadm --add /dev/md0 /dev/sda2
mdadm --add /dev/md1 /dev/sda3
mdadm --add /dev/md2 /dev/sda4
reboot

Собственно, вот и все.

P.S.: FS_UUID_BOOT, FS_UUID_ROOT, MD_UUID_0, MD_UUID_1, MD_UUID_2 заменяем на свои UUID’ы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *