從 QEMU 上的真實 (UEFI) 磁碟映像引導
概括:
我希望使用從執行 Ubuntu 的真機創建的磁碟映像啟動 QEMU。創建映像並嘗試執行 QEMU 後,VM 掛起“從硬碟啟動”。
詳細說明
我有一台桌面 x86_64 機器,在其上安裝了標準 Ubuntu 20.04.3。預設情況下,這還將 GRUB 作為引導載入程序安裝在 1TiB 硬碟上。該磁碟有一個 GPT、一個 EFI 分區和一個 ext4 分區 (~50GiB)。該系統啟動、執行並且功能齊全。從 live-USB 執行,我創建了整個啟動磁碟的原始映像。讓我們呼叫圖像
ae.img
。從遠端機器上,我通過執行創建了圖像
ssh root@<IP> "dd if=/dev/sda bs=100M status=progress | xz -T 8 -1" | unxz | cp --sparse=always /proc/self/fd/0 ae.img
忽略通過網路壓縮數據的
xz
/unxz
,基本上整個磁碟由 讀取,通過網路發送,並由dd
寫入稀疏文件。對於正在執行的實時 USB,是 HDD。我已經檢查了圖像的分區表,並通過將其安裝為環回設備來檢查實際 ext4 分區中的數據。ae.img``cp``/dev/sda``fdisk
挑戰:
我想使用 QEMU 在另一個(幾乎相同的)系統上執行具有此磁碟映像的 VM。我認為如果我將此映像指定為 QEMU 上的驅動器,它可能會嘗試從它啟動,然後點擊 GRUB 引導載入程序,依此類推。為了保持相同,我嘗試使用影片輸出啟動它。我使用的命令是:
-m 4G \ -machine type=q35,accel=kvm \ -smp 4 \ -drive format=raw,file=ae.img \ -cpu host \ -display default \ -vga virtio \ -show-cursor
我已將圖像指定為驅動器,給它一個 vga 顯示器、4GB 記憶體和 4 個核心。應該夠了。執行這個命令會給我一個 QEMU 視窗,如下所示。我一直在啟動,沒有進一步的進展。
htop
報告 QEMU 以 100% 的速度消耗一個核心,其中一個條形為 50% 藍色(低優先級程序)和 50% 紅色(核心)。我如何診斷正在發生的事情?任何建議的修復?
剛剛想通了。
概括
QEMU 預設使用 BIOS 引導。這與使用 UEFI 啟動的真實係統形成對比。UEFI 和 BIOS 需要不同的磁碟組織。我的磁碟映像(來自 UEFI 系統)掛在使用 BIOS 引導的 QEMU 上。
修復:附加選項
-bios /usr/share/ovmf/OVMF.fd
OVMF 提供正確的韌體。
更詳細的回答
引用OSDev的話,“舊版 BIOS 將 512 字節的平面二進制 blob 從引導設備的 MBR 載入到物理地址 7C00 的記憶體中並跳轉到它。”。這可能包含實際 UEFI 磁碟上的一些任意數據,導致它掛起。