Go to content Go to menu Go to search

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!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved