linux nbd & qemu-nbd

網絡塊設備:  Network Block Devicehtml

     能夠將一個遠程主機的磁盤空間,看成一個塊設備來使用.就像一塊硬盤同樣.
  使用它,你能夠很方便的將另外一臺服務器的硬盤空間,增長到本地服務器上. 
  NBD與NFS有所不一樣.NFS只是提供一個掛載點供客戶端使用,客戶端沒法改變這個掛載點的分區格式. 
  而NBD提供的是一個塊設備,客戶端能夠把這個塊設備格式化成各類類型的分區.更便於用戶的使用. 
  NBD是一個內核模塊,大部分Linux發行版都已包含它. linux

      在centos中, 編譯成模塊NBD, 保存在 /lib/modules/$version/kernel/driver/block/centos

  

   遠程服務器是一段輕量級的守護進程代碼,它提供對遠程設備的訪問,並且該守護進程並不須要運行在linux平臺之上。本地操做系統必須是linux,並且要支持Linux內核NBD驅動,而且可以運行本地客戶端進程.服務器

     

    圖1.NBD在本地客戶端表明遠程資源網絡

   文件系統能被掛載到NBD上(圖1),並且NBD設備也可以用來組成冗餘磁盤陣列(RAID)。在本地Linux上掛載一個EXT2文件系統到NBD,其傳輸率要比在一樣的遠程機器上掛載一個NFS快.源碼分析

   

    圖2.使用NBD的冗餘磁盤陣列ui

 

1. 加載 nbd 驅動

  某些版本的 Linux 不加 max_part 參數會致使沒有設備節點 /dev/nbd0p{1,2,3,4…} 等. 用 kpartx 也不行. /dev/nbd0p{1,2,3,4} 分區。es5

$ sudo modprobe nbd max_part=8

  備註信息:查看Linux 模塊信息(modinfo),例如查看nbd模塊的參數。 加載後,在/dev/目錄下,根據參數建立nbdxx塊設備文件。spa

[root@vStack block]# modinfo nbd
filename:       /lib/modules/3.19.8-100.el7.centos.x86_64/kernel/drivers/block/nbd.ko
license:        GPL
description:    Network Block Device
depends:        
intree:         Y
vermagic:       3.19.8-100.el7.centos.x86_64 SMP mod_unload 
parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
parm:           max_part:number of partitions per device (default: 0) (int)
parm:           debugflags:flags for controlling debug output (int)

 

2.鏈接 qemu-nbd

$ sudo qemu-nbd -c /dev/nbd0 centos.qcow2 

 

查看分區:操作系統

$ 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 -d /dev/nbd0p1  

 

 

centOS7編譯NBD驅動

uname -r #-> 3.10.0-123.el7.x86_64

 
yum install kernel-devel kernel-headers
cd /tmp
wget http://vault.centos.org/7.0.1406/os/Source/SPackages/kernel-3.10.0-123.el7.src.rpm
rpm -ihv kernel-3.10.0-123.el7.src.rpm
cd ~/rpmbuild/SOURCES
tar Jxvf linux-3.10.0-123.el7.tar.xz -C /usr/src/kernels/
cd /usr/src/kernels/
mv $(uname -r) $(uname -r)-old
mv linux-3.10.0-123.el7 $(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

 

vclass 中 fronvmm rpm包中的幾個命令:

  fromvmm          提供vnc服務

    fvmm-io    = qemu-io

       fvmm-nbd   = qemu-nbd,  fvmm-nbd 不支持qcow2格式的鏡像

       fvmm-vdisk      = qemu-vdisk 

 

FAQ:

  1. 如何編譯nbd驅動

       2.源碼分析

       3. qemu-nbd 如何加載網絡上的nbd到本地。

 

 

連接:

  1. 虛擬塊設備的實現技術-nbd/iscsi/qemu等模式    http://blog.csdn.net/kenera/article/details/16839499

  2. NBD-網絡塊設備[翻譯]                              https://my.oschina.net/kelvinxupt/blog/226066?p={{currentPage-1}}

    3. centOS7編譯NBD驅動               http://blog.csdn.net/mayanyun2013/article/details/55517956

  4. 關於CentOS6如何編譯裝載nbd模塊         http://www.codes51.com/article/detail_94502.html

  5. nbd 詳解-01                    http://chuansong.me/n/2187014

相關文章
相關標籤/搜索