Как включить UEFI для KVM в Red Hat Enterprise Linux (RHEL)
О содержании
- Почему стоит включить UEFI для KVM
- Установка зависимостей для поддержки UEFI
- Создание UEFI-совместимой ВМ через Cockpit
- Создание UEFI-совместимой ВМ через командную строку
- Чек-листы, отладка, альтернативы и частые вопросы
Почему стоит включить UEFI для KVM
UEFI (Unified Extensible Firmware Interface) — современный интерфейс прошивки системы. Коротко: UEFI заменяет BIOS и поддерживает большие разделы, Secure Boot и современные загрузчики.
Преимущества включения UEFI для виртуальных машин KVM:
- Позволяет устанавливать и тестировать современные ОС (например, Windows 11) в виртуальной среде.
- Упрощает тестирование схем разметки разделов и поведения загрузчика на «реальном» UEFI-оборудовании.
- Обеспечивает совместимость с ОС, требующими UEFI-only загрузки.
Кому полезно: системным администраторам, инженерам по тестированию ОС и разработчикам, которым нужно эмулировать поведение реального оборудования.
Важно: если планируете использовать Secure Boot в ВМ, дополнительно потребуется настроить соответствующие ключи и использовать Secure Boot совместимую версию OVMF.
Установка зависимостей для поддержки UEFI
Перед началом убедитесь, что система обновлена:
sudo dnf updateУстановите базовые пакеты виртуализации и утилиты управления (команды показаны для RHEL/Fedora-подобных дистрибутивов):
sudo dnf install qemu-kvm libvirt virt-install virt-viewer cockpit-machines edk2-ovmf
sudo systemctl enable --now libvirtd
sudo systemctl enable --now cockpit.socketПримечание: набор пакетов может отличаться в зависимости от вашей подписки RHEL и подключённых репозиториев; при необходимости используйте менеджер пакетов вашего дистрибутива или инструкции Red Hat.
Перезагрузите машину, чтобы новые компоненты корректно загрузились и были готовы к использованию:
sudo rebootПолезная проверка: после перезагрузки убедитесь, что службы запущены:
systemctl status libvirtd
systemctl status cockpit.socketСоздание UEFI-совместимой ВМ в RHEL Cockpit
- Откройте браузер и перейдите на Cockpit: http://localhost:9090

- Войдите под root или пользователем с привилегиями, затем в левом меню выберите «Virtual Machines» (Виртуальные машины).

- Нажмите «Create VM» (Создать ВМ).

- Заполните базовые параметры ВМ (имя, ОЗУ, диск и установочный ISO), затем нажмите «Create and Edit» (Создать и редактировать).

- В разделе Overview (Обзор) найдите ссылку BIOS (или Firmware) и выберите UEFI вместо BIOS, затем сохраните.

Важно: выбор прошивки нужно сделать до первой загрузки ВМ — после первого запуска прошивку менять нельзя.
- Создайте каталог NVRAM для вашей ВМ и скопируйте файл переменных OVMF для каждой отдельной ВМ. На хосте выполните:
sudo mkdir -p /var/lib/libvirt/qemu/nvram
sudo cp /usr/share/edk2/ovmf/OVMF_VARS.fd /var/lib/libvirt/qemu/nvram/YOUR-VM-NAME_VARS.fd
sudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/qemu/nvram/YOUR-VM-NAME_VARS.fdЗамените YOUR-VM-NAME на имя вашей виртуальной машины (без пробелов). Это создаст отдельный файл NVRAM для указанной ВМ.
- Вернитесь в Cockpit и нажмите «Install» (Установить) для загрузки установщика в UEFI-режиме.

- После загрузки внутри ВМ проверьте, что система запущена в режиме UEFI:
ls /sys/firmware/efiЕсли каталог существует и возвращает содержимое — ВМ работает в EFI-режиме.

Примечание для Windows: в Windows 10/11 можно открыть «msinfo32.exe» и посмотреть строку «BIOS Mode», где будет указано «UEFI».
Создание UEFI-совместимой ВМ через командную строку
Иногда удобнее не устанавливать дополнительные GUI-пакеты и создавать ВМ из терминала.
- Скопируйте файл переменных OVMF в каталог NVRAM для каждой ВМ (см. раздел выше):
sudo mkdir -p /var/lib/libvirt/qemu/nvram
sudo cp /usr/share/edk2/ovmf/OVMF_VARS.fd /var/lib/libvirt/qemu/nvram/YOUR-VM-NAME_VARS.fd
sudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/qemu/nvram/YOUR-VM-NAME_VARS.fd- Пример команды virt-install для создания ВМ с UEFI-загрузкой (отформатировано для читаемости):
sudo virt-install \
--name=YOUR-VM-NAME \
--memory=4096 \
--vcpus=2 \
--disk size=40 \
--boot uefi \
--graphics vnc \
--cdrom=/PATH/TO/YOUR/INSTALLER/FILE.isoЗамените параметры на нужные (имя ВМ, путь к ISO, объём ОЗУ в МБ, число vCPU и размер диска в ГБ). Примечание: –memory указывается в мегабайтах, –disk size — в гигабайтах.
- После запуска virt-install откройте графический доступ к ВМ через virt-viewer:
sudo virt-viewer YOUR-VM-NAME- Внутри ВМ снова проверьте наличие /sys/firmware/efi, чтобы убедиться в EFI-загрузке.


