Distributed I/O Daemon - a 9P file server
Branch: master
Clone or download
ebfe and garlick libnpclient/read.c: fix out-of-bounds write
Don't assume Rread.count is always <= Tread.count.
Latest commit 5551dbc Dec 1, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
config build: drop META Jan 29, 2018
diod diod/ops.c: distinguish opened and unopened Fids in {set,get}attr Nov 29, 2018
etc man: use PACKAGE not META macros Jan 29, 2018
libdiod libdiod/diod_sock.c: zero initialize sockaddr Nov 29, 2018
liblsd build: include from $(srcdir) not relative path Jan 29, 2018
libnpclient libnpclient/read.c: fix out-of-bounds write Dec 1, 2018
libnpfs Fix typo in P9_TRENAME format Nov 27, 2018
scripts init: add systemd service for diod Mar 31, 2015
tests tests/user: add tests for operations on opened fids Nov 29, 2018
utils build: include from $(srcdir) not relative path Jan 29, 2018
.gitignore .gitignore: add more build products Aug 20, 2014
.travis.yml travis-ci: begin building under travis Jan 30, 2018
AUTHORS AUTHORS: update contributors (loosely defined) Aug 20, 2014
COPYING import trunk Feb 8, 2010
ChangeLog Minor documentation update. Apr 24, 2011
DISCLAIMER.LLNS import trunk Feb 8, 2010
INSTALL diod should listen on port 564 by default. Misc. cleanup Apr 20, 2011
Makefile.am build: drop META Jan 29, 2018
NEWS prep for 1.0.24 tag Mar 31, 2015
README doc: convert README to github markup Mar 19, 2015
README.md add git to debian dependencies Sep 14, 2018
autogen.sh import trunk Feb 8, 2010
configure.ac tests: fix xattr test build Nov 27, 2018
diod.spec.in spec: use PACKAGE not META macros Jan 29, 2018
protocol.md protocol.md: fix typos and markdown errors Jan 29, 2018



diod is a multi-threaded, user space file server that speaks 9P2000.L protocol.


On Debian

sudo apt-get install build-essential libpopt-dev ncurses-dev automake autoconf git
sudo apt-get install liblua5.1-dev libmunge-dev libwrap0-dev libcap-dev libattr1-dev
make check

On Red Hat

sudo yum install epel-release gperftools-devel automake autoconf libattr-devel
sudo yum install lua-devel munge-devel tcp_wrappers-devel libcap-devel
make check

Kernel Client

The kernel 9P client, sometimes referred to as "v9fs", consists of the 9p.ko file system module, and its network transport module, 9pnet.ko.

Although the kernel client supports several 9P variants, diod only supports 9P2000.L, and only in its feature-complete form, as it appeared in 2.6.38.

Earlier versions of the kernel that do not support 9P2000.L will fail at mount time when version negotiation fails. Some pre-2.6.38 versions of the kernel that have 9P2000.L but still send some 9P2000.u ops may fail in less obvious ways. Use a 2.6.38 or later kernel.

Quick Start

Start the diod server in foreground, with protocol debugging to stderr, no authentication, and one export:

sudo ./diod -f -d 1 -n -e /tmp/9

Mount it using the raw mount command:

sudo mount -t 9p -n /mnt \

Or (simpler), mount it using diodmount:

sudo ./diodmount -n localhost:/tmp/9 /mnt

Or (even simpler) if diodmount is installed as /sbin/mount.diod:

sudo mount -t diod -n localhost:/tmp/9 /mnt

I/O forwarding on clusters:

On I/O node, set up /etc/diod.conf according to diod.conf(5), then:

chkconfig diod on
service diod start

On compute node, if I/O node is fritz42, add entries like this to /etc/fstab:

fritz42:/g/g0  /g/g0         diod  default 0 0

Alternatively, use "zero-config" automounter method:

  • set DIOD_SERVERS="fritz42" in /etc/sysconfig/auto.diod1
  • add /d /etc/auto.diod to /etc/auto.master Then:
mkdir /d
chkconfig autofs on
service autofs start
ln -s /d/g.g0 /g/g0

Note that at this point diod is only being tested with NFS file systems. Use it with Lustre or GPFS at your own peril - but if you do, please report issues!


Use GitHub!

Diod can also be discussed on the v9fs-users mailing list