如何在Linux下不使用KVM,通过QEMU模拟X86 VMX功能?
用QEMU模拟X86 CPU测试VMX特性的完整指南
刚好我之前做过类似的测试,给你详细梳理一下整个流程,分三个核心部分讲清楚:
1. 启用VMX模拟的QEMU启动参数
要让QEMU模拟支持VMX的x86 CPU,关键是指定带有VMX扩展的CPU型号,同时搭配必要的启动参数。这里分两种场景:
纯软件模拟(TCG模式,无需宿主机硬件支持)
如果你的宿主机CPU没开VT-x/AMD-V,或者想完全用QEMU软件模拟,用以下命令:
qemu-system-x86_64 \ -m 4G \ -cpu qemu64,+vmx \ -hda linux-disk.img \ -bios /usr/share/qemu/OVMF.fd \ -display gtk \ -monitor stdio
参数解释:
-m 4G:给模拟系统分配4GB内存,足够Linux运行和嵌套虚拟化测试-cpu qemu64,+vmx:基于qemu64基础CPU,强制开启VMX扩展;也可以用更贴近真实硬件的型号,比如-cpu Haswell,+vmx-hda linux-disk.img:指定你的Linux系统磁盘镜像-bios /usr/share/qemu/OVMF.fd:用UEFI BIOS启动,更适配现代Linux和VMX特性-display gtk:直接弹出GTK窗口显示模拟系统,也可以用-vnc :0通过VNC连接-monitor stdio:把QEMU监控器绑定到终端,方便实时查看模拟状态和调试
硬件加速模式(KVM,需宿主机开启VT-x/AMD-V)
如果宿主机CPU支持并开启了VT-x/AMD-V,加上-enable-kvm可以大幅提升模拟速度,命令如下:
qemu-system-x86_64 \ -m 4G \ -cpu Haswell,+vmx \ -hda linux-disk.img \ -bios /usr/share/qemu/OVMF.fd \ -enable-kvm \ -display gtk \ -monitor stdio
2. 模拟系统中Linux的启动与VMX测试方法
首先你需要准备一个Linux系统镜像,步骤如下:
创建空白磁盘镜像:
qemu-img create -f qcow2 linux-disk.img 20G挂载Linux ISO安装系统:
下载Ubuntu/CentOS等Linux发行版的ISO,用QEMU启动并安装:qemu-system-x86_64 \ -m 4G \ -cpu qemu64,+vmx \ -hda linux-disk.img \ -cdrom ubuntu-22.04.3-server-amd64.iso \ -bios /usr/share/qemu/OVMF.fd \ -display gtk按照安装向导完成Linux系统安装即可。
启动Linux并测试VMX:
安装完成后,用前面的启动命令启动Linux,进入系统后:- 验证VMX是否生效:
如果输出包含grep -E 'vmx|svm' /proc/cpuinfovmx(Intel)或svm(AMD),说明QEMU的VMX模拟已经成功。 - 测试嵌套虚拟化:
安装KVM工具链,尝试创建嵌套虚拟机:
然后用# Ubuntu/Debian系统 sudo apt update && sudo apt install qemu-kvm libvirt-daemon-system virt-manager sudo systemctl start libvirtdvirt-manager图形界面或命令行创建虚拟机,能正常启动就说明VMX功能工作正常。
- 验证VMX是否生效:
3. QEMU模拟日志的查看方式
QEMU的日志分两类,宿主机端的模拟日志和模拟系统内部的日志:
宿主机端的QEMU日志
- 监控器日志:如果启动时加了
-monitor stdio,QEMU的实时状态、调试信息会直接输出到终端;如果用了-monitor unix:/tmp/qemu-monitor.sock,可以通过socat连接查看。 - 调试日志:如果需要详细的VMX相关日志,启动时添加调试参数:
这样所有VMX模拟、CPU相关的调试信息都会写入qemu-system-x86_64 \ # 其他参数... -D qemu-vmx.log \ -d vmx,guest_errors,cpuqemu-vmx.log文件,方便排查问题。 - 串口输出:加
-serial stdio可以把Linux内核的启动日志、系统输出重定向到宿主机终端,适合查看启动阶段的问题。
模拟系统内部的日志
和真实Linux系统完全一样,日志保存在/var/log/目录下,比如:
/var/log/syslog:系统通用日志/var/log/kern.log:内核日志,包含VMX相关的内核信息- 可以直接在模拟的Linux系统里用
cat、tail等命令查看。
内容的提问来源于stack exchange,提问作者wangt13
相关产品推荐
相关产品推荐

