系統管理:nbd_網絡塊設備_的使用


一.NBD簡介
NBD(Network Block Device)讓你可以將一個遠程主機的磁盤空間,當作一個塊設備來使用.就像一塊硬盤一樣. 使用它,你可以很方便的將另一台服務器的硬盤空間,增加到本地服務器上. NBD與NFS有所不同.NFS只是提供一個掛載點供客戶端使用,客戶端無法改變這個掛載點的分區格式. 而NBD提供的是一個塊設備,客戶端可以把這個塊設備格式化成各種類型的分區.更便於用戶的使用. NBD是一個內核模塊,大部分Linux發行版都已包含它.
二.NBD安裝方法
在Turbolinux的10以上的版本中,NBD已被編譯成模塊.保存在 /lib/modules/$version/kernel/driver/block/下. 你還需要在服務器端和客戶端上安裝nbd-server和nbd -client工具. 你可以從官方網站上下載源碼包,並分別在服務器端和客戶端服務器上進行安裝: http://sourceforge.net/projects/nbd 我們這裡下載nbd-2.8.8.tar.bz2 下載後,執行下列步驟進行安裝: # tar jxf nbd-2.8.8.tar.bz2 # cd nbd-2.8.8 # ./configure # make # make install
三.NBD使用方法
1.示例1: 服務器端提供單個映像文件到客戶端

你需要先建立一個磁盤映像文件,作為提供給客戶端使用的塊設備.我們製作一個300MB的文件當做塊設備. # cd /var/tmp # dd if=/dev/zero of=nbd-disk0 bs=104857600 count=3 啟動nbd-server,監聽1234端口,使用nbd-disk0映像文件. # nbd-server 1234 /var/tmp/nbd-disk0 查看nbd進程. # ps -ef | grep nbd root 11292 1 0 15:02 ? 00:00:00 nbd-server 1234 /var/tmp/nbd-disk0 nbd-server用法: nbd-server port file [size][kKmM] [-l authorize_file] [-r] [-m] [-c] [-a timeout_sec] port nbd-server監聽端口. file 綁定的映像文件. size 在客戶端所見的塊設備大小(單位可以是: k,K,m,M). -r|--read-only 只讀模式,客戶端無法在塊設備上進行寫操作. -m|--multi-file 多個文件,可以將多個映像文件作為一個塊設備提供給客戶端. -c|--copy-on-write 所有客戶端的寫操作被會另存為一個文件,連接斷開後,這個文件會被刪除. 可以保證映像文件內容不會被修改. -l|--authorize-file file 一個允許訪問此nbd的主機列表文件. -a|--idle-time 服務器斷開與客戶端連接前的最大空閒時間. b.客戶端配置方法(IP為192.168.1.2)
加載nbd模塊. # modprobe nbd # lsmod | grep nbd nbd 26400 0 查看nbd設備是否建立. # ls /dev/nbd* -hl brw-r----- 1 root disk 43, 0 Jul 27 06:40 /dev/nbd0 brw-r----- 1 root disk 43, 1 Jul 27 06:40 /dev/nbd1 brw-r----- 1 root disk 43, 2 Jul 27 06:40 /dev/nbd2 brw-r----- 1 root disk 43, 3 Jul 27 06:40 /dev/nbd3 brw-r----- 1 root disk 43, 4 Jul 27 06:40 /dev/nbd4 brw-r----- 1 root disk 43, 5 Jul 27 06:40 /dev/nbd5 brw-r----- 1 root disk 43, 6 Jul 27 06:40 /dev/nbd6 brw-r----- 1 root disk 43, 7 Jul 27 06:40 /dev/nbd7 brw-r----- 1 root disk 43, 8 Jul 27 06:40 /dev/nbd8 brw-r----- 1 root disk 43, 9 Jul 27 06:40 /dev/nbd9 將/dev/nbd0設備與主機連接. # nbd-client 192.168.1.1 1234 /dev/nbd0 Negotiation: ..size = 307200KB bs=1024, sz=307200 nbd-client用法: nbd-client [bs=blocksize] host port nbd_device [-swap] bs 用於設置塊大小,默認是1024,可以是512,1024.2048,4096 host 服務器的主機名或IP port 服務器的監聽端口 nbd_device 映射到本地的哪個nbd設備(如: /dev/nbd0) -swap 指定nbd設備將用做swap空間 nbd-client -d nbd_device 用於斷開連接 連接成功後,可以查看到nbd-client進程. # ps -ef | grep nbd root 3156 1 0 06:44 pts/0 00:00:00 nbd-client 192.168.1.1 1234 /dev/nbd0 使用前,需要格式化這個塊設備. # mkfs.ext3 /dev/nbd0 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 76912 inodes, 307200 blocks 15360 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 38 block groups 8192 blocks per group, 8192 fragments per group 2024 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. 掛載這個塊設備. # mkdir /mnt/nbd0 # mount /dev/nbd0 /mnt/nbd0 # cd /mnt/nbd0 # ls lost+found 複製/root目錄到這個目錄中. # cp /root . -rf # ls lost+found root 斷開這個塊設備. # umount /mnt/nbd0/ # nbd-client -d /dev/nbd0 Disconnecting: que, disconnect, sock, done Kernel call returned: Broken pipeClosing: que, sock, done

