Пришлось, как-то, поднимать на сервере из не самого удобного дата-центра программный 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’ы