如何将主机的 lvm VG 用作 kvm 池?

如何将主机的 lvm VG 用作 kvm 池?

我有一台安装了 Centos6 的机器作为虚拟化主机。它有一个 250G 的硬盘,配置为单个 lvm 卷组 (vg_fluke)。现在我想将主机的 lvm 用作 KVM 的存储池。

我发现SF 上的这个问题方法一描述了我想要实现的目标。但我找不到实现它的方法。

我尝试了以下操作,但由于文档不完整,我确信我做错了什么。

virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke
Pool guest_images_lvm defined

接下来是,

virsh # pool-start guest_images_lvm
error: Failed to start pool guest_images_lvm
error: internal error Child process (/sbin/vgchange -ay -) status unexpected: exit status 5

有关 LVM 设置的更多信息:

[root@fluke ~]# pvs
  PV         VG       Fmt  Attr PSize   PFree  
  /dev/sdb2  vg_fluke lvm2 a--  232.39g 125.45g
[root@fluke ~]# lvs
  LV      VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_home vg_fluke -wi-ao   5.00g                                      
  lv_root vg_fluke -wi-ao 100.00g                                      
  lv_swap vg_fluke -wi-ao   1.94g                                      
[root@fluke ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree  
  vg_fluke   1   3   0 wz--n- 232.39g 125.45g

更新:

按照@sitaktif 的建议,现在出现以下错误:

virsh # pool-define-as lv_guest_vm logical --target /dev/vg-main
Pool lv_guest_vm defined

virsh # pool-start lv_guest_vm
error: Failed to start pool lv_guest_vm
error: internal error '/sbin/vgchange -ay lv_guest_vm' exited with non-zero status 5 and signal 0:   Volume group "lv_guest_vm" not found

注意:我正在另一台机器上尝试此操作,其中 VG 是 vg-main。我是否必须为 libvirt 创建第二个 VG 以供虚拟机使用?我如何设置它以使用现有 VG 中的 LV?

答案1

以下命令是错误的:

virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke

...因为它执行:

/sbin/vgchange -ay -

...代替:

/sbin/vgchange -ay /dev/vg_fluke

只需明确命名参数,而不是使用破折号:

pool-define-as guest_images_lvm logical --target /dev/vg_fluke

这应该可以解决你的问题。

答案2

默认情况下,libvirt 使用池名称作为 vg 的名称。您可以看到它正在/sbin/vgchange -ay lv_guest_vm尝试执行命令。只需执行:

pool-define-as lv_guest_vm logical --source-name vg-main --target /dev/vg-main

它应该可以工作。

答案3

如果你无法让它工作,请尝试其他方法:

如果 --source-name(来自 Wil Tan 的回答)没有帮助,请考虑使用 --source-dev 明确建立与 LVM 下层的连接:

virsh pool-define-as vg_fluke logical --target /dev/vg_fluke --source-dev /dev/md999

如果您遇到问题,请先将存储池命名为与卷组相同的名称。

另外,创建池后,可以使用以下方法查看它...

virsh pool-list  --all
virsh pool-info vg_fluke

...这可能会给你提供额外的线索。

这个问题还涉及在主机和客户机之间共享 lvm 卷组。但是,为了避免出现问题,请确保将主机的 lvm 卷(而非组)用作客户机上的硬盘(而非 lvm 卷)。此卷可以是组或存储池的一部分,只要这些仅在主机上直接操作即可。在客户机上,您可以在此硬盘上构建一个 lvm 层,但这与主机的 lvm 完全分离。为了更加清楚,请说明(您引用的)命令是在主机上还是在客户机上执行的。我在此处引用的命令都是在主机上执行的。


关于这个问题...

我是否必须为 libvirt 创建第二个 VG 以供虚拟机使用?

据我所知偶然发现了这一点我发现没有理由将 libvirt 已知的卷与卷分开不是为 libvirt 所知,分为单独的卷组。

我说的“libvirt 已知”是指:libvirt 将它们显示为存储池内的卷。例如通过...

virsh vol-list vg_fluke

但话又说回来,如果您无法让事情正常运转,请从单独的卷组开始解决另一个可能的问题源。

相关内容