2.示例2: 服務器端提供多個映像文件到客戶端
a.服務器端配置
# cd /var/tmp # dd if=/dev/zero of=nbd-disk1 bs=104857600 count=3 記錄了3+0 的讀入 記錄了3+0 的寫出 314572800 字節(315 MB) 已復制,0.584027 秒,539 MB/秒 # dd if=/dev/zero of=nbd-disk2 bs=104857600 count=3 記錄了3+0 的讀入 記錄了3+0 的寫出 314572800 字節(315 MB) 已復制,1.5128 秒,208 MB/秒 # nbd-server 1234 /var/tmp/nbd-disk1 # nbd-server 1235 /var/tmp/nbd-disk1 # nbd-server 1236 /var/tmp/nbd-disk2 # ps -ef | grep nbd root 11292 1 0 15:02 ? 00:00:00 nbd-server 1234 /var/tmp/nbd-disk0 root 11599 1 0 15:14 ? 00:00:00 nbd-server 1235 /var/tmp/nbd-disk1 root 11606 1 0 15:14 ? 00:00:00 nbd-server 1236 /var/tmp/nbd-disk2 b.客戶端配置
# lsmod | grep nbd nbd 24736 0 # ls /dev/nbd* /dev/nbd0 /dev/nbd11 /dev/nbd14 /dev/nbd3 /dev/nbd6 /dev/nbd9 /dev/nbd1 /dev/nbd12 /dev/nbd15 /dev/nbd4 /dev/nbd7 /dev/nbd10 /dev/nbd13 /dev/nbd2 /dev/nbd5 /dev/nbd8 # nbd-client 192.168.1.1 1234 /dev/nbd0 Negotiation: ..size = 307200KB bs=1024, sz=307200 # nbd-client 192.168.1.1 1235 /dev/nbd1 Negotiation: ..size = 307200KB bs=1024, sz=307200 # nbd-client 192.168.1.1 1236 /dev/nbd2 Negotiation: ..size = 307200KB bs=1024, sz=307200 將nbd1格式化為vfat格式. # mkfs.vfat /dev/nbd1 mkfs.vfat 2.11 (12 Mar 2005) unable to get drive geometry, using default 255/63 將nbd2格式化為ext2格式. # mkfs.ext2 /dev/nbd2 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 76912 inodes, 307200 blocks 15360 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 38 block groups 8192 blocks per group, 8192 fragments per group 2024 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. 掛載這3個塊設備 # cd /mnt # mkdir nbd1 nbd2 # mount /dev/nbd0 nbd0 # mount /dev/nbd1 nbd1 # mount /dev/nbd2 nbd2 # df -h Filesystem Size Used Avail Use% Mounted on /dev/nbd0 291M 11M 265M 4% /mnt/nbd0 /dev/nbd1 300M 0 300M 0% /mnt/nbd1 /dev/nbd2 291M 2.1M 274M 1% /mnt/nbd2 # mount /dev/nbd0 on /mnt/nbd0 type ext3 (rw) /dev/nbd1 on /mnt/nbd1 type vfat (rw) /dev/nbd2 on /mnt/nbd2 type ext2 (rw)

留言

這個網誌中的熱門文章

Json概述以及python對json的相關操作

Docker容器日誌查看與清理

遠程控制管理工具ipmitool