| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- .. SPDX-License-Identifier: GPL-2.0
- .. _virtiofs_index:
- ===================================================
- virtiofs: virtio-fs host<->guest shared file system
- ===================================================
- - Copyright (C) 2019 Red Hat, Inc.
- Introduction
- ============
- The virtiofs file system for Linux implements a driver for the paravirtualized
- VIRTIO "virtio-fs" device for guest<->host file system sharing. It allows a
- guest to mount a directory that has been exported on the host.
- Guests often require access to files residing on the host or remote systems.
- Use cases include making files available to new guests during installation,
- booting from a root file system located on the host, persistent storage for
- stateless or ephemeral guests, and sharing a directory between guests.
- Although it is possible to use existing network file systems for some of these
- tasks, they require configuration steps that are hard to automate and they
- expose the storage network to the guest. The virtio-fs device was designed to
- solve these problems by providing file system access without networking.
- Furthermore the virtio-fs device takes advantage of the co-location of the
- guest and host to increase performance and provide semantics that are not
- possible with network file systems.
- Usage
- =====
- Mount file system with tag ``myfs`` on ``/mnt``:
- .. code-block:: sh
- guest# mount -t virtiofs myfs /mnt
- Please see https://virtio-fs.gitlab.io/ for details on how to configure QEMU
- and the virtiofsd daemon.
- Mount options
- -------------
- virtiofs supports general VFS mount options, for example, remount,
- ro, rw, context, etc. It also supports FUSE mount options.
- atime behavior
- ^^^^^^^^^^^^^^
- The atime-related mount options, for example, noatime, strictatime,
- are ignored. The atime behavior for virtiofs is the same as the
- underlying filesystem of the directory that has been exported
- on the host.
- Internals
- =========
- Since the virtio-fs device uses the FUSE protocol for file system requests, the
- virtiofs file system for Linux is integrated closely with the FUSE file system
- client. The guest acts as the FUSE client while the host acts as the FUSE
- server. The /dev/fuse interface between the kernel and userspace is replaced
- with the virtio-fs device interface.
- FUSE requests are placed into a virtqueue and processed by the host. The
- response portion of the buffer is filled in by the host and the guest handles
- the request completion.
- Mapping /dev/fuse to virtqueues requires solving differences in semantics
- between /dev/fuse and virtqueues. Each time the /dev/fuse device is read, the
- FUSE client may choose which request to transfer, making it possible to
- prioritize certain requests over others. Virtqueues have queue semantics and
- it is not possible to change the order of requests that have been enqueued.
- This is especially important if the virtqueue becomes full since it is then
- impossible to add high priority requests. In order to address this difference,
- the virtio-fs device uses a "hiprio" virtqueue specifically for requests that
- have priority over normal requests.
|