小风儿 发表于 2017-6-25 12:56:22

QEMU KVM Libvirt手册(6):Network Block Device

  网络块设备是通过NBD Server将虚拟块设备通过TCP/IP export出来,可以远程访问。
  NBD Server通常是qemu-nbd
  可以提供unix socket
  qemu-nbd -t -k /home/cliu8/images/ubuntutest-nbd ubuntutest.img
  打开另一个窗口,可以连接这个unix socket
  qemu-system-x86_64 -enable-kvm -name ubuntutest-m 2048 -hda nbd:unix:/home/cliu8/images/ubuntutest-nbd -vnc :19 -net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=n
  可以提供普通的socket连接
  qemu-nbd -t -p 1088 ubuntutest.img
  打开另一个窗口,可以连接这个port
  qemu-system-x86_64 -enable-kvm -name ubuntutest-m 2048 -hda nbd:localhost:1088 -vnc :19 -net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=n
  参数--share=num,可以多个客户端同时访问这个server
  参数--snapshot,说明任何修改都放在临时文件中
  参数—read-only,则只读模式export这个设备
  如果有参数—connect = dev,则可以直接将image付给一个network block device,并且可以mount它
  qemu-nbd -c /dev/nbd0 ubuntutest.img
  这时候我们ls,发现
  # ls /dev/nbd0*
/dev/nbd0/dev/nbd0p1/dev/nbd0p2/dev/nbd0p5
  其实ubuntutest.img中有至少三个partition
  # fdisk -l /dev/nbd0
  Disk /dev/nbd0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077a7b
  Device Boot      Start         End      Blocks   IdSystem
/dev/nbd0p1   *      2048   6291455   3144704   83Linux
/dev/nbd0p2         6293502    10483711   2095105    5Extended
/dev/nbd0p5         6293504    10483711   2095104   82Linux swap / Solaris
  通过fdisk验证,的确是这样的
  我们可以mount其中的一个
  mkdir ubuntutestp1
  mount /dev/nbd0p1 ubuntutestp1/
  # cd ubuntutestp1/
# ls
bin   devhome      lib    lost+foundmntprocrun   srvtmpvar
bootetcinitrd.imglib64media       optrootsbinsysusrvmlinuz
  这个时候我们可以对里面的文件修改,就修改了image了。
  修改完毕后,我们umount
  # umount ubuntutestp1
# qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected
  其实并不是所有的都这么简单
  # qemu-nbd -c /dev/nbd0 centos-5.8.new.qcow2
# fdisk -l /dev/nbd0
  Disk /dev/nbd0: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f117e
  Device Boot      Start         End      Blocks   IdSystem
/dev/nbd0p1   *          63      208844      104391   83Linux
/dev/nbd0p2          208845    20964824    10377990   8eLinux LVM
  我们发现里面有LVM,当然LVM不能作为整体访问,因为里面有Logic volume,都是单独成文件系统的
  # lvscan
inactive          '/dev/VolGroup00/LogVol00' inherit
inactive          '/dev/VolGroup00/LogVol01' inherit
# vgscan
Reading all physical volumes.This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
# pvscan
PV /dev/nbd0p2   VG VolGroup00            lvm2
  由于logical volume处于inactive的状态
  # vgimport VolGroup00
Volume group "VolGroup00" is not exported
  # vgchange -ay VolGroup00
2 logical volume(s) in volume group "VolGroup00" now active
  这下可以分别mount两个LV了
  # mount/dev/VolGroup00/LogVol00 ubuntutestp1/      
# cd ubuntutestp1/
# ls
binbootdevetchomeliblib64lost+foundmediamiscmntoptprocrootsbinselinuxsrvsystmpusrvar
  完毕后
  umount ubuntutestp1
  # vgchange -an VolGroup00
0 logical volume(s) in volume group "VolGroup00" now active
  # vgexport VolGroup00
Volume group "VolGroup00" successfully exported
  # qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected
  在linux下,一个更高效的network block device是nbd-server,另有nbd-client连接server,形成一个/dev/ndb0
页: [1]
查看完整版本: QEMU KVM Libvirt手册(6):Network Block Device