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

Sho*_*oan 5 lvm kvm-virtualization

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

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

我尝试了以下操作,但由于文档很粗略,我确信我做错了什么。

virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke
Pool guest_images_lvm defined
Run Code Online (Sandbox Code Playgroud)

然后跟着,

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
Run Code Online (Sandbox Code Playgroud)

有关 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
Run Code Online (Sandbox Code Playgroud)

更新:

遵循@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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

以下命令不正确:

virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke
Run Code Online (Sandbox Code Playgroud)

...因为它执行:

/sbin/vgchange -ay -
Run Code Online (Sandbox Code Playgroud)

...代替:

/sbin/vgchange -ay /dev/vg_fluke
Run Code Online (Sandbox Code Playgroud)

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

pool-define-as guest_images_lvm logical --target /dev/vg_fluke
Run Code Online (Sandbox Code Playgroud)

那应该可以解决您的问题。


小智 5

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

pool-define-as lv_guest_vm logical --source-name vg-main --target /dev/vg-main
Run Code Online (Sandbox Code Playgroud)

它应该工作。