NBD(Network Block Device)简介及基本使用

NBD指的是Network Block Device,正如其名字的意思,NBD让用户可以通过网络访问到某个块设备,或者设备镜像。

你可能会想NFS(Network File System)不是已经可以实现通过网络挂载各种文件系统并进行访问了吗,为什么还要整个NBD呢?

如果用户的目的只是为了简单地访问对文件系统内的文件进行读写,那么NFS已经完全足够用了,但是有时候用户可能需要对存储块设备执行一些更底层的操作,这时候NFS可能就无法满足,需要NBD的方式了。简单地来说,NFS的方式只能管到文件系统层,而NBD的方式则不仅可以管到文件系统层,还可以管到更下面的块设备层。

比如,用户可能想要格式化哪个存储块设备,或者对存储块设备进行重新分区,这时候NFS的方式就无法满足该要求,因为在这些操作过程中,将会导致存在该存储块设备中的文件系统被卸载。对于NFS而言,卸载该文件系统的话,就会失去对该设备的连接。但是如果存储块设备是以NBD的方式挂载到系统中的话,则用户可以像操作本地存储块设备一样操作该通过NBD方式挂载的存储块设备,就像该存储块设备在本地就是通过SCSI或者SATA线连接着的。简单地说,NBD针对的是存储块设备,而NFS针对的是文件系统。


一、 如何使用NBD

NBD的工作方式也是遵循client/server的基本架构。在server端,通过设置将一个存储块设备或者镜像文件变成一个可以使用的网络块设备,然后在client端,连接挂载该设备进行使用。

Server端:Ubuntu IP:192.168.1.5

默认情况下,系统是没有安装NBD server的,在Ubuntu下可以执行下面命令进行安装:
sudo apt install nbd-server
安装完毕后,通过下面命令将NBD模块加载起来:
modprobe nbd


执行命令nbd-server 9999 nbd.file,将一个win7的安装镜像作为目标文件,查看nbd相关进程可以发现nbd-server已经运行起来了

Client端

执行apt install nbd-client指令安装nbd客户端
客户端主机页需要安装nbd模块,执行modprobe nbd,然后可以在/dev/目录下发现多了几个/dev/nbd#的设备。

执行nbd-client 192.168.1.5 9999 /dev/nbd0,将nbd设备关联到/dev/nbd0设备上。

将/dev/nbd0p1挂载到/mnt/目录下,可以看到iso文件里面的内容了。

二、QEMU中的NBD

虚拟化程序QEMU中的qemu-nbd程序也是基于NBD方式对块设备或文件进行挂载,例如可以通过qemu-nbd命令查看一个虚拟机镜像文件的内部信息。
以一个win7.img的虚拟机镜像为例,首先用qemu-nbd命令将该镜像关联到NBD设备/dev/nbd3上(当然需要先加载ndb内核模块)

然后查看NBD设备,可以发现多出了两个nbd设备,即/dev/nbd3p1和/dev/nbd3p2,说明win7.img镜像中有两个分区。

分别将这两个设备文件挂载到文件系统中查看一下里面的内容:

可以发现/dev/nbd3p1其实就是系统的启动分区,而/dev/nbd3p2就是Win7的主分区,即Win7系统的C盘。

欢迎关注同名微信公众号“河马虚拟化”第一时间获取最新文章。

猜你喜欢

转载自blog.csdn.net/lindahui2008/article/details/83239325