Общая информация

После установки обновления БЮЛЛЕТЕНЬ № 2024-1108SE17MD (срочное оперативное обновление 1.7.6.UU1) или после перехода на Astra Linux Special Edition 1.8 виртуальные машины (ВМ) в системе виртуализация QEMU/KVM, использующие загрузку UEFI и созданные в более ранних обновлениях перестают запускаться. При запуске ВМ выдается ошибка:

qemu: could not load PC BIOS '/usr/share/OVMF/OVMF_CODE.fd

или

Ошибка запуска домена: Путь «/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 следует создать символическую ссылку на копию старой версии:

sudo ln -s /usr/share/ovmf/OVMF.fd /usr/share/OVMF/OVMF_CODE.fd
Это позволит запускать ВМ без внесения изменений в их конфигурацию..


Миграция с 2M на 4M при использовании разделяемых прошивок CODE/VARS

ВМ могут использовать раздельные образы прошивок, состоящие из двух частей:

  • CODE — доступна только для чтения, может использоваться несколькими ВМ совместно;
  • VARS — может перезаписываться, индивидуальна для каждой ВМ.

Для миграции ВМ с версии прошивок 2M на версию 4M при использовании разделяемых прошивок CODE/VARS:

  1. Выключить виртуальную машину.

  2. Найти отдельные образы частей прошивки CODE и VARS, используемые виртуальной машиной.  Для виртуальных машин на основе libvirt эти пути к этим образам указаны в описании ВМ в секции <os>:

    • <loader> - подэлемент указывает на образ CODE;

    • <nvram> - подэлемент указывает на образ VARS.

  3. Заменить в описании ВМ путь к изображению 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
  4. Установить пакеты для использования инструмента 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

  5. Выполнить сценарий /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

    Перед началом преобразования будет сделана резервная копия старой прошивки (см. первую строку в примере вывода команды выше).

  6. Запустить ВМ.

  7. Убедиться в успешном запуске ВМ.

  8. Удостоверившись в успешном запуске можно удалить резервную копию.