本教程实现在 UOS V20 1070 (内核4.19) 系统上,通过编译安装 QEMU 7.2.21、libvirt 8.0.0 和 virt-manager 5.1.0,实现主机 (Host) UOS 与客户机 (Guest) Windows 10 之间基于 VirtioFS 驱动的高效文件共享。
选择此版本组合主要是因为:
- QEMU 7.2.21 是最后一个完整支持 C语言版本 virtiofsd 的QEMU稳定版。
- libvirt 8.0.0 是默认会去寻找并使用 C版本 virtiofsd 的最高版本。
系统自带版本的kvm版本老旧,且无法实现基于 VirtioFS 驱动的高效文件共享,编译安装能确保组件间更好的兼容性。教程会涉及升级 Python3、pyenv 和 Meson 以满足编译要求,并统一使用 阿里云镜像 加速下载,安装路径统一为 /usr/local。
📦 前期准备:环境与依赖
首先,我们来配置编译环境和安装基础依赖。
更新系统并安装基础工具
确保系统为最新并安装必要的开发工具:1
2
3sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl git build-essential pkg-config配置Python环境 (使用阿里云镜像)
鉴于UOS自带Python版本可能较低,我们使用pyenv安装新版Python。1
2
3
4
5
6
7
8
9
10
11
12
13
14# 安装pyenv
git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
# 配置pyenv使用国内镜像加速Python安装
echo 'export PYTHON_BUILD_MIRROR_URL="https://mirrors.aliyun.com/python/"' >> ~/.zshrc
source ~/.zshrc
# 通过pyenv安装Python 3.8.12 (此版本与QEMU 7.2.21兼容性好)
pyenv install 3.8.12
pyenv global 3.8.12升级pip和安装Meson (使用阿里云镜像)
1
2
3pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install --upgrade pip
pip install meson ninja
🔧 组件编译与安装
现在,开始编译和安装三个核心组件。
1. 编译安装 QEMU 7.2.21
QEMU是实际的虚拟机监控器,virtiofsd 也随其发布。
安装QEMU专属依赖
1
2sudo apt install -y libglib2.0-dev libpixman-1-dev libcap-ng-dev libseccomp-dev \
libfuse3-dev libattr1-dev libselinux1-dev编译与安装
1
2
3
4
5
6
7
8
9
10cd ~
wget https://download.qemu.org/qemu-7.2.21.tar.xz
tar xvf qemu-7.2.21.tar.xz
cd qemu-7.2.21
./configure --prefix=/usr/local --target-list=x86_64-softmmu \
--enable-kvm --enable-spice --enable-vnc --enable-guest-agent \
--enable-virtfs --enable-virtiofsd --enable-libusb --enable-usb-redir \
--enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl
make -j$(nproc)
sudo make install验证安装
1
2qemu-system-x86_64 --version
/usr/local/libexec/virtiofsd --version
2. 编译安装 libvirt 8.0.0
libvirt提供了管理虚拟机的API和工具链。
安装libvirt专属依赖
1
2sudo apt install -y libxml2-dev libgnutls28-dev libyajl-dev libnl-3-dev \
libnl-route-3-dev libpciaccess-dev libdevmapper-dev libudev-dev libcurl4-gnutls-dev编译与安装 (使用Meson)
1
2
3
4
5
6
7
8
9
10
11cd ~
git clone https://gitlab.com/libvirt/libvirt.git
cd libvirt
git checkout v8.0.0
meson setup build --prefix=/usr/local -Dsystem=true -Ddriver_qemu=enabled -Ddriver_libvirtd=enabled -Ddriver_remote=enabled -Ddocs=disabled
ninja -C build
sudo ninja -C build install
echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.bashrc\n
echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.zshrc\n配置并启动libvirt服务
1
2
3sudo systemctl daemon-reload
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
3. 编译安装 virt-manager 5.1.0
virt-manager是一个用于管理虚拟机的图形化界面。
安装virt-manager专属依赖
1
2sudo apt install -y gir1.2-gtk-3.0 gir1.2-gtksource-3.0 gir1.2-vte-2.91 \
libosinfo-1.0-dev gettext pylint pytest编译与安装
1
2
3
4
5
6cd ~
git clone https://github.com/virt-manager/virt-manager.git
cd virt-manager
git checkout v5.1.0
meson setup build
meson install -C build
⚙️ 配置VirtioFS文件共享
组件安装完毕,接下来配置VirtioFS共享。
设置用户权限
将当前用户加入libvirt和kvm组,以便管理虚拟机而无须root权限:1
2sudo usermod -aG libvirt,kvm $USER
newgrp libvirt准备共享目录
在主机上创建一个准备共享给虚拟机的目录:1
2sudo mkdir /mnt/virtiofs_share
sudo chown -R $USER:$USER /mnt/virtiofs_share配置虚拟机XML (关键步骤)
使用virsh edit [你的虚拟机名称]编辑Windows 10虚拟机的配置。关键点:在
<devices>部分添加文件系统设备,并必须通过<binary path="...">显式指定C版virtiofsd的路径。这是解决libvirt可能找不到正确virtiofsd的关键。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<domain type='kvm'>
...
<devices>
...
<!-- 添加VirtioFS文件系统设备 -->
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<!-- 显式指定C版virtiofsd路径 -->
<binary path='/usr/local/libexec/virtiofsd'/>
<source dir='/mnt/virtiofs_share'/>
<target dir='vm_share'/>
</filesystem>
...
</devices>
</domain>注意*:根据实践,在
qemu.conf中配置virtiofsd_path可能无效,因此直接在虚拟机XML中指定驱动位置是更可靠的方法。
Windows 10虚拟机驱动安装
要让Windows 10识别VirtioFS共享,需安装驱动。- 从 Fedora仓库 下载最新的
virtio-win.iso。 - 在virt-manager中,将
virtio-win.iso挂载到Windows 10虚拟机的CD-ROM。 - 在Windows虚拟机中,安装ISO根目录下的
virtio-win-gt-x64.msi,或通过设备管理器为未知设备手动安装virtio-fs驱动。 - 驱动安装后,在Windows文件资源管理器的地址栏输入
\\virtiofs\vm_share访问共享目录,或通过”映射网络驱动器”使用此路径。
- 从 Fedora仓库 下载最新的
💡 故障排除小贴士
权限问题:确保
/usr/local/libexec/virtiofsd对libvirt-qemu用户可执行,且共享目录有相应权限。libvirt服务:修改配置或XML后,记得重启
sudo systemctl restart libvirtd。驱动问题:确保Windows虚拟机正确安装了
virtio-fs驱动。依赖排查与解决
1
2
3
4ldd $(which qemu-system-x86_64) | grep glib
readelf -d ./build/qemu-system-x86_64 | grep RPATH
sudo patchelf --set-rpath "/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" /usr/local/bin/qemu-system-x86_64
./configure LDFLAGS="-Wl,-rpath,/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" --target-list=x86_64-softmmu \\n --enable-kvm --enable-spice --enable-vnc --enable-guest-agent \\n --enable-virtfs --enable-libusb --enable-usb-redir \\n --enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl