解决方案 1:使用映射而不是传输

解决方案 1:使用映射而不是传输

我正在尝试使用 qemu-kvm/9p 挂载共享文件夹,但如果将其添加到 fstab 文件中,它就会失败。我在启动时收到无法挂载该设备的错误,但启动后如果我运行“mount -a”,该设备将被挂载。

fstab 行:

src_mnt /src 9p trans=virtio 0 0

从 dmesg 我可以看到:

[    7.606258] 9p: Could not find request transport: virtio

几行之后,我看到了“virtio-pci”条目。但我不清楚如何推迟安装直到该设备可用。

答案1

不知道这是否是理想的解决方案,但在 Ubuntu 12.04 客户机上,我通过将 9p 模块添加到 initramfs 使其正常工作。

添加到 /etc/initramfs-tools/modules:

9p
9pnet
9pnet_virtio

然后:

sudo update-initramfs -u

答案2

在 2020 年,将挂载延迟到我们可以访问模块时的更好方法9p/lib/modules添加_netdev挂载参数:

/data   /data   9p  trans=virtio,rw,_netdev 0   0

答案3

在 Ubuntu 14.04 上,只有9pnet_virtio模块需要预加载bhassel 的回答

引用的前几行 dmesg 显示另外两个已经加载,但找不到所需的传输。

[ 1.370611] 9pnet: Installing 9P2000 support 
[ 1.376384] 9p: Installing v9fs 9p2000 file system support 
[ 1.376754] 9pnet: Could not find request transport: virtio 

在 openSUSE 13.2 上的 qemu/KVM 上使用 Ubuntu 14.04 客户机进行了测试。

答案4

这里的问题是如何在主机上设置 virtio 挂载。有两种方法可以解决这个问题。

解决方案 1:使用映射而不是传输

<filesystem type='mount' accessmode='mapped'>
  <source dir='/src_dir'/>
  <target dir='src'/>
</filesystem>

这样做是可行的,但所有文件都将归 libvirt 运行的用户所有。这对 tmp 或日志文件系统来说不太适用。

解决方案 2:以 root 身份运行 libvirt 并使用 passthrough

vi /etc/libvirt/qemu.conf

然后取消注释或者添加:

user=root
group=root

重新启动主机或重新启动所有 libvirt 和 qemu/kvm 进程,并使用 passthrough:

<filesystem type='mount' accessmode='passthrough'>
  <source dir='/src_dir'/>
  <target dir='src'/>
</filesystem>

虽然主机可能会有一些安全隐患,但这会使主机上的文件的 uid:gid 与客户机上的相同,这对于日志和 tmp 文件系统来说很有效。这正是我在这种情况下所做的。

相关内容