CentOS 9 в режиме PV на Xen
Постановка задачи
Есть виртуалка с установленным Centos9, работает в domU XEN в режиме HVM. По ряду причин необходимо перевести виртуалку в режим PV.
При переключении типа виртуализации в XEN витруалка перестает загружаться.
Немного теории: в режиме PV вместо boot loader используется скрипт pygrub, он монтирует образ диска в dom0, находит там /boot/grub2/grub.conf, узнает где брать ядро и загружает его.
Проблема заключается в следующем:
- по умолчанию в CentOS 9 используется XFS (в том числе и на разделе /boot), XEN не поддерживает эту фс, не может смонтировать /boot и найти grub.conf
- по умолчанию в grub2 используется новый формат grub.conf, в результате pygrub не может распарсить его и найти ядро
- в centOS 9 из ядра убрали поддержку работы в XEN domU. Нам нужно другое нестандартное ядро.
Решение
Решать проблему будем так:
- устанавливаем систему так, что бы /boot был ext3
- отключаем в grub2 поддержку BLSCFG
- устанавливаем ядро с поддержкой XEN (а именно kernel-ml) из репозитория elrepo.org
теперь по пунктам:
Устанавливаем CentOS 9 так, что бы /boot был на отдельном разделе (/dev/xvda1) и тип фс ext3
у меня получилось такое (/boot на /dev/xvda1):
Device Boot Start End Sectors Size Id Type /dev/xvda1 * 2048 2099199 2097152 1G 83 Linux /dev/xvda2 2099200 20971519 18872320 9G 8e Linux LVM
отключаем в grub2 поддержку BLSCFG
в файле /etc/default/grub должна быть строка GRUB_ENABLE_BLSCFG=false
echo "GRUB_ENABLE_BLSCFG=false" >> /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg
устанавливаем ядро с поддержкой XEN
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml
Переключаем тип виртуализации на PV
UUID=<uuid виртуалки> xe vm-param-set uuid=${UUID} PV-bootloader=pygrub xe vm-param-set uuid=${UUID} HVM-boot-policy="" xe vm-param-set uuid=${UUID} PV-args="graphical utf8 console=hvc0"
Решение проблем, если вышеуказанное не помогло
Иногда pygrub все равно не может найти раздел /boot, ошибка будет плюс минус такая:
xc: error: panic: xc_dom_core.c:702: xc_dom_find_loader: no loader found: Invalid kernel
тогда ему можно помочь указав где же он находится на диске:
xe vm-param-set uuid=${UUID} PV-bootloader-args="--offset=1048576"
offset рассчитывается так:
Device Boot Start End Blocks Id System /dev/xvda1 * 2048 2099199 1048576 83 Linux offset = 2048s*512b/s=1048576
В моем случае консоль XEN работала не в режиме последовательного порта, а система не знала и пробовала загрузить serial-getty@hvc0.service от этого getty зависал и консоль не работала.
решение - отключить serial-getty:
systemctl enable getty@hvc0 systemctl mask serial-getty@hvc0.service
ENJOY!