在服务器 A 上创建虚拟机时,virt-install 在 libvirt 存储池“POOL”中创建了一个 libvirt 卷“VM”。
virsh-install --disk pool=POOL,size=$HDDSIZE,$DISKOPT -n VM
正如预期的那样,libvirt 显示例如
# virsh vol-list POOL
Name Path
-----------------------------------------
VM /dev/VOLUMEGROUP/VM
anotherVM /dev/VOLUMEGROUP/anotherVM
将虚拟机迁移到不与服务器 A 共享存储的服务器 B 时,我改为使用 lvm 创建逻辑卷:
lvcreate -l $EXTNSIZE -n lvmVM VOLUMEGROUP
作为不是预期(但可以说是预期的),服务器 B 上的 libvirt 确实不是识别 lvmVM。
# virsh vol-list POOL
Name Path
-----------------------------------------
someOtherVM /dev/VOLUMEGROUP/someOtherVM
无论如何,我都能手动启动虚拟机。很好。但是...
- 让 libvirt 对 POOL 中的新卷保持盲目状态是否存在危险/缺点?
- 例如,libvirt 是否会在重启时无法自动重启 VM 等等?
(或者,从另一个角度来看:在通过 virt-inst 等进行初始创建之后,使用 libvirt 卷而不是仅使用存储池内的 lvm 卷有什么好处?)
- 有没有办法让 libvirt 识别该卷?
- ...但是这个识别/转换过程会将元数据写入 lvmVM 并从而损坏 VM 虚拟磁盘吗?
细节:
- 在两台服务器上,lvm 组“VOLUMEGROUP”用于 libvirt 存储池“POOL”。
- 在两台服务器上,lvm 均显示预期的卷。只是 libvirt 卷“层”不同。
- Debian Linux 8 x86_64,lvm2 2.02.111-2.2+deb8u1,libvirt 1.2.9-9+deb8u3
- 大小为 40 GB,DISKOPT='bus=virtio,cache=writethrough,io=threads,sparse=false'
- libvirt 之下使用 KVM 和 qemu。
虚拟机“VM”的 libvirt xml 具有:
disk type='block' device='disk' driver name='qemu' type='raw' source dev='/dev/VOLUMEGROUP/VM' target dev='vda' bus='virtio'