^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) v9fs: Plan 9 Resource Sharing for Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) =======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) About
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) This software was originally developed by Ron Minnich <rminnich@sandia.gov>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) and Maya Gokhale. Additional development by Greg Watson
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) <gwatson@lanl.gov> and most recently Eric Van Hensbergen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) <ericvh@gmail.com>, Latchesar Ionkov <lucho@ionkov.net> and Russ Cox
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) <rsc@swtch.com>.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) The best detailed explanation of the Linux implementation and applications of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) the 9p client is available in the form of a USENIX paper:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) https://www.usenix.org/events/usenix05/tech/freenix/hensbergen.html
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) Other applications are described in the following papers:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * XCPU & Clustering
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) http://xcpu.org/papers/xcpu-talk.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * KVMFS: control file system for KVM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) http://xcpu.org/papers/kvmfs.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * CellFS: A New Programming Model for the Cell BE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) http://xcpu.org/papers/cellfs-talk.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * PROSE I/O: Using 9p to enable Application Partitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * VirtFS: A Virtualization Aware File System pass-through
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) http://goo.gl/3WPDg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) Usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) For remote file server::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) mount -t 9p 10.10.1.2 /mnt/9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) For Plan 9 From User Space applications (http://swtch.com/plan9)::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) For server running on QEMU host with virtio transport::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) mount -t 9p -o trans=virtio <mount_tag> /mnt/9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) where mount_tag is the tag associated by the server to each of the exported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) mount points. Each 9P export is seen by the client as a virtio device with an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) associated "mount_tag" property. Available mount tags can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) seen by reading /sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag files.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) Options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ============= ===============================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) trans=name select an alternative transport. Valid options are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) currently:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) ======== ============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) unix specifying a named pipe mount point
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) tcp specifying a normal TCP/IP connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) fd used passed file descriptors for connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) (see rfdno and wfdno)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) virtio connect to the next virtio channel available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) (from QEMU with trans_virtio module)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) rdma connect to a specified RDMA channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ======== ============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) uname=name user name to attempt mount as on the remote server. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) server may override or ignore this value. Certain user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) names may require authentication.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) aname=name aname specifies the file tree to access when the server is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) offering several exported file systems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) cache=mode specifies a caching policy. By default, no caches are used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) none
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) default no cache policy, metadata and data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) alike are synchronous.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) loose
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) no attempts are made at consistency,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) intended for exclusive, read-only mounts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) fscache
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) use FS-Cache for a persistent, read-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) cache backend.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) mmap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) minimal cache that is only used for read-write
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) mmap. Northing else is cached, like cache=none
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) debug=n specifies debug level. The debug level is a bitmask.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) ===== ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) 0x01 display verbose error messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) 0x02 developer debug (DEBUG_CURRENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 0x04 display 9p trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 0x08 display VFS trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 0x10 display Marshalling debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 0x20 display RPC debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 0x40 display transport debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 0x80 display allocation debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 0x100 display protocol message debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 0x200 display Fid debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 0x400 display packet debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 0x800 display fscache tracing debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) ===== ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) rfdno=n the file descriptor for reading with trans=fd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) wfdno=n the file descriptor for writing with trans=fd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) msize=n the number of bytes to use for 9p packet payload
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) port=n port to connect to on the remote server
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) noextend force legacy mode (no 9p2000.u or 9p2000.L semantics)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) version=name Select 9P protocol version. Valid options are:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) ======== ==============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 9p2000 Legacy mode (same as noextend)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 9p2000.u Use 9P2000.u protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 9p2000.L Use 9P2000.L protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) ======== ==============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) dfltuid attempt to mount as a particular uid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) dfltgid attempt to mount with a particular gid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) afid security channel - used by Plan 9 authentication protocols
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) nodevmap do not map special files - represent them as normal files.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) This can be used to share devices/named pipes/sockets between
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) hosts. This functionality will be expanded in later versions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) access there are four access modes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) if a user tries to access a file on v9fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) filesystem for the first time, v9fs sends an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) attach command (Tattach) for that user.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) This is the default mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) <uid>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) allows only user with uid=<uid> to access
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) the files on the mounted filesystem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) v9fs does single attach and performs all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) operations as one user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) clien
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) ACL based access check on the 9p client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) side for access validation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) cachetag cache tag to use the specified persistent cache.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) cache tags for existing cache sessions can be listed at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) /sys/fs/9p/caches. (applies only to cache=fscache)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) ============= ===============================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) Behavior
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) This section aims at describing 9p 'quirks' that can be different
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) from a local filesystem behaviors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) - Setting O_NONBLOCK on a file will make client reads return as early
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) as the server returns some data instead of trying to fill the read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) buffer with the requested amount of bytes or end of file is reached.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) Resources
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) =========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) Protocol specifications are maintained on github:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) http://ericvh.github.com/9p-rfc/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 9p client and server implementations are listed on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) http://9p.cat-v.org/implementations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) A 9p2000.L server is being developed by LLNL and can be found
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) at http://code.google.com/p/diod/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) There are user and developer mailing lists available through the v9fs project
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) on sourceforge (http://sourceforge.net/projects/v9fs).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) News and other information is maintained on a Wiki.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) (http://sf.net/apps/mediawiki/v9fs/index.php).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) Bug reports are best issued via the mailing list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) For more information on the Plan 9 Operating System check out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) http://plan9.bell-labs.com/plan9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) For information on Plan 9 from User Space (Plan 9 applications and libraries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) ported to Linux/BSD/OSX/etc) check out https://9fans.github.io/plan9port/