LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1687|回复: 1

使用NBD实现异地磁盘空间共享

[复制链接]
发表于 2007-8-25 16:14:52 | 显示全部楼层 |阅读模式
使用NBD实现异地磁盘空间共享

NBD(Network Block Device)
URL: http://sourceforge.net/projects/nbd
简介:Tools for the Linux Kernel's network block device, allowing you to use remote block devices over a TCP/IP network,也就是说可以实现IP-SAN的功能数据共享。
具体的IP-SAN结构请参考SNIA培训文档 《snia_advanced_data_sharing_technologies》
http://www.snia.org/education/tu ... ed_Data_Sharing.pdf

我使用的两台测试节点(node1、node2)信息如下:
Linux OS版本: Fedora Core 4 2.6.11-1.1369_FC4 i386 完全安装,需要安装内核源代码。
node1 IP: 10.10.10.14/24
node2 IP: 10.10.10.227/24

使用百兆交换机联接两台测试节点。

注:以下操作均以root用户完成。

以下为node1节点操作。
确认FC4环境里已经编译好了nbd.ko模块

[root@localhost ~]# modprobe  nbd
[root@localhost ~]# lsmod
Module                  Size  Used by
nbd                    29153  0
md5                     4033  1
ipv6                  268097  20
lp                     13001  0
parport_pc             28933  1
parport                40585  2 lp,parport_pc

如果执行 modprobe nbd后,提示“FATAL: Module nbd not found.”说明NBD模板未被编译并安装到/lib/modules/2.6.11-1.1369_FC4/kernel/drivers/block目录。
请参考Linux内核编译文章 《Fedora Core 4 Kernel Compile Notes》
http://www.mjmwired.net/resources/mjm-kernel-fc4.html
执行make menuconfig后,把“Device Drivers  ---> Block devices  ---> Network block device support”设置为“M”。

下载kernel-2.6.11-1.1369_FC4.src.rpm,rpm格式的内核源代码包
[root@localhost ~]# cd ; mkdir kernel;cd kernel
[root@localhost ~]# wget
http://download.fedora.redhat.co ... -1.1369_FC4.src.rpm
当kernel-2.6.11-1.1369_FC4.src.rpm完成后,安装kernel-2.6.11-1.1369_FC4.src.rpm。
执行 rpm -ivh kernel-2.6.11-1.1369_FC4.src.rpm
生成kernel-2.6.spec文件。
cd /usr/src/redhat/SPECS/
在/usr/src/redhat/BUILD/kernel-2.6.11/目录产生内核源代码。

好了,接下来我们开始编译nbd工具的过程。
[root@localhost ~]# mkdir Drivers
[root@localhost ~]# cd Drivers/
下载nbd-2.9.6.tar.bz2
[root@localhost Drivers]# wget  http://downloads.sourceforge.net/nbd/nbd-2.9.6.tar.bz2?

modtime=1184845717&big_mirror=0

当下载完成后,解开tar包
[root@localhost Drivers]# tar jxvf nbd-2.9.6.tar.bz2
[root@localhost Drivers]# ls
nbd-2.9.6  nbd-2.9.6.tar.bz2
[root@localhost Drivers]# cd nbd-2.9.6
编译生成nbd-server、nbd-client,参考INSTALL文件。
[root@localhost nbd-2.9.6]# ./configure --includedir=/usr/src/linux-2.6.11/include
当提示
config.status: creating nbd-server.5
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
说明配置成功了。

执行make命令编译nbd工具,包括nbd-server、nbd-client
[root@localhost nbd-2.9.6]# make
make  all-am
make[1]: Entering directory `/root/Drivers/nbd-2.9.6'
if gcc -DHAVE_CONFIG_H -I. -I. -I.  -DSYSCONFDIR='"/usr/local/etc"'  -g -O2 -I/usr/include/glib-2.0

-I/usr/lib/glib-2.0/include   -g -O2 -MT nbd_server-nbd-server.o -MD -MP -MF ".deps/nbd_server-nbd

-server.Tpo" -c -o nbd_server-nbd-server.o `test -f 'nbd-server.c' || echo './'`nbd-server.c; \
then mv -f ".deps/nbd_server-nbd-server.Tpo" ".deps/nbd_server-nbd-server.Po"; else rm -f

".deps/nbd_server-nbd-server.Tpo"; exit 1; fi
gcc  -g -O2   -o nbd-server  nbd_server-nbd-server.o -lglib-2.0   
if gcc -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -MT nbd-client.o -MD -MP -MF ".deps/nbd-client.Tpo"

-c -o nbd-client.o nbd-client.c; \
then mv -f ".deps/nbd-client.Tpo" ".deps/nbd-client.Po"; else rm -f ".deps/nbd-client.Tpo"; exit 1;

fi
gcc  -g -O2   -o nbd-client  nbd-client.o  
make[1]: Leaving directory `/root/Drivers/nbd-2.9.6'

