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> - 导出后再定义:
- 导出配置文件:
virsh dumpxml <vm_name> > /tmp/vm.xml - 编辑配置文件:
/tmp/vm.xml - 定义虚拟机:
virsh define /tmp/vm.xml
- 导出配置文件:
桥接网络
需要先使用 ifupdown、Netplan、ovs、ip等方式创建网桥,参考
启用 Virtio-GL
- Spice 启用 OpenGL
<graphics type='spice'>
<listen type='none'/> <!-- 开启OpenGL时不能监听网络,只能本地连接 -->
<gl enable='yes' rendernode='/dev/dri/renderD128'/> <!-- 显示设备路径 -->- 设置显卡
<video>
<model type='virtio' heads='1' primary='yes'>
<acceleration accel3d='yes'/> <!-- 启用3的加速 -->
<resolution x='2256' y='1504'/> <!-- 可以在这设置非标准分辨率 -->- 连接虚拟机 由于开启 OpenGL 后,不允许监听网络,只能由 Spice 客户端直接与 Qemu 本地通信连接虚拟机:
virt-viewer --connect qemu:///system --attach win11使用 Virtiofsd 共享文件夹的一些问题
权限问题
表现:error: 内部错误:virtiofsd 意外终止
解决:请排查源路径 source 是否能被用户 libvirt-qemu 访问。
virtiofsd 缺失问题。
表现:error: 操作失败: 无法找到一个满意的 virtiofsd
Debian 13+
sudo apt install virtiofsdDebian 12 以下
目前 Debian 12 以下的仓库中没有软件包 virtiofsd ,只能自行下载二进制文件。
前往 virtiofsd 仓库
,在 Readme 中找到二进制文件下载链接并下载。
将二进制文件放到对应位置并赋予执行权限:
sudo mv virtiofsd /usr/local/bin/virtiofsd
sudo chmod +x /usr/local/bin/virtiofsd修改 XML 指向新路径:
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<binary path='/usr/local/bin/virtiofsd'/>Windows 挂载共享文件夹
- 安装驱动 virtio-win-guest-tools (安装系统时注入过 virtio 驱动的也要安装)和 WinFsp 。
- 安装完成后,搜索
服务或 执行services.msc。 - 找到名为
VirtIO-FS Service的服务,将其设为自动并 启动。
声音输出
Sprice 方案
由 Sprice 客户端输出声音
<audio id="1" type="spice"/>PulseAudio 方案
直接输出到本机的 PulseAudio
<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 直通
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0xXXXX'/>
<product id='0xXXXX'/>
</source>
</hostdev>关于 Intel 大小核
由于部分 Intel CPU 的大小核特性,会出现部分核心支持超线程,而部分又不支持,如果仅使用 <vcpu> 设置核心数,可能会出现虚拟机内 CPU 核心数不正确的情况。为此需要手动设置 CPU 拓扑:
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" clusters="1" cores="10" threads="1"/>
</cpu>