Linux/NBD

Linux Network Block Device
nbd - Tools for the Linux Kernel's network block device, allowing you to use remote block devices over a TCP/IP network.

Install
Centos: (server, client, but no kernel module) yum install nbd
 * 1) epel repo

Ubuntu: (server, client and kernel module) apt-get install nbd-server nbd-client
 * 1) I answer 'yes' to disconnect all on stop

Server
Create disk file: (or use block device) dd if=/dev/zero of=/root/nbd.img bs=1M count=100

Start Server:

sudo nbd-server 6000 /root/nbd.img
 * 1) Note: This uses the old style, and is no longer supported.

Recommended to use config file, instead of specifying on command line

sudo nbd-server -C nbd.cfg

Config file: /etc/nbd-server/config

Example: [generic] user = nbd group = nbd [export] exportname = /root/sdb

The default port is 10809

Watch output: (don't deamonize) nbd-server -C test.cfg -d

Client
Load module (if not already loaded): modprobe -l | grep nbd modinfo nbd modprobe nbd

Start client: sudo nbd-client localhost 6000 /dev/nbd0

Write traffic: dd if=/dev/zero of=/dev/nbd0

Kill client: sudo nbd-client -d /dev/nbd0

CentOS Kernel Module
yum install kernel-devel kernel-headers

KERNEL=$(uname -r | sed "s/.`uname -m`//") wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/kernel-$KERNEL.src.rpm
 * 1) wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/kernel-2.6.32.220.4.1.el6.src.rpm
 * 1) my test was on 2.6.32-573.26.1.el6.x86_64

rpm -ivh kernel-$KERNEL.src.rpm cd ~/rpmbuild/SOURCES tar jxf linux-$KERNEL.tar.bz2 -C /usr/src/kernels/
 * 1) rpm -ivh kernel-2.6.32.220.4.1.el6.src.rpm
 * 1) tar jxvf linux-$KERNEL.tar.bz2 -C /usr/src/kernels/

cd /usr/src/kernels mv $(uname -r) $(uname -r)-old mv cd linux-$KERNEL $(uname -r) cd $(uname -r)
 * 1) mv linux-2.6.32-220.4.1.el6 $(uname -r)

make mrproper cp ../$(uname -r)-old/Module.symvers ./ cp /boot/config-$(uname -r) ./.config make oldconfig make prepare make scripts make CONFIG_BLK_DEV_NBD=m M=drivers/block

cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/

depmod -a modprobe nbd

Based on reference from here: http://jamyy.us.to/blog/2012/02/3582.html

yum install kernel-devel kernel-headers cd /tmp wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/kernel-2.6.32.220.4.1.el6.src.rpm rpm -ivh kernel-2.6.32.220.4.1.el6.src.rpm cd ~/rpmbuild/SOURCES tar jxf linux-2.6.32-220.4.1.el6.tar.bz2 -C /usr/src/kernels/ cd /usr/src/kernels mv $(uname -r) $(uname -r)-old mv linux-2.6.32-220.4.1.el6 $(uname -r) cd $(uname -r) make mrproper cp ../$(uname -r)-old/Module.symvers ./ cp /boot/config-$(uname -r) ./.config make oldconfig make prepare make scripts make CONFIG_BLK_DEV_NBD=m M=drivers/block cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/ depmod -a

Negotiation: Error: Server closed connection
The user running nbd did not have permission to access device. The /etc/nbd-server/config may specify "user = nbd". Just comment this out, or give user "nbd" permissions.