Дополнительно: шаблоны, чек-листы и отладка
Быстрый чек-лист перед установкой
- Система обновлена (sudo dnf update).
- Установлены qemu-kvm, libvirt, virt-install, virt-viewer, edk2-ovmf, cockpit-machines.
- Службы libvirtd и cockpit.socket включены и запущены.
- Создан отдельный файл NVRAM для каждой ВМ в /var/lib/libvirt/qemu/nvram.
- Выбрана прошивка UEFI в настройках ВМ до первой загрузки.
Критерии приёмки
- ВМ успешно загружается из установочного ISO в режиме UEFI.
- Внутри гостевой ОС команда ls /sys/firmware/efi возвращает содержимое каталога.
- Для Windows — в msinfo32 указано «BIOS Mode: UEFI».
- NVRAM-файл существует и имеет корректные права доступа для процесса libvirt.
Частые ошибки и как их исправить
Проблема: «No such file or directory» при копировании OVMF_VARS.fd. Решение: проверьте, установлен ли пакет edk2-ovmf и корректен ли путь /usr/share/edk2/ovmf/OVMF_VARS.fd.
Проблема: ВМ всё ещё загружается в BIOS-режиме. Решение: убедитесь, что прошивка ВМ в настройках установлена на UEFI до первого старта, и что указан файл NVRAM для этой ВМ.
Проблема: права доступа к файлу NVRAM мешают запуску. Решение: выполните sudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/qemu/nvram/YOUR-VM-NAME_VARS.fd (имя группы/пользователя может отличаться в вашей системе).
Роль‑ориентированные задачи
Для администратора:
- Обновить хост и установить необходимые пакеты.
- Настроить репозитории RHEL (если требуется подписка).
- Настроить SELinux/права для NVRAM-файлов при необходимости.
Для инженера тестирования:
- Создать отдельные NVRAM-файлы для тестовых ВМ.
- Тестировать разные комбинации прошивок и схем разделов.
Для разработчика ПО:
- Автоматизировать создание ВМ через скрипты с virt-install и cloud-init, если нужно массовое тестирование.
Шаблон команды virt-install (cheat sheet)
# Пример: 4GB RAM, 2 vCPU, 40GB диск, загрузка с ISO в режиме UEFI
sudo virt-install \
--name=my-uefi-vm \
--memory=4096 \
--vcpus=2 \
--disk size=40 \
--boot uefi \
--os-variant=generic \
--cdrom=/home/user/isos/windows11.iso \
--graphics spiceКогда UEFI не нужен — альтернативы
- BIOS (legacy boot) по-прежнему подходит для лёгких гостевых ОС и старых образов.
- Для простых сценариев на рабочей станции можно использовать VirtualBox (Type‑2 гипервизор).
- Для контейнеризации и лёгких изолированных сред лучше использовать Podman/containers.
Небольшая методология тестирования (mini-methodology)
- Создайте ВМ с базовыми параметрами и пустым NVRAM-файлом.
- Загрузите установщик ОС и убедитесь в присутствии EFI-панели прошивки.
- Выполните установку ОС, затем перезагрузку и проверьте /sys/firmware/efi.
- Повторите тесты с разными комбинациями дисковых схем и Secure Boot (при необходимости).
Решение на уровне принятия решения (Mermaid)
flowchart TD
A[Нужен ли UEFI?] -->|Да| B{Поддерживает ли ОС UEFI-only?}
B -- Да --> C[Выберите UEFI и настройте NVRAM]
B -- Нет --> D[Можно использовать BIOS]
A -->|Нет| D
C --> E[Тестирование и валидация]
D --> E(Если ваш просмотрщик не поддерживает mermaid, используйте простую блок-схему в голове: нужна ли UEFI? → да → настройка NVRAM и OVMF; нет → BIOS.)
Частые вопросы (FAQ)
Нужно ли для каждой ВМ отдельное NVRAM-файл?
Да. Для корректной работы и чтобы состояние переменных прошивки не пересекалось между ВМ, для каждой ВМ создавайте отдельный файл в /var/lib/libvirt/qemu/nvram.
Можно ли использовать Secure Boot с edk2-ovmf?
Да, но потребуется дополнительная настройка ключей Secure Boot и использование соответствующей версии OVMF, поддерживающей Secure Boot. Для тестирования без Secure Boot копируйте файл OVMF_VARS.fd как приведено выше.
Можно ли переключить прошивку ВМ с BIOS на UEFI после первой загрузки?
Нет. Libvirt/KVM не позволяет сменить прошивку после первой загрузки ВМ — измените прошивку до первоначального старта или создайте новую ВМ.
Риски и рекомендации безопасности
- Храните NVRAM-файлы в защищённой директории с правильными правами доступа, чтобы избежать несанкционированного изменения переменных прошивки.
- При использовании Secure Boot соблюдайте процедуру управления ключами и резервного копирования состояния NVRAM.
Локальные нюансы для RHEL (советы для региона/локали)
- На RHEL может потребоваться подписка и подключение соответствующих репозиториев для установки некоторых пакетов (edk2-ovmf и cockpit-machines). Проверьте вашу подписку Red Hat и используйте rhsm или репозитории, разрешённые вашей организацией.
Краткое резюме
- UEFI в KVM даёт лучшую совместимость с современными ОС и возможностями загрузчика.
- Установите edk2-ovmf и cockpit-machines, создайте отдельные NVRAM-файлы для каждой ВМ.
- Выбирайте UEFI в настройках ВМ до первой загрузки; проверяйте /sys/firmware/efi внутри гостя.
Изображения и скриншоты: все изменения и иллюстрации сделаны для наглядности. Изображение на обложке — фотография рабочего стола с ПК.
Image credit: Sanni Sahil via Unsplash. All alterations and screenshots by Ramces Red.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента