KVM e Libvirt - Como faço para hotplug um novo disco do virtio?

22

Estou tentando adicionar um disco baseado em arquivo a um servidor virtual KVM em execução. Eu criei um novo disco a partir do zero usando o comando

dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0

e eu estava esperando para obtê-lo quente adicionado ao convidado, fazendo isso no shell virsh:

virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
        vdd --driver=file --subdriver=raw

A definição XML do domínio torna-se então:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/home/cloud/vps_59/root.img'/>
  <target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
  <driver name='file' type='raw'/>
  <source file='/home/cloud/vps_59/test.img'/>
  <target dev='vdd' bus='virtio'/>
</disk>

Como você pode ver, o nome do driver se torna incorreto, deve ser driver name='qemu' como o disco vda existente. Eu tentei com --drive=qemu , mas ele afirma que não é compatível.

Em segundo lugar, eu só "vejo" a unidade recém-adicionada depois que eu reinicio a máquina virtual que executa o Ubuntu 10.04.4 LTS. Como posso fazer o drive "hotplug"? Eu quero que a máquina virtual "veja" a nova unidade imediatamente sem uma reinicialização.

    
por Daniele Testa 12.12.2012 / 00:22

1 resposta

28

Gostaria de começar com uma observação de que você deve evitar usar virsh attach-disk com sua quantidade limitada de opções. Em vez disso, sugiro especificar o formato de disco exato que você preferir em um arquivo XML temporário separado ou usando o aplicativo GUI do virt-manager (para o último, pule a primeira etapa).

  1. Crie um arquivo temporário com uma definição de disco como abaixo.

    ajuste as propriedades de acordo com a sua situação

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/path/to/disk-image.img'/>
      <target dev='vdb' bus='virtio'/>
    </disk>
    

    Dica: examine sua configuração atual de domínio XML e copie uma seção <disk> de lá.

    virsh dumpxml <domainname>
    
  2. Agora, antes de adicionar o disco a um domínio atual, verifique se os módulos do kernel hotplug necessários foram carregados no convidado.

    Algumas distribuições do Linux, como o recente CentOS / RHEL / Fedora, possuem este built-in no kernel. Nesse caso, verifique por CONFIG_HOTPLUG_PCI_ACPI . Se é y , então está tudo pronto e você pode pular este passo.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Considere adicionar esses dois módulos a /etc/modules se quiser que eles sejam carregados na inicialização por padrão.

  3. Adicione o disco à VM em execução usando

    virsh attach-device <domain name> /path/to/disk.xml
    

    Opcionalmente, adicione a opção --persistent para permitir que o Libvirt atualize a definição XML do domínio 'persistente'.

  4. Finalmente, verifique dentro do convidado se o disco foi realmente inserido no hotplug. O kernel deve ser acionado, como pode ser verificado com dmesg :

    [  321.946440] virtio-pci 0000:00:06.0: using default PCI settings
    [...]
    [  321.952782]  vdb: vdb1 vdb2
    

    No exemplo acima, adicionei um disco como vdb com duas partições na tabela de partições.

Referências

por 12.12.2012 / 00:43