Como posso usar o lvm VG do host como um pool kvm?

3

Eu tenho uma configuração de máquina com o Centos6 como um host de virtualização. Ele tem um único disco rígido de 250G que é configurado como um único grupo de volume lvm (vg_fluke). Agora eu gostaria de usar o lvm do host como um pool de armazenamento para o KVM.

Encontrei esta questão sobre SF e método um descreve o que eu gostaria de alcançar. Mas não consigo encontrar uma maneira de fazer isso.

Eu tentei o seguinte, mas como a documentação é incompleta, tenho certeza de que estou fazendo algo errado.

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

E seguiu com

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

Mais informações sobre a configuração do 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

Atualização:

Seguiu o conselho do @ sitaktif e agora recebe o seguinte erro:

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

Nota: Eu estou tentando isso em uma máquina diferente, onde o VG é vg-main. Tenho que criar um segundo VG para o libvirt usar em máquinas virtuais? Como posso configurá-lo usando um LV no VG existente?

    
por Shoan 23.01.2012 / 09:17

3 respostas

4

O seguinte comando está incorreto:

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

... porque é executado:

/sbin/vgchange -ay -

... em vez de:

/sbin/vgchange -ay /dev/vg_fluke

Apenas nomeie explicitamente o parâmetro em vez de usar traços:

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

Isso deve resolver seu problema.

    
por 19.04.2012 / 15:36
4

Por padrão, o libvirt usa o nome do pool como o nome do vg. Você pode ver que está fazendo isso com o comando /sbin/vgchange -ay lv_guest_vm que tentou executar. Apenas faça:

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

e isso deve funcionar.

    
por 27.04.2012 / 17:15
0

Mais algumas coisas para tentar se você não conseguir fazer isso funcionar:

Se o --source-name (da resposta de Wil Tan) não ajudar, considere --source-dev para fazer a conexão com a camada abaixo do LVM explicitamente:

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

Se você estiver com problemas, comece com a nomeação do conjunto de armazenamentos idêntico ao grupo de volumes.

Além disso, após a criação de um pool, analise-o com, por exemplo, ...

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

... o que pode lhe dar pistas adicionais.

A questão também está se referindo a compartilhando o grupo de volume lvm entre o host e os convidados . Para evitar problemas, certifique-se de usar um volume lvm (não grupo) do host como um disco rígido (não um volume lvm) no guest. Esse volume pode fazer parte de um grupo ou conjunto de armazenamentos, desde que eles sejam manipulados diretamente no host. E no convidado, você pode construir uma camada lvm no topo deste disco rígido, mas isso é separado do lvm do host inteiramente. E para maior clareza, por favor, indique se os comandos (você está citando) são feitos no host ou no convidado. Os comandos que estou citando aqui são todos executados no host.

Sobre a questão ...

Do I have to create a second VG for libvirt to use for virtual machines?

Tanto quanto eu tropeçou nisso por acidente , eu não encontrei nenhuma razão para separar volumes conhecidos para libvirt de volumes não conhecidos para libvirt em grupos de volumes separados.

Com "known to libvirt", quero dizer: libvirt mostra-os como volumes dentro do pool de armazenamento. Por exemplo. via ...

virsh vol-list vg_fluke

Mas, novamente, se você não conseguir fazer as coisas funcionarem, comece com um grupo de volumes separado para resolver outra possível fonte de problemas.

    
por 23.09.2016 / 13:51