Linux

從 QEMU 上的真實 (UEFI) 磁碟映像引導

  • October 5, 2021
概括:

我希望使用從執行 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 啟動視窗

剛剛想通了。

概括

QEMU 預設使用 BIOS 引導。這與使用 UEFI 啟動的真實係統形成對比。UEFI 和 BIOS 需要不同的磁碟組織。我的磁碟映像(來自 UEFI 系統)掛在使用 BIOS 引導的 QEMU 上。

修復:附加選項-bios /usr/share/ovmf/OVMF.fd

OVMF 提供正確的韌體。

更詳細的回答

引用OSDev的話,“舊版 BIOS 將 512 字節的平面二進制 blob 從引導設備的 MBR 載入到物理地址 7C00 的記憶體中並跳轉到它。”。這可能包含實際 UEFI 磁碟上的一些任意數據,導致它掛起。

引用自:https://unix.stackexchange.com/questions/671966