77 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. 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.
 |