qemu 会话级别

qemu 分为 qemu:///session(用户会话)与 qemu:///system(系统会话),两种会话的数据是独立的,默认情况下普通用户使用的是用户会话,root 用户使用的是系统会话。 核心区别在于运行权限、资源归属与管理范围,纯计算性能(CPU / 内存)几乎无差异,但 I/O 与功能受限会导致用户会话下整体性能 / 能力偏弱。

配置文件位置:

  • 用户会话:`~/.config/libvirt
  • 系统会话:`/etc/libvirt

创建虚拟机

可以使用图形化工具 virt-manager 或命令行工具 virt-install 完成虚拟机的创建。 也可以从xml虚拟机配置文件导入 virsh define vm.xml


修改虚拟机配置

可以在 <libvirt>/qemu/*.xml 找到虚拟机配置文件,但理论上并不建议直接操作这些文件,因为无自动验证,可能导致配置错误而不自知。建议方法如下:

  • 使用命令自动调起编辑器virsh edit <vm_name>
  • 导出后再定义
    1. 导出配置文件:virsh dumpxml <vm_name> > /tmp/vm.xml
    2. 编辑配置文件:/tmp/vm.xml
    3. 定义虚拟机:virsh define /tmp/vm.xml

桥接网络

需要先使用 ifupdownNetplanovsip等方式创建网桥,参考


启用 Virtio-GL

  • Spice 启用 OpenGL
XML
<graphics type='spice'>
  <listen type='none'/> <!-- 开启OpenGL时不能监听网络,只能本地连接 -->
  <gl enable='yes' rendernode='/dev/dri/renderD128'/> <!-- 显示设备路径 -->
点击展开查看更多
  • 设置显卡
XML
<video>
  <model type='virtio' heads='1' primary='yes'>
	<acceleration accel3d='yes'/> <!-- 启用3的加速 -->
	<resolution x='2256' y='1504'/> <!-- 可以在这设置非标准分辨率 -->
点击展开查看更多
  • 连接虚拟机 由于开启 OpenGL 后,不允许监听网络,只能由 Spice 客户端直接与 Qemu 本地通信连接虚拟机:
BASH
virt-viewer --connect qemu:///system --attach win11
点击展开查看更多

使用 Virtiofsd 共享文件夹的一些问题

权限问题

表现error: 内部错误:virtiofsd 意外终止 解决:请排查源路径 source 是否能被用户 libvirt-qemu 访问。

virtiofsd 缺失问题。

表现error: 操作失败: 无法找到一个满意的 virtiofsd

Debian 13+

BASH
sudo apt install virtiofsd
点击展开查看更多

Debian 12 以下

目前 Debian 12 以下的仓库中没有软件包 virtiofsd ,只能自行下载二进制文件。 前往 virtiofsd 仓库 ,在 Readme 中找到二进制文件下载链接并下载。 将二进制文件放到对应位置并赋予执行权限:

BASH
sudo mv virtiofsd /usr/local/bin/virtiofsd
sudo chmod +x /usr/local/bin/virtiofsd
点击展开查看更多

修改 XML 指向新路径:

XML
<filesystem type='mount' accessmode='passthrough'>
	<driver type='virtiofs'/>
	<binary path='/usr/local/bin/virtiofsd'/>
点击展开查看更多

Windows 挂载共享文件夹

  1. 安装驱动 virtio-win-guest-tools (安装系统时注入过 virtio 驱动的也要安装)和 WinFsp
  2. 安装完成后,搜索 服务 或 执行 services.msc
  3. 找到名为 VirtIO-FS Service 的服务,将其设为 自动 并 启动。

声音输出

Sprice 方案

由 Sprice 客户端输出声音

XML
<audio id="1" type="spice"/>
点击展开查看更多

PulseAudio 方案

直接输出到本机的 PulseAudio

XML
<audio id='1' type='pulseaudio' timerPeriod='4000' serverName='/run/user/1000/pulse/native'>
  <input mixingEngine='no'/>
  <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='20000'>
    <settings frequency='48000' channels='2' format='s16'/>
  </output>
</audio>
点击展开查看更多

USB 直通

XML
<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0xXXXX'/>
    <product id='0xXXXX'/>
  </source>
</hostdev>
点击展开查看更多

关于 Intel 大小核

由于部分 Intel CPU 的大小核特性,会出现部分核心支持超线程,而部分又不支持,如果仅使用 <vcpu> 设置核心数,可能会出现虚拟机内 CPU 核心数不正确的情况。为此需要手动设置 CPU 拓扑:

XML
<cpu mode="host-passthrough" check="none" migratable="on">
	<topology sockets="1" dies="1" clusters="1" cores="10" threads="1"/>
</cpu>
点击展开查看更多

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/092e4459/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键