Network block device
{{Short description|Network storage protocol}}
File:NetworkBlockDevice DeviceList HandshakeProtocolHexdump.png
On Linux, network block device (NBD) is a network protocol that can be used to forward a block device (typically a hard disk or partition) from one machine to a second machine. As an example, a local machine can access a hard disk drive that is attached to another computer.
The protocol was originally developed for Linux 2.1.55 and released in 1997.{{Cite web|url=https://www.linuxjournal.com/article/3778|title = The Network Block Device | Linux Journal}} In 2011 the protocol was revised, [https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md formally documented], and is now developed as a collaborative open standard. There are several interoperable clients and servers.
There are Linux-compatible NBD implementations for FreeBSD and other operating systems. The term 'network block device' is sometimes also used generically.
Technically, a network block device is realized by three components: the server part, the client part, and the network between them. On the client machine, which uses the exported device node, a kernel driver implements a virtual device. Whenever a program tries to access the device, the kernel driver forwards the request (if the client part is not fully implemented in the kernel it can be done with help of a userspace program) to the server machine, on which the data reside physically. On the server machine, requests from the client are handled by a userspace program.
Network block device servers are typically implemented as a userspace program running on a general-purpose computer. All of the function specific to network block device servers can reside in a userspace process because the process communicates with the client via conventional sockets and accesses the storage via a conventional file system interface.
The network block device client module is available on Unix-like operating systems, including Linux.
Alternative protocols
- iSCSI: The "target-utils" iscsi package on many Linux distributions.
- NVMe-oF: an equivalent mechanism, exposing block devices as NVMe namespaces over TCP, Fibre Channel, RDMA, &c., native to most operating systems
- Loop device: a similar mechanism, but uses a local file instead of a remote one
- DRBD: Distributed Replicated Block Device is a distributed storage system for the Linux platform
- ATA over Ethernet: send ATA commands over Ethernet
- USB/IP: A protocol that provides network access to USB devices via IP.{{cite web
| url=https://www.kernel.org/doc/Documentation/usb/usbip_protocol.txt
| title=Documentation/usb/usbip_protocol.txt
| date=2016-03-21
| publisher=kernel.org
| accessdate=2017-04-09}}{{cite web
| url=https://wiki.openwrt.org/doc/howto/usb.iptunnel
| title=USB over IP tunnel
| date=2016-06-17
| publisher=OpenWrt
| accessdate=2017-04-09}}
External links
- {{Github|NetworkBlockDevice/nbd|Network Block Device}}
- [https://gitlab.com/nbdkit/nbdkit nbdkit] is a plugin-based NBD server and [https://gitlab.com/nbdkit/libnbd libnbd] is a high-performance C client
- [https://www.qemu.org/docs/master/tools/qemu-nbd.html qemu-nbd] A nbd tool from qemu project
- [https://bitbucket.org/belczyk/bnbd BNBD] is an alternative NBD server implementation
- [https://web.archive.org/web/20200805233450/https://bitbucket.org/hirofuchi/xnbd/wiki/Home xNBD] was another NBD server program for Linux
- [https://www.linuxjournal.com/article/3778 The Network Block Device], the Linux Journal