Вот
тут товарищ
klink0v поспешил написать, что в свежем Proxmox'е при выключении IOMMU ломается лайв миграция.
По факту дело не в IOMMU, а в кривом ядре 5.15.83-1-pve.
Я наткнулся разом на два бага:
- Собственно, поломанная лайв миграция при переносе виртуалки с хоста с более свежим процессором на хост с более древним. Нашёл обсуждение этого бага. Если кратко, то ядро переносит какую-то инструкцию от свежего процессора на тот, где этой инструкции нет. В итоге, виртуалка виснет. Там ещё есть какие-то косяки с синхронизацией, то ли, времени, то ли, таймеров каких, но у меня эта проблема не проявилась. В итоге, откатил ядро на версию 5.13.19-6-pve и всё заработало. Откатывать нужно именно на более новом сервере, т.е. сервере, с которого будет происходить миграция. Но я принял решение везде понизить версию ядра, из-за второго бага.
- Во время большой нагрузки на сеть и дисковую полку получил в логах кучу ошибок:
Mar 11 04:23:54 HOSTNAME kernel: [138505.178359] qla2xxx [0000:06:00.0]-801c:1: Abort command issued nexus=1:0:0 -- 2002.
И все виртуалки, что жили на дисковой полке, подключённой этим FC контроллером, повисли. Причём, повисли хитро. Ни в консоли, ни по SSH на них зайти нельзя, но при этом на пинги отвечают, и Zabbix-агент на них отвечал. Похоже, просто отвалился системный диск и демоны повисли на hard lock'е. Сам баг особо не гуглил, возможно, он где-то описан применительно к этой версии ядра.
По итогу решил, что эту версию ядра в проде использовать не стоит. Уж больно много в ней багов.
Ну, и небольшая инструкция, как запускать более старое ядро в Proxmox'е.
Поставить старое ядро не сложно, оно есть в репозитории Проксмокса, проблема заставить его грузиться по умолчанию. Удалить версию 5.15 не получится, т.к. она прописана в зависимостях самом Проксмокса, потому надо настраивать Grub. Классическое указание номера в /etc/default/grub в параметре GRUB_DEFAULT не канает, т.к. по умолчанию все "второстепенные" ядра перемещаются в подменю "Advanced options for Debian GNU/Linux". И потому тут есть два более менее красивых решения:
- Отключить создание подменю с помощью прописывания параметра "GRUB_DISABLE_SUBMENU=true" в /etc/default/grub. Тогда можно будет заиспользовать классическую схему с указанием номера.
- Оказывается, в параметр GRUB_DEFAULT можно прописывать пункты из подменю. Для этого надо указать каким по счёту идёт это подменю в основном меню (отсчёт от нуля), затем поставить символ ">" и затем уже номер пункта в этом подменю.
Так же, сделал для себя открытие, что теперь можно указывать не только номера пунктов меню, но и некие id либо названия пункта меню. Таким образом, при добавлении каких-либо новых ядер, умолчальным останется всё равно то, что было задано. Узнать ID пунктов меню можно выполнив команду
grep "menuentry " /boot/grub/grub.cfg
menuentry 'Proxmox VE GNU/Linux' --class proxmox --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a34aabd8-611b-4f9f-9571-cb3c1e0d3c1f' {
menuentry 'Proxmox VE GNU/Linux, with Linux 5.15.83-1-pve' --class proxmox --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.83-1-pve-advanced-a34aabd8-611b-4f9f-9571-cb3c1e0d3c1f' {
menuentry 'Proxmox VE GNU/Linux, with Linux 5.13.19-6-pve' --class proxmox --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.19-6-pve-advanced-a34aabd8-611b-4f9f-9571-cb3c1e0d3c1f' {
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
И вот значение после "$menuentry_id_option" и есть искомый ID. Соответственно, для моего случая можно в /etc/default/grub прописать:
GRUB_DEFAULT="1>gnulinux-5.13.19-6-pve-advanced-a34aabd8-611b-4f9f-9571-cb3c1e0d3c1f"
Где "1" - вход в подменю, ">" - разделитель, а "gnulinux-5.13.19-6-pve-advanced-..." - id пункта меню с необходимым мне ядром.