QEMUを使用して、qemu-system-x86_64
QEMUにドライブに接続されている仮想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.bin
efisys.binを置き換えることができるファイルがあると述べました。EFI\Microsoft\Boot
インストールメディア構成の一部としてこれを行うことができます。
ISOを変更しないことが厳しい要件がある場合は、AutoUnattend.xmlとEFIパーティションのみを含む小さなイメージを作成し、bcdeditを使用してブートデータベースを変更し、EFI\Microsoft\Boot\BCD
ramdisksdideviceブートローダオプションを設定して次からインストーラをロードできます。あります。 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ドライバがインストールされています)
答え2
私はEdit2に関するあなたのアドバイスに従い、これが私が見つけたものです。
実際、-boot [order=drives][,once=drives] ...
オプションはBIOS/レガシーブートにのみ適用されます。確認してみるとQEMUドキュメントこのオプションでは、EFIの説明がないことがわかります。
QEMUでEFIブート動作を変更するには、このファイルを編集する必要があります。VM_VARS.fd
私が正しく理解した場合、このファイルはEFI規格で指定されたブートパラメータを含むFlash SPIメモリと同じです。自分で編集することもできますが、正直なところ、VM_VARS.fd
その方法を見ていませんでした。代わりにUEFIシェルを使用しています。私が取ったステップは次のとおりです。
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
- [device_mapping]: [パス/to/efi/payload/in/device]。map
マッピングを一覧表示するには、このコマンドを使用します。 FS0は私のSATAデバイスです。
"my_boot"
- あなたのアイテムのエイリアスです。
それはすべてです。修正はに保存されますmy_vars.fd
。その後のすべてのQEMU呼び出しにそれを追加することを忘れないでください。
答え3
ゲストからCD-ROM / DVD-ROMを手動で起動すると便利です。
- TianoCoreスタート画面が表示されるのを待ちます。
- ESCキーを押す
- ブートマネージャオプションを使用してDVD-ROMから起動する
答え4
~によるとfedoraproject.org/wikiUEFI シェルから起動するには「UefiShell.iso」が必要です。
OVMFにはSecureBootキーがインストールされていないため、MS認証UEFIコンピュータに付属のキーを模倣するためにいくつかのキーをインストールする必要があります。 OVMF には、主キーセットの設定に必要なバイナリが付属しています。最も簡単な方法は、/usr/share/edk2/ovmf/UefiShell.isoに提供されているUefiShell.isoを使用することです。このファイルをCD-ROMイメージとして使用して、UEFIシェルから起動する必要がある仮想マシンを起動します。プロンプトに従ってください。