如何在远程Ubuntu/Debian服务器上无libvirt运行无头QEMU?
模块加载报错修复
你遇到的模块初始化失败报错是QEMU主程序和对应block模块版本不匹配导致,先执行对应命令修复:
- Debian/Ubuntu 系列系统:
sudo apt update && sudo apt install --reinstall qemu-system-x86 qemu-block-extra
- RHEL/CentOS/Fedora 系列系统:
sudo dnf reinstall qemu-system-x86 qemu-block-extras
如果是自行编译安装的QEMU,需要把编译生成的所有模块安装到对应路径,或者编译时添加--disable-modules参数静态编译,避免动态加载模块的问题。
参数冲突问题说明
-nographic参数会将QEMU的所有输入输出绑定到当前终端,和-daemonize后台脱离终端的特性互斥,不能同时使用。
两种无头运行QEMU的可用方案
方案1:纯后台运行,不需要直接访问控制台
直接使用-display none配合-daemonize即可,不要加-nographic参数,正确命令如下:
qemu-system-x86_64 -hda hdd.img -m 1G -net nic,macaddr=MACADDR -net bridge,br=BRIDGE -enable-kvm -display none -daemonize
启动后可以通过ps aux | grep qemu查看进程是否正常运行,需要终止时直接kill对应进程即可。
方案2:后台运行,同时支持访问虚拟机串口和QEMU监控界面
将串口和监控界面重定向到本地TCP端口,方便后续远程连接调试:
qemu-system-x86_64 -hda hdd.img -m 1G -net nic,macaddr=MACADDR -net bridge,br=BRIDGE -enable-kvm -display none -serial telnet:127.0.0.1:4444,server,nowait -monitor telnet:127.0.0.1:4445,server,nowait -daemonize
使用说明:
- 执行
telnet 127.0.0.1 4444即可连接虚拟机的串口控制台,需要虚拟机内部内核启动参数添加console=ttyS0且开启ttyS0终端服务才能正常交互 - 执行
telnet 127.0.0.1 4445即可连接QEMU监控界面,可执行查看虚拟机状态、热插拔设备、关闭虚拟机等操作
注意事项
如果使用普通用户运行,需要将用户加入kvm和netdev用户组,否则会出现权限不足无法使用KVM加速或者无法挂载网桥的问题。
内容的提问来源于stack exchange,提问作者nbs2020
相关产品推荐
相关产品推荐

