По умолчанию при создании виртуальной машины (kvm) на Proxmox VE 6 создаётся виртуальный BIOS, но вместо него можно создать виртуальный UEFI.
Изменение BIOS на UEFI
Для правильной эмуляции компьютера QEMU необходимо эмулировать прошивку. На компьютерах такая прошивка называется BIOS или UEFI. Эта прошивка выполняется как один из первых шагов при загрузке виртуальной машины. Она отвечает за выполнение базовой инициализации оборудования и за обеспечение интерфейса к оборудованию для операционной системы. По умолчанию QEMU использует для этого SeaBIOS, который эмулирует BIOS x86 с открытым исходным кодом. Однако, вы можете в качестве прошивки выбрать OVMF, который эмулирует UEFI с открытым исходным кодом.
На практике вы должны на Proxmox создать виртуальную машину (kvm) стандартным способом, а затем поменять тип прошивки на uefi. Для этого вам нужно зайти на вкладку «Hardware» и там найти настройку для BIOS:
Её нужно поменять на «OVMF (UEFI)«.
Добавление EFI Disk
Но просто поменять прошивку не достаточно. Дополнительно вы должны добавить в конфигурацию виртуальной машины EFI Disk.
Этот диск хранит EFIVARS. Это специальная файловая система которая хранит переменные EFI. Там же хранится порядок загрузки. Если EFI Disk не указан, то каждый раз при запуске виртуальной машины для неё будет создаваться временный efidisk. При этом каждый раз порядок загрузки может меняться.
Чтобы добавить такой диск, просто нажмите на кнопку «Add» и добавьте «EFI Disk«:
Размер такого диска всегда равен 1 MB и его нельзя изменить. Также нельзя создать несколько таких дисков.
После проделанного раздел «Hardware» у вас будет выглядеть примерно так:
Что в итоге?
После проделанного подключите образ установочного диска к виртуальному cdrom, и как обычно установите вашу систему. Это может быть любая система с поддержкой UEFI, например: Debian, Ubuntu или Windows.
Например, после установки Ubuntu 20.04 на такую виртуальную машину с разбивкой по умолчанию (без lvm) у меня следующая таблица разделов:
$ lsblk -l /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk sda1 8:1 0 512M 0 part /boot/efi sda2 8:2 0 7.5G 0 part /
Раздел sda1 это efi раздел в котором хранятся загрузчики которые запускает UEFI. Ubuntu при установки на этом разделе создала каталог для своей загрузки — /boot/efi/EFI/ubuntu/:
$ ls -l /boot/efi/EFI/ubuntu/ total 3480 -rwxr-xr-x 1 root root 108 Nov 8 11:55 BOOTX64.CSV -rwxr-xr-x 1 root root 126 Nov 8 11:55 grub.cfg -rwxr-xr-x 1 root root 1734528 Nov 8 11:55 grubx64.efi -rwxr-xr-x 1 root root 856232 Nov 8 11:55 mmx64.efi -rwxr-xr-x 1 root root 955656 Nov 8 11:55 shimx64.efi
Главным загрузчиком в этом примере выступает /boot/efi/EFI/ubuntu/shimx64.efi, который имеет цифровую подпись от Microfoft и поддерживает Secure Boot. Этот загрузчик затем запускает grubx64.efi который подписан цифровой подписью от Canonical.
EFI Disk же примонтировался в /sys/firmware/efi/efivars/:
$ ls -l /sys/firmware/efi/efivars/ total 0 -rw-r--r-- 1 root root 66 Nov 8 12:22 Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 110 Nov 8 12:22 Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 106 Nov 8 12:22 Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 92 Nov 8 12:22 Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 122 Nov 8 12:22 Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 6 Nov 8 12:22 BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 8 Nov 8 12:22 BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 14 Nov 8 12:22 BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 53 Nov 8 12:22 ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 38 Nov 8 12:22 ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 34 Nov 8 12:22 ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 34 Nov 8 12:22 ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 34 Nov 8 12:22 ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 18 Nov 8 12:22 Key0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 18 Nov 8 12:22 Key0001-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 8 Nov 8 12:22 Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 17 Nov 8 12:22 LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 8 Nov 8 12:22 MTC-eb704011-1402-11d3-8e77-00a0c969723b -rw-r--r-- 1 root root 1128 Nov 8 12:22 MokListRT-605dab50-e046-4300-abb6-3dd810dd8b23 -rw-r--r-- 1 root root 80 Nov 8 12:22 MokListXRT-605dab50-e046-4300-abb6-3dd810dd8b23 -rw-r--r-- 1 root root 12 Nov 8 12:22 OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 7 Nov 8 12:22 PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 22 Nov 8 12:22 PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 112 Nov 8 12:22 PlatformRecovery0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 22 Nov 8 12:22 SbatLevelRT-605dab50-e046-4300-abb6-3dd810dd8b23 -rw-r--r-- 1 root root 6 Nov 8 12:22 Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c -rw-r--r-- 1 root root 5 Nov 8 12:22 VarErrorFlag-04b37fe8-f6ae-480b-bdd5-37d98c5e89aa
Теперь у нас диск размечен как GPT, если бы мы оставили BIOS, то он был бы MBR:
$ sudo parted -l Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sda: 8590MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 538MB 537MB fat32 boot, esp 2 538MB 8589MB 8051MB ext4
Настройка UEFI
Для того, чтобы зайти в настройки UEFI вам нужно при запуске виртуальной машины открыть её консоль и там нажать клавишу «Esc«. После входа вы увидите такое окно:
Здесь вы можете создать новую boot опцию и управлять очерёдностью загрузки. Пример создания boot опции есть на сайте proxmox.
Если вам интересна тема Proxmox VE, у меня про эту систему виртуализации и контейнерезации есть и другие статьи.