531 words
3 minutes
KVM宿主机文件共享
2025-06-19

virtio-9p#

宿主机#

图形化#

Powered By Virtual Machine Manager

命令行#

sudo virsh list --all展示全部虚拟机 sudo virsh edit vm-name编辑vm-name虚拟机xml配置文件

添加内容

<device>
<!--其他内容-->
<filesystem type='mount' accessmode='mapped'>
<source dir='/home/tomato/KVM_Share'/>
<target dir='kkvm'/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
</filesystem>
<!--其他内容-->
</device>
  • type="mount"
    指定共享方式为 目录挂载(对应 9p 文件系统)
  • accessmode="mapped"
    定义权限映射模式:
    • mapped:将虚拟机内的文件 UID/GID 映射到宿主机(默认使用 nobody 用户权限)
    • passthrough:直接使用宿主机文件的 UID/GID(需宿主机权限配置)
    • squash:所有访问降权到宿主机的一个低权限用户(如 nobody
  • source dir="/home/tomato/KVM_Share"
    宿主机上要共享的 绝对路径。确保该目录存在且虚拟机有权限访问(可通过 chmod 调整)
  • target dir="kkvm"
    虚拟机内部的 挂载标签mount_tag),不是实际路径。在虚拟机内挂载时需指定此标签
  • name="fs0"
    设备的逻辑名称(Libvirt 内部管理用),通常可省略
  • type="pci"
    指定设备挂载到虚拟机的 PCI 总线
  • bus="0x07"slot="0x00"function="0x0"
    定义设备在虚拟机 PCI 总线中的具体位置(需避免与其他设备冲突)

虚拟机#

相关依赖#

lsmod | grep 9p # 应输出 `9pnet_virtio` 和 `9pnet`
example:
┌──(kali㉿kali)-[~/kkvmShare]
└─$ lsmod | grep 9p
9p 81920 1
9pnet_virtio 20480 1
9pnet 114688 2 9p,9pnet_virtio
netfs 573440 2 9p,9pnet

挂载#

sudo mount -t 9p -o trans=virtio,version=9p2000.L kkvm /home/kali/kkvmShare

  • -t 9p:指定文件系统类型为 9p(Plan 9 文件系统),KVM/QEMU用于宿主机-虚拟机共享目录的协议。
  • trans=virtio
    使用 virtio 作为传输协议
  • version=9p2000.L
    指定 9p 协议版本为 9p2000.L(最新稳定版,支持 Linux 扩展特性如符号链接、权限保留等) _其他可选版本:9p2000.u(Unix 兼容)、9p2000(基础版)
  • kkvm:虚拟机配置中定义的 挂载标签<target dir="kkvm"/>),对应宿主机共享目录的标识符。
    必须与 QEMU 启动参数或 Libvirt XML 中的 mount_tag 一致。
  • /home/kali/kkvmShare:挂载点:虚拟机内用于访问共享目录的本地路径(需提前创建)

自动挂载#

编辑/etc/fstab添加如下内容

kkvm /home/kali/kkvmShare 9p trans=virtio,version=9p2000.L 0 0

virtiofs#

累了 下次再写

KVM宿主机文件共享
https://kmk.moe/posts/linux/kvmsharefiles/
Author
DakoWang
Published at
2025-06-19
License
CC BY 4.0