Данная статья применима к:
Общая информация
После установки обновления БЮЛЛЕТЕНЬ № 2024-1108SE17MD (срочное оперативное обновление 1.7.6.UU.1) виртуальные машины (ВМ) в системе виртуализация QEMU/KVM, использующие загрузку UEFI и созданные в более ранних обновлениях перестают запускаться. При запуске ВМ выдается ошибка:
qemu: could not load PC BIOS '/usr/share/OVMF/OVMF_CODE.fd
Данная ошибка вызвана сменой версий виртуального встроенного программного обеспечения (прошивка), и вызванной этим сменой наименований файлов. Таблица соответствия имен файлов:
| Старая версия (2М) | Новая версия (4М) | Комментарий |
|---|---|---|
| /usr/share/OVMF/OVMF_CODE.fd | /usr/share/OVMF/OVMF_CODE_4M.fd | Копия старой версии находится в файле /usr/share/ovmf/OVMF.fd |
| /usr/share/OVMF/VMF_CODE.ms.fd | /usr/share/OVMF/OVMF_CODE_4M.ms.fd | |
| /usr/share/OVMF/OVMF_CODE.secboot.fd | /usr/share/OVMF/OVMF_CODE_4M.secboot.fd |
Быстрое решение
Для обеспечения запуска ВМ использующих прошивку /usr/share/OVMF/OVMF_CODE.fd следует создать символическую ссылку на копию старой версии:
Миграция с 2M на 4M при использовании разделяемых прошивок CODE/VARS
ВМ могут использовать раздельные образы прошивок, состоящие из двух частей:
- CODE — доступна только для чтения используется ВМ совместно;
- VARS — переменные, значения которых индивидуальны для каждой ВМ и могут перезаписываться.
Для миграции ВМ с версии прошивок 2M на версию 4M при использовании разделяемых прошивок CODE/VARS:
Выключить виртуальную машину.
Найти отдельные образы частей прошивки CODE и VARS, используемые виртуальной машиной. Для виртуальных машин на основе libvirt эти пути к этим образам указаны в описании ВМ в секции <os>:
<loader> - подэлемент указывает на образ CODE;
<nvram> - подэлемент указывает на образ VARS.
Заменить в описании ВМ путь к изображению CODE версии 2M на соответствующий путь к изображению версии 4M:
2M
4M
/usr/share/OVMF/OVMF_CODE.fd
/usr/share/OVMF/OVMF_CODE_4M.fd
/usr/share/OVMF/OVMF_CODE.ms.fd
/usr/share/OVMF/OVMF_CODE_4M.ms.fd
/usr/share/OVMF/OVMF_CODE.secboot.fd
/usr/share/OVMF/OVMF_CODE_4M.secboot.fd
Установить пакеты для использования инструмента virt-fw-vars:
Для Astra Linux Special Edition 1.8 :
python3-virt-firmware
python3-pefile
- Команда:
Для Astra Linux Special Edition 1.7:
python3-virt-firmware
python3-pefile
- python3-future
python3-importlib
python3-more-itertools
python3-zipp
Команда:
Выполнить сценарий
/usr/share/doc/ovmf/2M_VARS-to-4M_VARS.sh:sudo bash /usr/share/doc/ovmf/2M_VARS-to-4M_VARS.sh -i <путь_к_файлу_VARS_ВМ>Файл VARS обычно расположен в каталоге /home/$USER/.config/libvirt/qemu/nvram/. Пример вывода скрипта:
Backing up vm_VARS.fd to vm_VARS.fd.1703354741 INFO: reading raw edk2 varstore from vm_VARS.fd INFO: var store range: 0x64 -> 0x40000 INFO: writing json varstore to /tmp/tmp.bP2jFSFVG8 INFO: reading raw edk2 varstore from /usr/share/OVMF/OVMF_VARS_4M.fd INFO: var store range: 0x64 -> 0x40000 INFO: set variable 525400CD1990 from /tmp/tmp.bP2jFSFVG8 […] INFO: set variable certdb from /tmp/tmp.bP2jFSFVG8 INFO: set variable db from /tmp/tmp.bP2jFSFVG8 INFO: set variable dbx from /tmp/tmp.bP2jFSFVG8 INFO: writing raw edk2 varstore to vm_VARS.fd
Перед началом преобразования будет сделана резервная копия старой прошивки (см. первую строку в примере вывода команды выше).
Запустить ВМ.
Убедиться в успешном запуске ВМ.
Удостоверившись в успешном запуске можно удалить резервную копию.