使用 KVM 運行巢狀 BIOS VM 時如何使用超過 2GB 的 RAM

使用 KVM 運行巢狀 BIOS VM 時如何使用超過 2GB 的 RAM

我有一台運行 Debian 11 的 Linux 主機,在該主機上有一個 Ubuntu 22.04 VM。在該 VM 內,我想使用巢狀虛擬化來執行 Windows 10 VM。 ubuntu VM 使用 EFI 啟動,巢狀虛擬化運作良好。

當 Ubuntu VM 中運行的 Windows VM 也使用 EFI 啟動時,一切都工作正常,我提供給它的所有 ram 都被檢測到並且可用,並且 VM 具有良好的性能,因此嵌套虛擬化工作正常。

我的問題是,使用 EFI 時,vibvirt(尚)不支援快照,因此我必須使用 BIOS。然而,當我將 VM 更改為 BIOS 時,一切正常,除了現在來賓只能看到 2GB 的 RAM。我嘗試在該虛擬機器中啟動 Linux 和 memtest,但它們都只能看到 2GB。我嘗試過建立新的虛擬機,它們也表現出完全相同的行為(在 EFI 中啟動時工作正常,但在 BIOS 中啟動時則不然)

我已將 VM 磁碟和配置 1:1 複製到主機,它可以很好地偵測到整個 8GB(或我設定的任何值)。因此,只有在運行巢狀和使用 BIOS 時才會出現此問題。

此時,我已經嘗試了許多不同的配置,甚至運行超級簡單的 qemu 命令,但由於某種原因在沒有 EFI 的嵌套運行時仍然無法突破 2GB 障礙。

是否有一些我不知道的限制?

軟體版本(在嵌套的 Ubuntu VM 中):
QEMU 模擬器版本 7.2.0
libvirtd (libvirt) 9.0.0
Linux 5.19.0-35-generic

答案1

是的,在 BIOS 模式下使用巢狀虛擬化時有限制。您遇到的問題可能是由於虛擬機器中的 BIOS 韌體無法向來賓作業系統公開超過 2GB 的 RAM。

這是基於 BIOS 的虛擬化的一個已知限制,是由 BIOS 韌體映射記憶體的方式引起的。相較之下,現代虛擬機器中使用的 UEFI 韌體支援記憶體映射 I/O,這允許來賓作業系統存取更多記憶體。

若要解決此限制,您可以繼續使用具有 EFI 模式的巢狀虛擬化,或切換到使用支援 EFI 模式快照的不同虛擬化技術。或者,您可以嘗試調整虛擬機器 BIOS 韌體中的記憶體設置,儘管這可能並不總是可行或有效。

總之,基於 BIOS 的虛擬化和巢狀虛擬化的限制在於,來賓作業系統可能最多只能存取 2GB RAM。

相關內容