Commit f4c39f4b authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] NBD documentation update

From: Paul Clements <Paul.Clements@SteelEye.com>

Modernise nbd.txt a bit.
parent d7b92e1d
Network Block Device (TCP version) Network Block Device (TCP version)
Note: Network Block Device is now experimental, which approximately What is it: With this compiled in the kernel (or as a module), Linux
means, that it works on my computer, and it worked on one of school can use a remote server as one of its block devices. So every time
computers. the client computer wants to read, e.g., /dev/nb0, it sends a
request over TCP to the server, which will reply with the data read.
This can be used for stations with low disk space (or even diskless -
if you boot from floppy) to borrow disk space from another computer.
Unlike NFS, it is possible to put any filesystem on it, etc. It should
even be possible to use NBD as a root filesystem (I've never tried),
but it requires a user-level program to be in the initrd to start.
It also allows you to run block-device in user land (making server
and client physically the same computer, communicating using loopback).
What is it: With this compiled in the kernel, Linux can use a remote Current state: It currently works. Network block device is stable.
server as one of its block devices. So every time the client computer I originally thought that it was impossible to swap over TCP. It
wants to read /dev/nd0, it sends a request over TCP to the server, which turned out not to be true - swapping over TCP now works and seems
will reply with the data read. This can be used for stations with to be deadlock-free, but it requires heavy patches into Linux's
low disk space (or even diskless - if you boot from floppy) to network layer.
borrow disk space from another computer. Unlike NFS, it is possible to
put any filesystem on it etc. It is impossible to use NBD as a root
filesystem, since it requires a user-level program to start. It also
allows you to run block-device in user land (making server and client
physically the same computer, communicating using loopback).
Current state: It currently works. Network block device looks like For more information, or to download the nbd-client and nbd-server
being pretty stable. I originally thought that it is impossible to swap tools, go to http://nbd.sf.net/.
over TCP. It turned out not to be true - swapping over TCP now works
and seems to be deadlock-free, but it requires heavy patches into Howto: To setup nbd, you can simply do the following:
Linux's network layer.
First, serve a device or file from a remote server:
Devices: Network block device uses major 43, minors 0..n (where n is
configurable in nbd.h). Create these files by mknod when needed. After nbd-server <port-number> <device-or-file-to-serve-to-client>
that, your ls -l /dev/ should look like:
e.g.,
brw-rw-rw- 1 root root 43, 0 Apr 11 00:28 nd0 root@server1 # nbd-server 1234 /dev/sdb1
brw-rw-rw- 1 root root 43, 1 Apr 11 00:28 nd1
... (serves sdb1 partition on TCP port 1234)
Protocol: Userland program passes file handle with connected TCP Then, on the local (client) system:
socket to actual kernel driver. This way, the kernel does not have to
care about connecting etc. Protocol is rather simple: If the driver is nbd-client <server-name-or-IP> <server-port-number> /dev/nb[0-n]
asked to read from block device, it sends packet of following form
"request" (all data are in network byte order): e.g.,
root@client1 # nbd-client server1 1234 /dev/nb0
__u32 magic; must be equal to 0x12560953
__u32 from; position in bytes to read from / write at (creates the nb0 device on client1)
__u32 len; number of bytes to be read / written
__u64 handle; handle of operation The nbd kernel module need only be installed on the client
__u32 type; 0 = read system, as the nbd-server is completely in userspace. In fact,
1 = write the nbd-server has been successfully ported to other operating
... in case of write operation, this is systems, including Windows.
immediately followed len bytes of data
When operation is completed, server responds with packet of following
structure "reply":
__u32 magic; must be equal to
__u64 handle; handle copied from request
__u32 error; 0 = operation completed successfully,
else error code
... in case of read operation with no error,
this is immediately followed len bytes of data
For more information, look at http://nbd.sf.net/.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment