QEMU не учитывает порядок загрузки при загрузке с UEFI (OVMF)

Вероятно, лучше протестировать конкретную службу, чем использовать ping-запрос ICMP. Предполагая, что вы принимаете этот совет, вот пример, который будет тестировать демон безопасной оболочки:

hostlist=(host1.example.com host2.example.com)
for host in "${hostlist[@]}"; do
    if nc -w 2 -z $host 22; then
        echo "INFO: ssh on $host responding"
    else
        echo "ERROR: ssh on $host not responding"
    fi
done
0
18.07.2019, 01:05
3 ответа

В соответствии с fedoraproject.org/wiki для загрузки в оболочку UEFI требуется «UefiShell.iso».

Since OVMF doesn't ship with any SecureBoot keys installed, we need to install some to mimic what an MS certified UEFI machine will ship with. OVMF now ships with the binaries required to set up a default set of keys. The easiest way is to use UefiShell.iso which is available at /usr/share/edk2/ovmf/UefiShell.iso. Boot your VM with this as the CD-ROM image and it should boot into the UEFI shell. At the prompt.

0
28.01.2020, 02:39

Я последовал вашему совету по Edit2 и вот что обнаружил.

На самом деле, опция -boot [order=drives][,once=drives]...относится только к начальной загрузке BIOS/Legacy. Если вы проверите документы QEMU по этому параметру, вы увидите, что в нем нет замечаний по EFI.

Чтобы изменить поведение загрузки EFI в QEMU, вам придется отредактировать VM_VARS.fd, который, если я правильно понял, соответствует флэш-памяти SPI, которая содержит параметры загрузки, указанные в стандарте EFI. Возможно, вы могли бы отредактировать VM_VARS.fdнапрямую, но я, честно говоря, не изучал этот метод; Вместо этого я использовал UEFI Shell. Вот шаги, которые я предпринял:

1 )Сделайте копию конфигурации по умолчанию.

`$ cp /usr/share/OVMF/OVMF_VARS.fd ~/my_vars.fd`

2 )Запустите QEMU и получите доступ к оболочке UEFI.

В моем случае я хотел загрузиться с устройства SATA, поэтому -drive id=disk...и далее зависит от моей настройки, и вы должны изменить ее на то, что вам нужно.

sudo qemu-system-x86_64 \
          -cpu host --enable-kvm \
          -drive "if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd" \
          -drive "if=pflash,format=raw,file=~/my_vars.fd" \ 
          \
          -drive id=disk,file=fat:rw:rootfs,if=none \
          -device ich9-ahci,id=ahci \
          -device ide-drive,drive=disk,bus=ahci.0 \
          -nographic \
          -no-reboot \

Дождитесь перехода к оболочке UEFI. Это может занять несколько минут, если он изначально пытается загрузиться по сети. Ты закончишь здесь:

UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
      FS0: Alias(s):HD1a65535a1:;BLK3:
          PciRoot(0x0)/Pci(0x4,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1)
     BLK0: Alias(s):
          PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0)
     BLK1: Alias(s):
          PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x1)
     BLK2: Alias(s):
          PciRoot(0x0)/Pci(0x4,0x0)/Sata(0x0,0xFFFF,0x0)

Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell> 

Вы можете обратиться к этому обширному списку команд оболочки EFI или к любой другой документации по UEFI. Я нашел эту статью об Arch очень полезной; он показывает, как добавлять, удалять и перемещать загрузочные записи.

3 )Измените загрузочные записи. Вы, вероятно, запустите что-то вроде:

Shell> bcfg boot add 0 FS0:\EFI\boot\BOOT_X64.efi "my_boot"

Разбивка:

bcfg boot add-добавить новую загрузочную запись.

0-где вставить (0 является первым ).

FS0:\EFI\boot\BOOT_X64.efi-[сопоставление устройства _] :[путь/к/efi/полезной нагрузке/в/устройстве]. Используйте команду mapдля отображения сопоставлений. Обратите внимание, что FS0 — это мое устройство SATA.

"my_boot"-псевдоним для вашей записи.

Вот именно. Ваши изменения будут сохранены в my_vars.fd. Не забудьте добавить его во все последующие вызовы QEMU.

2
28.01.2020, 02:39

Если вы загружаетесь с этими параметрами в QEmu, используя свежую копию /usr/share/OVMF/OVMF _VARS.fd, компакт-диск должен запускаться автоматически:

-drive file=${WINDOWS_INSTALL_ISO},format=raw,if=none,media=cdrom,id=drive-cd1,readonly=on \
-device ahci,id=achi0 \
-device ide-cd,bus=achi0.0,drive=drive-cd1,id=cd1,bootindex=1

(они взяты из скрипта в qemu -ovmf -secureboot , который загружает UefiShell.iso из скрипта Python и передает ему команды по каналу ). Первая строка добавляет устройство, вторая строка добавляет адаптер, а третья строка подключает устройство к адаптеру.

Однако сам установщик Windows отображает сообщение «Нажмите любую клавишу для загрузки с компакт-диска или DVD», и если время -продолжается, загрузка будет продолжена (, которая приведет к оболочке EFI ).Первоначально этот способ был сделан для предотвращения повторного запуска установки при первой перезагрузке машины, и я считаю, что это также происходит, даже если у вас есть файл autounattend.xml на носителе.

В вопросе Загрузочный iso-файл Windows без нажатия какой-либо клавиши упоминается, что существует файл efisys_noprompt.bin, который можно использовать вместо efisys.bin в каталоге EFI\Microsoft\Bootна компакт-диске.. Вы можете сделать это как часть конфигурации установочного носителя.

Если у вас есть жесткое требование не изменять ISO, вы можете попробовать создать небольшой образ, содержащий только AutoUnattend.xml и раздел EFI, а затем использовать bcdedit для изменения загрузочной базы данных в EFI\Microsoft\Boot\BCD, чтобы установить ramdisksdidevice опция загрузчика загрузить программу установки с компакт-диска (Я не знаю, сработает ли это на самом деле; Я не пробовал ).

Использовать параметр -no-rebootдля QEmu при установке; когда машина перезагрузится, она вернется к вашему скрипту; затем вы можете запустить его снова с другим загрузочным индексом во второй раз.

Чтобы использовать bootindex с жестким диском, вы можете добавить его в QEmu таким образом:

-drive file=${TARGET_IMAGE},format=raw,if=none,media=disk,id=drive-hd1,readonly=off \
-device virtio-scsi-pci,id=scsi0 \
-device scsi-hd,bus=scsi0.0,drive=drive-hd1,id=hd1,bootindex=2

(для этого адаптера, конечно же, потребуются VirtIO установленные драйверы от RedHat)

3
07.08.2020, 13:32

Теги

Похожие вопросы