我有一台安装了 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
但话又说回来,如果您无法让事情正常运转,请从单独的卷组开始解决另一个可能的问题源。