我有一个 Debian 10 KVM 管理程序,没有 libvirt 或其他工具来管理它,使用 QEMU 脚本。我需要一个用于旧版应用程序的 32 位 Windows VM,但在受支持的操作系统(不是 XP)上,Windows 8.1 或 10 32 位。当分配 3GB RAM 时,Windows 8.1 和 10 都会在系统属性上显示“2GB 可用”消息(我想在没有其他技术的情况下能够处理 32 位机器的最大值)。相反,Win XP 似乎使用 3GB RAM,说明启用了 PAE。
任何想法如何在 Win 8.1 或 10、32 位上使用 3GB RAM?
这是具有 3GB RAM 的 Win 8.1 VM 的屏幕截图(一些在 Win 10 上):
这是启动 VM 的 QEMU 脚本(我也尝试过主机 CPU,没有区别):
#!/bin/sh
SPICE_PORT=3010
MONITOR_PORT=2330
QEMU_AUDIO_DRV=alsa
kvm \
-M q35 \
-nodefaults \
-cpu qemu64 \
`# -cpu host` \
-m 3G \
-mem-path /dev/hugepages \
-device virtio-balloon-pci \
-rtc base=localtime \
-vga qxl \
-drive file=win8.qcow2,if=virtio,cache-size=16M,cache=writethrough \
-device virtio-net-pci,netdev=diktyo0 \
-netdev user,id=diktyo0 \
-monitor telnet:localhost:${MONITOR_PORT},server,nowait \
-device virtio-serial \
-device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
-chardev spicevmc,id=vdagent,debug=0,name=vdagent \
-spice port=${SPICE_PORT},addr=127.0.0.1,disable-ticketing \
-device virtserialport,chardev=charchannel1,id=channel1,name=org.spice-space.webdav.0 \
-chardev spiceport,name=org.spice-space.webdav.0,id=charchannel1 \
-soundhw ac97 \
-name "Windows 8.1 x86" \
-daemonize \
按照 shodanshok 的建议,我发布了资源监视器的输出(总 RAM 为 4GB):
一半的内存由硬件保留。
为了防止 QXL 视频驱动程序保留太多内存,我还将配置视频的行更改为:
-device qxl-vga,vgamem_mb=64,ram_size_mb=64,vram_size_mb=64
我可能会尝试更改 Seabios,至少是版本。不幸的是,Debian Stable QEMU 版本是 3.1.0;它已经很老了,我想知道在较新的版本中是否会出现相同的行为。
更新的答案:如评论和更新的问题所示,由于特定机器类型,具体问题与 2 GB 硬件内存预留有关。切换到 i440fx 机器类型解决了这个问题。
原始答案(留在这里,因为它可以帮助其他人在 32 位 Windows 上遇到类似问题):
尝试使用以下命令(并重新启动)增加用户空间内存分配:
请确保在执行上述命令之前对您的 VM 进行快照(并确保有有效的备份)。
我怀疑您的问题出在大页面上,您已明确要求 KVM 使用。
您实际上是否有足够的大页面来为 VM 提供整个 4GB 的 RAM?我想你可能不会。检查:
总共有多少大页面,有多少免费?注意每个大页面是 2MB。其中 1024 个可用空间只有 2GB。
因此,增加大页面的数量以解决您的虚拟机(或虚拟机!)将使用的所有内存。
现在您应该有足够的大页面来为 VM 提供所有内存。