blob: 7b5964bc88652dc604ba44392d124555493e2af0 [file] [log] [blame]
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +01001.. SPDX-License-Identifier: GPL-2.0
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -07002
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +01003=======================================
4v9fs: Plan 9 Resource Sharing for Linux
5=======================================
6
7About
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -07008=====
9
10v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol.
11
Eric Van Hensbergen27a2a5f2007-07-23 13:06:13 -050012This software was originally developed by Ron Minnich <rminnich@sandia.gov>
13and Maya Gokhale. Additional development by Greg Watson
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070014<gwatson@lanl.gov> and most recently Eric Van Hensbergen
Eric Van Hensbergened1f5592006-03-25 03:07:30 -080015<ericvh@gmail.com>, Latchesar Ionkov <lucho@ionkov.net> and Russ Cox
16<rsc@swtch.com>.
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070017
Eric Van Hensbergen27a2a5f2007-07-23 13:06:13 -050018The best detailed explanation of the Linux implementation and applications of
19the 9p client is available in the form of a USENIX paper:
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010020
Alexander A. Klimov0f540b92020-07-08 16:58:04 +020021 https://www.usenix.org/events/usenix05/tech/freenix/hensbergen.html
Eric Van Hensbergen27a2a5f2007-07-23 13:06:13 -050022
23Other applications are described in the following papers:
Eric Van Hensbergen27a2a5f2007-07-23 13:06:13 -050024
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010025 * XCPU & Clustering
26 http://xcpu.org/papers/xcpu-talk.pdf
27 * KVMFS: control file system for KVM
28 http://xcpu.org/papers/kvmfs.pdf
29 * CellFS: A New Programming Model for the Cell BE
30 http://xcpu.org/papers/cellfs-talk.pdf
31 * PROSE I/O: Using 9p to enable Application Partitions
32 http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf
33 * VirtFS: A Virtualization Aware File System pass-through
34 http://goo.gl/3WPDg
35
36Usage
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070037=====
38
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010039For remote file server::
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070040
Eric Van Hensbergened1f5592006-03-25 03:07:30 -080041 mount -t 9p 10.10.1.2 /mnt/9
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070042
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010043For Plan 9 From User Space applications (http://swtch.com/plan9)::
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070044
Eric Van Hensbergena80d9232007-10-17 14:31:07 -050045 mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070046
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010047For server running on QEMU host with virtio transport::
Sripathi Kodi9208d242010-03-18 08:01:33 +000048
49 mount -t 9p -o trans=virtio <mount_tag> /mnt/9
50
51where mount_tag is the tag associated by the server to each of the exported
52mount points. Each 9P export is seen by the client as a virtio device with an
53associated "mount_tag" property. Available mount tags can be
54seen by reading /sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag files.
55
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010056Options
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070057=======
58
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010059 ============= ===============================================================
Eric Van Hensbergena80d9232007-10-17 14:31:07 -050060 trans=name select an alternative transport. Valid options are
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070061 currently:
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010062
63 ======== ============================================
64 unix specifying a named pipe mount point
65 tcp specifying a normal TCP/IP connection
66 fd used passed file descriptors for connection
67 (see rfdno and wfdno)
68 virtio connect to the next virtio channel available
69 (from QEMU with trans_virtio module)
70 rdma connect to a specified RDMA channel
71 ======== ============================================
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070072
Eric Van Hensbergened1f5592006-03-25 03:07:30 -080073 uname=name user name to attempt mount as on the remote server. The
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070074 server may override or ignore this value. Certain user
75 names may require authentication.
76
77 aname=name aname specifies the file tree to access when the server is
78 offering several exported file systems.
79
Matt LaPlante01dd2fb2007-10-20 01:34:40 +020080 cache=mode specifies a caching policy. By default, no caches are used.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010081
82 none
83 default no cache policy, metadata and data
Eric Van Hensbergenb8718662014-01-24 10:55:21 -060084 alike are synchronous.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010085 loose
86 no attempts are made at consistency,
Eric Van Hensbergene03abc02007-02-11 13:21:39 -060087 intended for exclusive, read-only mounts
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010088 fscache
89 use FS-Cache for a persistent, read-only
Abhishek Kulkarnif4edeeb2009-09-22 11:34:04 -050090 cache backend.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010091 mmap
92 minimal cache that is only used for read-write
Eric Van Hensbergenb8718662014-01-24 10:55:21 -060093 mmap. Northing else is cached, like cache=none
Eric Van Hensbergene03abc02007-02-11 13:21:39 -060094
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -070095 debug=n specifies debug level. The debug level is a bitmask.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +010096
97 ===== ================================
98 0x01 display verbose error messages
99 0x02 developer debug (DEBUG_CURRENT)
100 0x04 display 9p trace
101 0x08 display VFS trace
102 0x10 display Marshalling debug
103 0x20 display RPC debug
104 0x40 display transport debug
105 0x80 display allocation debug
106 0x100 display protocol message debug
107 0x200 display Fid debug
108 0x400 display packet debug
109 0x800 display fscache tracing debug
110 ===== ================================
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700111
Eric Van Hensbergena80d9232007-10-17 14:31:07 -0500112 rfdno=n the file descriptor for reading with trans=fd
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700113
Eric Van Hensbergena80d9232007-10-17 14:31:07 -0500114 wfdno=n the file descriptor for writing with trans=fd
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700115
Nicolae Mogoreanu14211d02011-10-03 20:03:53 +0000116 msize=n the number of bytes to use for 9p packet payload
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700117
118 port=n port to connect to on the remote server
119
Sripathi Kodi9208d242010-03-18 08:01:33 +0000120 noextend force legacy mode (no 9p2000.u or 9p2000.L semantics)
121
122 version=name Select 9P protocol version. Valid options are:
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100123
124 ======== ==============================
125 9p2000 Legacy mode (same as noextend)
126 9p2000.u Use 9P2000.u protocol
127 9p2000.L Use 9P2000.L protocol
128 ======== ==============================
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700129
Latchesar Ionkovbd32b822007-10-17 14:31:07 -0500130 dfltuid attempt to mount as a particular uid
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700131
Latchesar Ionkovbd32b822007-10-17 14:31:07 -0500132 dfltgid attempt to mount with a particular gid
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700133
134 afid security channel - used by Plan 9 authentication protocols
135
136 nodevmap do not map special files - represent them as normal files.
137 This can be used to share devices/named pipes/sockets between
138 hosts. This functionality will be expanded in later versions.
139
Aneesh Kumar K.V76381a42010-09-28 00:27:41 +0530140 access there are four access modes.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100141 user
142 if a user tries to access a file on v9fs
Latchesar Ionkovba176742007-10-17 14:31:07 -0500143 filesystem for the first time, v9fs sends an
144 attach command (Tattach) for that user.
145 This is the default mode.
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100146 <uid>
147 allows only user with uid=<uid> to access
Latchesar Ionkovba176742007-10-17 14:31:07 -0500148 the files on the mounted filesystem
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100149 any
150 v9fs does single attach and performs all
Latchesar Ionkovba176742007-10-17 14:31:07 -0500151 operations as one user
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100152 clien
153 ACL based access check on the 9p client
Aneesh Kumar K.V76381a42010-09-28 00:27:41 +0530154 side for access validation
Latchesar Ionkovba176742007-10-17 14:31:07 -0500155
Abhishek Kulkarnif4edeeb2009-09-22 11:34:04 -0500156 cachetag cache tag to use the specified persistent cache.
157 cache tags for existing cache sessions can be listed at
158 /sys/fs/9p/caches. (applies only to cache=fscache)
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100159 ============= ===============================================================
Abhishek Kulkarnif4edeeb2009-09-22 11:34:04 -0500160
Linus Torvalds5d30bca2020-04-08 21:51:14 -0700161Behavior
162========
163
164This section aims at describing 9p 'quirks' that can be different
165from a local filesystem behaviors.
166
167 - Setting O_NONBLOCK on a file will make client reads return as early
168 as the server returns some data instead of trying to fill the read
169 buffer with the requested amount of bytes or end of file is reached.
170
Mauro Carvalho Chehab07d241f2020-02-17 17:11:47 +0100171Resources
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700172=========
173
Eric Van Hensbergenee294be2011-05-25 09:19:27 -0500174Protocol specifications are maintained on github:
175http://ericvh.github.com/9p-rfc/
Eric Van Hensbergenff76e1d2007-01-26 00:57:05 -0800176
Eric Van Hensbergenee294be2011-05-25 09:19:27 -05001779p client and server implementations are listed on
178http://9p.cat-v.org/implementations
Eric Van Hensbergenff76e1d2007-01-26 00:57:05 -0800179
Eric Van Hensbergenee294be2011-05-25 09:19:27 -0500180A 9p2000.L server is being developed by LLNL and can be found
181at http://code.google.com/p/diod/
Eric Van Hensbergene1c92112006-02-20 18:28:05 -0800182
183There are user and developer mailing lists available through the v9fs project
184on sourceforge (http://sourceforge.net/projects/v9fs).
185
Eric Van Hensbergenee294be2011-05-25 09:19:27 -0500186News and other information is maintained on a Wiki.
187(http://sf.net/apps/mediawiki/v9fs/index.php).
Eric Van Hensbergene1c92112006-02-20 18:28:05 -0800188
Eric Van Hensbergenb8718662014-01-24 10:55:21 -0600189Bug reports are best issued via the mailing list.
Eric Van Hensbergen93fa58c2005-09-09 13:04:18 -0700190
191For more information on the Plan 9 Operating System check out
192http://plan9.bell-labs.com/plan9
193
194For information on Plan 9 from User Space (Plan 9 applications and libraries
Juan Manuel Méndez Reyb529c062020-04-26 03:52:50 +0200195ported to Linux/BSD/OSX/etc) check out https://9fans.github.io/plan9port/