mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.0 KiB
76 lines
3.0 KiB
.. 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.
|
|
|