QEMUは、UEFI(OVMF)で起動するときに起動順序に従いません。

QEMUは、UEFI(OVMF)で起動するときに起動順序に従いません。

QEMUを使用して、qemu-system-x86_64QEMUにドライブに接続されている仮想CDROMドライブとフロッピードライブがある仮想マシンを起動するようにしたいと思います。この機能は、「cd / dvdから起動するには任意のキーを押さずに」最初の仮想CDROMドライブから自動的に起動する必要があります。

CDROMドライブを次のように指定しました。

-drive "file=${WINDOWS_INSTALL_ISO},index=1,media=cdrom"

ただし、そのパラメータで何をしても、-boot常に「cd / dvdからすぐに起動するには任意のキーを押してください...」というメッセージが約5秒間表示され、そのCDから起動しません。私は次のようなさまざまなことを試しました。

-boot order=d -boot menu=on

そして:

-boot d

そして:

-boot "order=d,menu=on"

また、開始インデックスを使用してみました。

-drive "file=${WINDOWS_INSTALL_ISO},index=1,media=cdrom,bootindex=1"

これによりエラーが発生します。Block format 'raw' does not support the option 'bootindex'

起動するCDROMドライブには、ユーザーの介入なしに自動的にインストールするように構成したWindows 10インストールイメージが含まれています。私の目標は、Windows VMを自動的に作成し、ユーザーの対話なしでWindowsを自動的にインストールするbashスクリプトを作成することです。したがって、Windows インストールで自動起動するには QEMU が必要です。

編集する:

私は次のような動作を再現しました。

sudo qemu-system-x86_64 \
    -smp 4 \
    -m 4G \
    -drive "file=/home/fedora/vm/windows10.iso,index=1,media=cdrom" \
    -boot order=d \
    -drive id=disk0,if=virtio,cache.direct=on,if=virtio,aio=native,format=raw,file=/home/fedora/Projects/misc/MobilePassThrough/vm-files/WindowsVM.img \
    -drive "if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd" \
    -drive "if=pflash,format=raw,file=/home/fedora/vm/WindowsVM_VARS.fd"

BIOS(SeaBIOS)モードではなくUEFI(OVMF)モードで起動を担当する最後の2行を削除すると、実際にはそのパラメータが-boot適用されます。ただし、UEFIモードで仮想マシンを起動する必要があります。そうでなければ役に立たない。

編集2:私が正しく理解した場合、UEFIの世界では、不揮発性リポジトリに格納されている変数(私の場合は「home / fedora / vm / WindowsVM_VARS.fd」)によって起動順序が決まります。これで起動に失敗した場合は、「UEFIシェル」に入るようです。いくつかの研究では、シェルはQEMUのシリアルポートを介して公開されることが示されており、理論的には「setvar」と「expect」を介して変数を設定することが可能でなければなりません。しかし、その変数の名前が何であるか、その値がどのように見えるか、CDドライブをどのように指定するのかさえわかりません。私は「setvar」と「expect」がどのように機能するのかわかりません。

ベストアンサー1

/usr/share/OVMF/OVMF_VARS.fdの新しいコピーを使用してこれらのパラメータでQEmuを起動すると、CDが自動的に起動します。

-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、PythonスクリプトでUefiShell.isoを実行し、コマンドをパイプします)。最初の行はデバイスを追加し、2行目はアダプタを追加し、3行目はデバイスをアダプタに接続します。

ただし、Windowsセットアッププログラム自体は、「CDまたはDVDから起動するには任意のキーを押してください」というメッセージを表示し、タイムアウトになったら起動を続行します(これによりEFIシェルに入ります)。これは、元のコンピュータを初めて再起動したときにインストールが再度実行されるのを防ぐために行われていました。

問題のWindowsは、キーを押さなくてもisoファイルを起動できます。、CDのディレクトリにefisys_noprompt.binefisys.binを置き換えることができるファイルがあると述べました。EFI\Microsoft\Bootインストールメディア構成の一部としてこれを行うことができます。

ISOを変更しないことが厳しい要件がある場合は、AutoUnattend.xmlとEFIパーティションのみを含む小さなイメージを作成し、bcdeditを使用してブートデータベースを変更し、EFI\Microsoft\Boot\BCDramdisksdideviceブートローダオプションを設定して次からインストーラをロードできます。あります。 CD(実際に動作しているかどうかわかりません。まだ試していません。)

-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

(このアダプタはもちろん必要です。仮想IORedHatドライバがインストールされています)

おすすめ記事