
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 しか認識しなくなる点を除いて、すべて正常に動作します。その VM で Linux を起動して memtest を実行してみましたが、どちらも 2GB しか認識しません。新しい VM を作成してみましたが、まったく同じ動作が見られます (EFI で起動すると正常に動作しますが、BIOS では動作しません)。
VM ディスクと構成を 1:1 でホストにコピーしたところ、8GB 全体 (または設定した値) が正常に検出されました。したがって、この問題はネストされた状態で実行され、BIOS を使用している場合にのみ発生します。
この時点で、非常に単純な qemu コマンドを実行しても、さまざまな構成を試しましたが、何らかの理由で EFI なしでネストして実行すると 2 GB の壁を破ることができません。
私が気づいていない制限があるのでしょうか?
ソフトウェア バージョン (ネストされた Ubuntu VM 内):
QEMU エミュレータ バージョン 7.2.0
libvirtd (libvirt) 9.0.0
Linux 5.19.0-35-generic
答え1
はい、BIOS モードでネストされた仮想化を使用する場合は制限があります。発生している問題は、仮想マシンの BIOS ファームウェアがゲスト オペレーティング システムに 2 GB を超える RAM を公開できないことが原因である可能性があります。
これは BIOS ベースの仮想化の既知の制限であり、BIOS ファームウェアがメモリをマップする方法によって発生します。対照的に、最新の仮想マシンで使用される UEFI ファームウェアはメモリマップ I/O をサポートしており、ゲスト オペレーティング システムはより多くのメモリにアクセスできます。
この制限を回避するには、EFI モードでネストされた仮想化を引き続き使用するか、EFI モードでスナップショットをサポートする別の仮想化テクノロジを使用するように切り替えます。または、仮想マシンの BIOS ファームウェアでメモリ設定を調整することもできますが、これが常に可能または効果的であるとは限りません。
要約すると、ネストされた仮想化による BIOS ベースの仮想化の制限は、ゲスト オペレーティング システムが最大 2 GB の RAM にしかアクセスできない可能性があることです。