How can I use the host's lvm VG as a kvm pool?
I have a machine setup with Centos6 as a virtualisation host. It has a single 250G hard drive that is configured as a single lvm volume group(vg_fluke). Now I would like to use the host's lvm as a storage pool for KVM.
I found this question on SF and method one describes what I would like to achieve. But I can't find a way to go about it.
I tried the following, but since the documentation is sketchy, I am certain that I am doing something wrong.
virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke
Pool guest_images_lvm defined
And followed it with,
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
More Information on the LVM setup:
[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
Update:
Followed @sitaktif's advice and now get the following error:
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
Note: I am on trying this on a different machine where the VG is vg-main. Do I have to create a second VG for libvirt to use for virtual machines? How can I set it up use a LV in the existing VG?
The following command is incorrect:
virsh # pool-define-as guest_images_lvm logical - - - - /dev/vg_fluke
...because it executes:
/sbin/vgchange -ay -
...instead of:
/sbin/vgchange -ay /dev/vg_fluke
Just explicitely name the parameter instead of using dashes:
pool-define-as guest_images_lvm logical --target /dev/vg_fluke
That should solve your problem.
By default, libvirt uses the pool name as the name of the vg. You can see it's doing that with the /sbin/vgchange -ay lv_guest_vm
command that it tried to execute. Just do:
pool-define-as lv_guest_vm logical --source-name vg-main --target /dev/vg-main
and it should work.