QEMU/故障排除
鼠标光标抖动或不规律
如果光标在屏幕上不受控制地跳动,在启动 QEMU 之前在终端中输入此命令可能会有帮助
$ export SDL_VIDEO_X11_DGAMOUSE=0
如果这有帮助,您可以将其添加到您的 ~/.bashrc 文件中。
无可见光标
在 QEMU 的选项中添加 -display default,show-cursor=on 以显示鼠标光标。
如果仍然无效,请确保您已正确设置显示设备,例如:-vga qxl。
另一个可以尝试的选项是 -usb -device usb-tablet,正如在 QEMU#鼠标集成 中提到的。这会覆盖默认的 PS/2 鼠标仿真,并作为额外的好处同步主机和客户机之间的指针位置。
可见两个不同的鼠标光标
应用 QEMU#鼠标集成 中的提示。
使用 VNC 时出现键盘问题
使用 VNC 时,您可能会遇到文中(详细描述)这里描述的键盘问题。解决方案是 *不要* 在 QEMU 上使用 -k 选项,而是使用来自 gtk-vnc 的 gvncviewer。另请参阅 libvirt 邮件列表中发布的 这条消息。
键盘似乎损坏或箭头键不起作用
如果您发现有些按键不起作用或按下的是错误的按键(特别是箭头键),您可能需要将您的键盘布局指定为选项。键盘布局可以在 /usr/share/qemu/keymaps/ 中找到。
$ qemu-system-x86_64 -k keymap disk_image
无法读取键盘映射文件
qemu-system-x86_64: -display vnc=0.0.0.0:0: could not read keymap file: 'en'
这是由于传递给 -k 参数的 *keymap* 无效。例如,en 无效,但 en-us 有效 - 请参阅 /usr/share/qemu/keymaps/。
窗口调整大小时客户机显示拉伸
要恢复默认窗口大小,请按 Ctrl+Alt+u。
ioctl(KVM_CREATE_VM) 失败:16 设备或资源繁忙
如果在使用 -enable-kvm 选项启动 QEMU 时出现此错误消息
ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy failed to initialize KVM: Device or resource busy
这意味着另一个 虚拟机监控程序 正在运行。不建议也不可能并行运行多个虚拟机监控程序。
libgfapi 错误消息
启动时显示的错误消息
Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory
安装 glusterfs 或忽略错误消息,因为 GlusterFS 是一个可选依赖项。
LIVE 环境下的内核恐慌
如果您启动一个 live 环境(或者更好:启动一个系统)您可能会遇到此问题
[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)
或者其他阻止启动的过程(例如:无法解压 initramfs,无法启动服务 foo)。尝试使用 -m VALUE 开关和适当数量的 RAM 来启动虚拟机,如果 RAM 太低,您很可能会遇到与上述问题类似的问题/没有内存开关。
Windows 7 客户机声音质量低
为 Windows 7 客户机使用 hda 音频驱动程序可能会导致声音质量低下。通过将 -soundhw ac97 参数传递给 QEMU 并从 Realtek AC'97 Audio Codecs[死链接 2025-08-16—SSL 错误] 安装 AC97 驱动程序,将音频驱动程序更改为 ac97 可能会解决问题。有关更多信息,请参阅 Red Hat Bugzilla – Bug 1176761。
无法访问 KVM 内核模块:权限被拒绝
如果您遇到以下错误
libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied
Systemd 234 为 kvm 组分配了动态 ID(参见 FS#54943)。要避免此错误,您需要编辑文件 /etc/libvirt/qemu.conf 并将 group = "78" 行更改为 group = "kvm"。
启动 Windows 虚拟机时出现“System Thread Exception Not Handled”
Windows 8 或 Windows 10 客户机在启动时可能会引发一个通用的兼容性异常,即“System Thread Exception Not Handled”,这通常是由旧版驱动程序在真实机器上行为异常引起的。在 KVM 机器上,通常可以通过将 CPU 模型设置为 core2duo 来解决此问题。
某些 Windows 游戏/应用程序崩溃/导致蓝屏
偶尔,虚拟机中运行的应用程序可能会意外崩溃,而在物理机上可以正常运行。如果在以 root 身份运行 dmesg -wH 时遇到提及 MSR 的错误,这些崩溃的原因是当客户机尝试访问不支持的 模型特定寄存器 (MSR) 时,KVM 会注入一个 通用保护故障 (GPF) - 这通常会导致客户机应用程序/操作系统崩溃。通过将 ignore_msrs=1 选项传递给 KVM 模块,忽略未实现的 MSR,可以解决许多这些问题。
/etc/modprobe.d/kvm.conf
... options kvm ignore_msrs=1 ...
添加此选项可能有助于解决的情况
- GeForce Experience 抱怨存在不支持的 CPU。
- 《星际争霸 2》和《黑色洛城》导致 Windows 10 稳定地出现
KMODE_EXCEPTION_NOT_HANDLED蓝屏。在这种情况下,蓝屏信息并未识别出驱动程序文件。
高中断延迟和微卡顿
此问题表现为小幅暂停(卡顿),在图形密集型应用程序(如游戏)中尤其明显。
- 原因之一是 CPU 节能功能,该功能由 CPU 频率缩放 控制。将其更改为所有处理器核心的
performance。 - 另一个可能的原因是 PS/2 输入。从 PS/2 输入切换到 Virtio 输入,请参阅 PCI passthrough via OVMF#通过 Evdev 传递键盘/鼠标。
QXL 视频导致分辨率低
QEMU 4.1.0 引入了一个回归,导致 QXL 视频在通过 spice 显示时可能回退到低分辨率。 [1] 例如,当 KMS 启动时,文本分辨率可能低至 4x10 个字符。尝试提高 GUI 分辨率时,它可能会转到最低支持的分辨率。
作为一种变通方法,请按此形式创建您的设备
-device qxl-vga,max_outputs=1...
使用启用了安全启动的 OVMF 时虚拟机未启动
edk2-ovmf 软件包中的 OVMF_CODE.secboot.4m.fd 和 OVMF_CODE.secboot.fd 文件是使用 SMM 支持构建的。如果虚拟机的 S3 支持未被禁用,则虚拟机可能根本无法启动。
将 -global ICH9-LPC.disable_s3=1 选项添加到 qemu 命令。
有关更多详细信息以及在 QEMU 中使用安全启动所需的选项,请参阅 FS#59465 和 https://github.com/tianocore/edk2/blob/master/OvmfPkg/README。
虚拟机未启动到 Arch ISO
当第一次尝试从 Arch ISO 镜像启动虚拟机时,启动过程会挂起。通过在启动菜单中按 e 键将 console=ttyS0 添加到内核启动选项,您将获得更多的启动消息和以下错误
:: Mounting '/dev/disk/by-label/ARCH_202204' to '/run/archiso/bootmnt' Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ... ERROR: '/dev/disk/by-label/ARCH_202204' device did not show up after 30 seconds... Falling back to interactive prompt You can try to fix the problem manually, log out when you are finished sh: can't access tty; job control turned off
错误消息并未很好地说明实际问题。问题在于 QEMU 默认分配给虚拟机的 128MB RAM。使用 -m 1024 将限制提高到 1024MB 可以解决问题并允许系统启动。之后您可以像平常一样继续安装 Arch Linux。安装完成后,可以减小虚拟机的内存分配。需要 1024MB 是因为 RAM 磁盘的要求和安装介质的大小。请参阅 arch-releng 邮件列表上的此消息 和 此论坛帖子。
客户机 CPU 中断未触发
如果您正在遵循 OSDev wiki 编写自己的操作系统,或者只是使用 QEMU 的 gdb 接口和 -s 标志逐步调试客户机架构汇编代码,了解许多模拟器(包括 QEMU)通常会实现一些 CPU 中断而留下许多硬件中断未实现是有用的。了解您的代码是否触发了中断的一种方法是使用
-d int
来启用在 stdout 上显示中断/异常。
要查看 QEMU 还提供哪些其他客户机调试功能,请参阅
qemu-system-x86_64 -d help
或将 x86_64 替换为您选择的客户机架构。
KDE 与 sddm 在登录时不会自动启动 spice-vdagent
从 /etc/xdg/autostart/spice-vdagent.desktop 中删除或注释掉 X-GNOME-Autostart-Phase=WindowManager。 [2]
QEMU 启动后蓝牙音频质量下降
禁用 WirePlumber 配置文件中的自动切换功能,以防止其使用单声道音频配置文件。
$ wpctl settings --save bluetooth.autoswitch-to-headset-profile false
Linux 客户机在 UEFI 模式下使用 GRUB 启动时挂起
更新到 edk2-ovmf 202505-1 或更高版本后,无法启动许多在 UEFI 模式下使用 GRUB 的 Linux 发行版(已知示例包括 Rocky Linux、Debian、RHEL 和 Fedora 的版本)。这也包括这些发行版的 Live ISO 镜像。
问题跟踪器: archlinux/packaging/packages/edk2#9
截至 edk2-ovmf 202508-1,此问题仍然存在。
症状:输入/输出错误。
- 尝试启动 GRUB 菜单项时
- 图形 SPICE 控制台冻结
- 向串行控制台输出报告页面错误的异常信息
- QEMU 的 CPU 使用率在一个核心上被锁定在 100%
串行控制台输出示例
!!!! X64 Exception Type - 0E(#PF - Page-Fault) CPU Apic ID - 00000000 !!!! ExceptionData - 0000000000000003 I:0 R:0 U:0 W:1 P:1 PK:0 SS:0 SGX:0 RIP - 00000000766CBCF0, CS - 0000000000000038, RFLAGS - 0000000000210046 RAX - 00000000766E7000, RCX - 00000000766E7000, RDX - 0000000000000000 RBX - 000000007E7B7F18, RSP - 000000007FE6C278, RBP - 000000007F9EC018 RSI - 0000000000000000, RDI - 0000000076709078 R8 - 0000000000000000, R9 - 000000007BCC1195, R10 - 000000007D41D7F1 R11 - 0000000000000077, R12 - 000000007DCD9000, R13 - 000000007E7B7F18 R14 - 000000007DC4D768, R15 - 000000007DC4D770 DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030 GS - 0000000000000030, SS - 0000000000000030 CR0 - 0000000080010033, CR2 - 00000000766E7000, CR3 - 000000007FC01000 CR4 - 0000000000000668, CR8 - 0000000000000000 DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000 DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400 GDTR - 000000007F9DC000 0000000000000047, LDTR - 0000000000000000 IDTR - 000000007F494018 0000000000000FFF, TR - 0000000000000000 FXSAVE_STATE - 000000007FE6BED0 !!!! Find image based on IP(0x766CBCF0) (No PDB) (ImageBase=000000006B676EE0, EntryPoint=000000006C58B537) !!!!
解决方法
- 手动降级 edk2-ovmf 至 202411-1 并保持版本,直到修复程序发布
- 应用 Debian 的 edk2 补丁,如 问题跟踪器 中所述,并为需要的客户机添加一个 fwcfg 行。
- 安装 Fedora 的 EDK2-OVMF edk2-ovmf-fedoraAUR 与 edk2-ovmf 一同安装,并为需要的客户机更改启动时的固件路径。