網絡塊設備: Network Block Device
可以將一個遠程主機的磁盤空間,當作一個塊設備來使用.就像一塊硬盤一樣.
使用它,你可以很方便的將另一台服務器的硬盤空間,增加到本地服務器上.
NBD與NFS有所不同.NFS只是提供一個掛載點供客戶端使用,客戶端無法改變這個掛載點的分區格式.
而NBD提供的是一個塊設備,客戶端可以把這個塊設備格式化成各種類型的分區.更便於用戶的使用.
NBD是一個內核模塊,大部分Linux發行版都已包含它.
在centos中, 編譯成模塊NBD, 保存在 /lib/modules/$version/kernel/driver/block/
遠程服務器是一段輕量級的守護進程代碼,它提供對遠程設備的訪問,而且該守護進程並不需要運行在linux平台之上。本地操作系統必須是linux,而且要支持Linux內核NBD驅動,並且能夠運行本地客戶端進程.
圖1.NBD在本地客戶端代表遠程資源
文件系統能被掛載到NBD上(圖1),而且NBD設備也能夠用來組成冗余磁盤陣列(RAID)。在本地Linux上掛載一個EXT2文件系統到NBD,其傳輸率要比在同樣的遠程機器上掛載一個NFS快.
圖2.使用NBD的冗余磁盤陣列
1. 加載 nbd 驅動
deepin@deepin:~$ grep NBD /boot/config-4.4.102-deepin-server CONFIG_BLK_DEV_NBD=m
某些版本的 Linux 不加 max_part 參數會導致沒有設備節點 /dev/nbd0p{1,2,3,4…} 等. 用 kpartx 也不行. /dev/nbd0p{1,2,3,4} 分區。
[root@centos sm]# rmmod nbd
[root@centos sm]#
modprobe nbd max_part=8
[root@centos sm]#
ls -al /dev/nbd*
備注信息:查看Linux 模塊信息(modinfo),例如查看nbd模塊的參數。 加載后,在/dev/目錄下,根據參數創建nbdxx塊設備文件。
[root@vStack block]# modinfo nbd
filename: /lib/modules/4.4.102-deepin-server/kernel/drivers/block/nbd.ko license: GPL description: Network Block Device depends: intree: Y vermagic: 4.4.102-deepin-server SMP mod_unload modversions aarch64 parm: nbds_max:number of network block devices to initialize (default: 16) (int) parm: max_part:number of partitions per device (default: 0) (int)
2.連接 qemu-nbd
$ sudo qemu-nbd --connect=/dev/nbd0 ./vans-kvm.qcow2 --nocache
查看分區:
$ sudo fdisk -l /dev/nbd0
[root@vStack block]# fdisk -l /dev/nbd1000 磁盤 /dev/nbd1000:53.7 GB, 53687091200 字節,104857600 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 512 字節 I/O 大小(最小/最佳):512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x0007c948 設備 Boot Start End Blocks Id System /dev/nbd1000p1 * 2048 1026047 512000 83 Linux /dev/nbd1000p2 1026048 76457983 37715968 83 Linux /dev/nbd1000p3 76457984 104857599 14199808 83 Linux
2. 掛載
$ sudo mount /dev/nbd0p1 /mnt/test1
3.解掛
$ sudo qemu-nbd --disconnect /dev/nbd0p1