mount.diod(8)

πŸ’– mount.diod β€” bestie edition πŸ’–

okay so this is mount.diod(8), from the diod manual set, and it's genuinely one of my faves. let's get into it 🫢


✨ NAME ✨

mount.diod β€” mount diod file systems πŸ’…


🌸 SYNOPSIS 🌸

mount.diod [OPTIONS] host[:aname] dir [-o options]

like, that's the whole vibe. host, dir, and then whatever options you're feeling ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so mount.diod is the mount utility for the distributed I/O daemon, which is an I/O forwarding service for Linux clusters, built on top of the Linux 9p file system. iconic honestly.

mount.diod does two main things:

  1. connect and authenticate to the diod server
  2. issue the mount(2) system call with appropriate mount options

no cap, that's it. two jobs.

Authentication with the diod server happens in user space. The connected (and authenticated) file descriptor is then passed as a mount option to the kernel 9p file system. sneaky but cute.

heads up bestie: this command requires root to execute the mount(2) system call. no root, no mount, periodt.

Also the 9p file system has to support the 9P2000.L protocol variant, e.g. kernel 2.6.38 or above. so check your kernel, fr fr.

The host portion of the mount spec may optionally be supplied in hostlist format, e.g. host1,host2,host3:aname or host[1-3]:aname, in which case hosts are tried in order until a successful connection is obtained. it's giving "we'll find someone who works". πŸ’…

⚠️ but listen: post-connect mount errors are immediately fatal. once you're connected, there's no trying the next one. that's the rules.

If the host portion of the mount spec begins with a forward-slash (/), it refers to the path to a UNIX domain socket. yes bestie, sockets count as hosts now 🫢


πŸ‘‘ COMMAND LINE OPTIONS πŸ‘‘

  • -f, --fake-mount β€” do literally everything except the mount system call. window shopping, basically πŸ™ˆ
  • -n, --no-mtab β€” do not update the system mtab. leave the mtab alone, she's tired.
  • -v, --verbose β€” set verbose mode. she's chatty now, and honestly? we love that.
  • -o, --options opt[,opt,...] β€” set mount options (see below, babes πŸ‘‡)

πŸ’… MOUNT OPTIONS πŸ’…

these are the file system specific mount options handled by mount.diod. buckle up 🌈

  • aname=name β€” the aname is the path of the exported file system on the server. you can put it in the mount spec in host:aname format like NFS, or you can say it with this option instead. either way works, we're flexible. diod will not allow an attach to an empty aname β€” so don't leave it blank, bestie. diod has a built-in synthetic control file system that can be mounted with an aname of ctl. πŸ“ note that "ctl" must be explicitly exported, it's not just vibing there for free.
  • uname=name β€” the user name to authenticate to the diod server. the default is uname=root. yeah, root by default, that's just how she is.
  • access=mode β€” select the access mode. access=user (the default) causes the mount to support multiple users, and requires root authentication. access=<uid> restricts access at the client to only the specified user. so: everyone or one person, no in-between πŸŽ€
  • port=n β€” connect to the diod server on the specified port. the default is the IANA-assigned 9pfs port 564. ⭐
  • trans=name β€” select a transport. mount.diod only supports trans=fd because of its strategy for authentication. so like, that's the only one, no menu, no choices, just fd πŸ’€
  • rfdno=n,wfdno=n β€” the file descriptor for reading and writing with trans=fd. if set, mount.diod assumes this file descriptor is already connected to a diod server and ignores host in the device specification, and the port=n option. it's giving "I already know where I'm going, don't worry about it" πŸ™ˆ
  • msize=n β€” the msize is the max 9P packet payload size. the default is 65512 (65536-24). yes, exactly that math, we love a subtract ✨
  • version=name β€” select 9P protocol version. diod only supports 9p2000.L. periodt, that's the version.
  • cache=mode β€” specify a caching policy. by default, no caches are used. if cache=loose, no attempts are made at consistency β€” this mode is intended for exclusive, read-only mounts. if cache=fscache, use FS-Cache for a persistent, read-only cache backend. pick your fighter πŸ¦‹
  • cachetag β€” in the context of cache=fscache, select the cache tag to use for this session. cache tags for existing cache sessions are listed in /sys/fs/9p/caches. go look, they're all there πŸŽ€
  • nodevmap β€” do not map special files. represent them as normal files. this can be used to share devices/named pipes/sockets between hosts. sharing is caring 🫢
  • debug=n β€” specifies debug level for the kernel 9p module. the debug level is a bitmask, so here's the whole menu, no skipping:
    • 0x01 = display verbose error messages
    • 0x02 = developer debug (DEBUG_CURRENT)
    • 0x04 = display 9p trace
    • 0x08 = display VFS trace
    • 0x10 = display Marshalling debug
    • 0x20 = display RPC debug
    • 0x40 = display transport debug
    • 0x80 = display allocation debug
    • 0x100 = display protocol message debug
    • 0x200 = display Fid debug
    • 0x400 = display packet debug
    • 0x800 = display fscache tracing debug
⚠️ the debug level is global, i.e. it applies to all 9P file systems and it remains set after the file system is unmounted. she does not forget. the default is debug=0.

🌈 SEE ALSO 🌈

  • diod (8)

and that's the page, bestie πŸ’– written up in the diod-1.0.24 release, dated 2015-03-31 β€” shoutout to the diod crew for keeping the 9p girlies fed. go mount something iconic πŸ‘‘βœ¨