What is it: With this compiled into your kernel, Linux can use a remote server as one of its block devices. Every time the client computer wants to read /dev/nbd0, it will send a request to the server via TCP, which will reply with the data requested. This can be used for stations with low disk space (or even diskless - if you use an initrd) to borrow disk space from other computers. Unlike NFS, it is possible to put any file system on it. But (also unlike NFS), if someone has mounted NBD read/write, you must assure that no one else will have it mounted.
Current state: It currently works. Network block device is pretty stable. It was originaly thought that it is impossible to swap over TCP; this turned out not to be true. However, to avoid deadlocks, you will need at least Linux 3.6.
It is possible to use NBD as the block device counterpart of FUSE, to implement the block device's reads and writes in user space. To make this easer, recent versions of NBD (3.10 and above) implement NBD over a Unix Domain Socket, too.
If you're interested in the technical side of how NBD works, please see the doc/ directory in the source code, especially the protocol documentation.
Comments and help about the tools is always appreciated; if you're willing to help out, please subscribe to the mailinglist, and share your thoughts.
If you wish to contribute, you may join us on the mailinglist. We do accept pull requests for minor bug fixes, but if you want to make large changes, prior discussion on the mailinglist is recommended.
If want to discuss bugs in the nbd userland utilities or wish to ask a question on how to use it, use the mailinglist. For a more structured method of filing problem reports, the GitHub issue tracker can be used.
If you think you found a security problem with NBD, please contact the mailinglist. Do not just file an issue for this (although you may do so also if you prefer).
Besides Linux, the authors have knowledge of NBD client support on the following platforms:
The server should theoretically work on every POSIX-compliant platform out there (provided glib is supported on that platform). If it doesn't, that's a bug and I want to know about it; if you encounter such problems, please send a mail to the mailinglist.