安装nbd-server、nbd-client到指定路径。

[root@localhost nbd-2.9.6]# make install
make[1]: Entering directory `/root/Drivers/nbd-2.9.6'
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
  /usr/bin/install -c 'nbd-server' '/usr/local/bin/nbd-server'
test -z "/usr/local/sbin" || mkdir -p -- "/usr/local/sbin"
  /usr/bin/install -c 'nbd-client' '/usr/local/sbin/nbd-client'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './nbd-server.1' '/usr/local/share/man/man1/nbd-server.1'
test -z "/usr/local/share/man/man5" || mkdir -p -- "/usr/local/share/man/man5"
/usr/bin/install -c -m 644 './nbd-server.5' '/usr/local/share/man/man5/nbd-server.5'
test -z "/usr/local/share/man/man8" || mkdir -p -- "/usr/local/share/man/man8"
/usr/bin/install -c -m 644 './nbd-client.8' '/usr/local/share/man/man8/nbd-client.8'
make[1]: Leaving directory `/root/Drivers/nbd-2.9.6'

就这么简单我们的NBD工具就安装成功了。在别一台测试节点node2执行以上相同的步骤即可完成安装,现在我们开始实现IP-SAN磁盘空间的共享。

常用格式说明,参考nbd-server -h、nbd-client  -h

nbd-server <port> <filename>

port: 每个联接需要一个端口,我们在指定port时需要先确认这个端口是否已被使用netstat -an

filename:可以是设备名(如 /dev/hda1) 、文件(如 /mnt/Linuxboot.iso)

nbd-client <hostname> <port> <nbd device>
hostname:指执行nbd-server端的IP
port:与nbd-server指定的port相同
nbd device:本地对应的nbd设备
使用nbd-client -d断开NBD联接
nbd-client -d nbd_device
使用nbd-client -d断开NBD联接
nbd-client -d nbd_device

准备工作:

1、确认两台测试节点网络是否互通。
node1
[root@localhost ~]# ping -c5 10.10.10.227
PING 10.10.10.227 (10.10.10.227) 56(84) bytes of data.
64 bytes from 10.10.10.227: icmp_seq=0 ttl=64 time=0.222 ms
64 bytes from 10.10.10.227: icmp_seq=1 ttl=64 time=0.207 ms

node2
[root@localhost ~]# ping -c5 10.10.10.14
PING 10.10.10.14 (10.10.10.14) 56(84) bytes of data.
64 bytes from 10.10.10.14: icmp_seq=0 ttl=64 time=0.206 ms
64 bytes from 10.10.10.14: icmp_seq=1 ttl=64 time=0.194 ms


2、使用lsmod查看确认nbd是否已加载

IP-SAN共享node1节点1G硬盘空间 /dev/sdb1
node1
建立nbd-server,端口为 345678
[root@localhost ~]# nbd-server  345678 /dev/sdb1

** (process:2801): WARNING **: Could not parse config file: Could not open config file.哪

node2
与node2建立NBD联接
[root@localhost ~]# nbd-client  10.10.10.14 345678 /dev/nbd9
Negotiation: ..size = 987966KB
bs=1024, sz=987966
说明NBD联接成功,对NBD设备进行格式化。
[root@localhost ~]# mkfs.ext3 /dev/nbd9
最后,我们就可以把NBD设备mount到本地当本地文件系统使用了。
mkdir /mnt/nbd9
mount /dev/nbd9 /mnt/nbd9

以下是使用df看到的结果
[root@localhost mnt]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  8.2G  9.4G  47% /
/dev/shm              252M     0  252M   0% /dev/shm
/dev/nbd9             950M   18M  885M   2% /mnt/nbd9

如果要断开nbd9这个NBD联接,执行如下:
[root@localhost ~]# cd;umount /mnt/nbd9/
[root@localhost ~]# nbd-client  -d /dev/nbd9
Disconnecting: que, disconnect, sock, done

哈哈,就先写到这里。有兴趣的朋友可以安排时间阅读NBD的资料。

当然NBD不仅只用于做磁盘空间共享,在系统数据备份、NC(Network PC)、嵌入式Linux环境应用等。

相关信息
ENBD        http://www.it.uc3m.es/~ptb/nbd/

http://sourceforge.net/project/showfiles.php?group_id=13229

[color="Red"] BTW 第一次发帖,写得不好或有问题的地方请大家指出。3Q

Have a good one.
发表于 2008-7-8 04:21:17 | 显示全部楼层

NBD 与 iscsi 比,有什么优势、特点吗?

NBD 与 iscsi 比,有什么优势、特点吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表