20

I am trying to mount a shared folder using qemu-kvm/9p and it fails to work if I add it to the fstab file. I get an error at boot that the device cannot be mounted, yet after start if I run "mount -a" the device will be mounted.

fstab line:

src_mnt /src 9p trans=virtio 0 0

From dmesg I can see:

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

And a few lines later I see the "virtio-pci" entries. I'm not clear on how I would defer mounting until that device is available however.

26

Don't know if it's the ideal solution, but on an Ubuntu 12.04 guest I got it to work by adding the 9p modules to the initramfs.

Added to /etc/initramfs-tools/modules:

9p
9pnet
9pnet_virtio

Then:

sudo update-initramfs -u
| improve this answer | |
  • Thank you - I think its reasonable to say this is the ideal solution. The problem is that the module is not mounted during file-system mount, your solution is to add it to the list of modules loaded at mount-time. – Greg Apr 4 '13 at 10:28
  • Why is this ideal? – lindhe Mar 7 '16 at 21:03
  • If your kernel doesn't need these modules to start init, then adding them to the initramfs is not enough. You need to also force the kernel or init system to load them explicitly. For init systems that support explicit module loading (incl. systemd), add modules_load=9pnet_virtio,9p to your kernel command line. – Tenders McChiken Jul 6 at 10:03
4

On Ubuntu 14.04 only the 9pnet_virtio module needs preloading as per bhassel's answer.

The dmesg a few lines before the quoted one shows that the other two are already loaded but cannot find the required transport.

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

Tested with Ubuntu 14.04 guest on qemu/KVM on openSUSE 13.2.

| improve this answer | |
  • Hi Tim, and welcome to the site. Keep in mind that the ordering of the answers can change both by community voting as well as user preferences, so try to always be explicit about which answer you are referring to. I have fixed this for now in your post; please do so yourself in the future. Thanks! – user Feb 17 '15 at 15:50
  • This works on ubuntu 16.04 as well. – stalet Aug 11 '16 at 8:30
  • This also works on Ubuntu 18.04 – jackkamm Oct 27 '19 at 20:47
1

The problem here is how the virtio mount is set up on the host. There are two ways to fix this problem.

Solution 1: Use mapped instead of transport

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

This works, but all files will be owned by the user libvirt is running as. This doesn't work well for tmp or log file systems.

Solution 2: Run libvirt as root and use passthrough

vi /etc/libvirt/qemu.conf

Then uncomment or add:

user=root
group=root

Reboot the host or restart all libvirt and qemu/kvm processes, and use passthrough:

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

While there could be some security implications for the host, this makes the uid:gid of files on the host the same as on the guest, which works well for log and tmp file systems. This happens to be what I do in this situation.

| improve this answer | |
1

In 2020, a better way to delay the mount until the time when we have access to the 9p modules from /lib/modules is to add _netdev as a mount parameter:

/data   /data   9p  trans=virtio,rw,_netdev 0   0
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.