KVM e Libvirt - Como conectar um novo disco virtio?

24

Estou tentando adicionar a quente um disco baseado em arquivo em 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 esperava adicioná-lo a quente 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 se torna:

<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 fica errado, deve ser driver name='qemu'o vdadisco existente . Eu tentei com --drive=qemumas afirma que não é suportado.

Em segundo lugar, apenas "vejo" a unidade recém-adicionada depois de reiniciar a máquina virtual executando o Ubuntu 10.04.4 LTS. Como posso fazer a unidade "hotplug"? Eu quero que a máquina virtual "veja" a nova unidade imediatamente sem uma reinicialização.

Daniele Testa
fonte
1
Sugestão não relacionada, o uso qemu-img, em vez de dd- seus argumentos vem mais natural e faz a mesma coisa:qemu-img create test.img 5G
chutz

Respostas:

31

Gostaria de começar com uma nota que você deve evitar usar virsh attach-diskcom sua quantidade limitada de opções. Em vez disso, sugiro especificar o formato exato do disco que você prefere 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 esta abaixo.

    ajuste as propriedades para se adequar à 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: consulte a configuração atual do domínio XML e copie uma <disk>seção a partir daí.

    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 estão carregados no convidado.

    Algumas distribuições do Linux, como o recente CentOS / RHEL / Fedora, têm isso embutido no kernel. Nesse caso, verifique CONFIG_HOTPLUG_PCI_ACPI. Se estiver y, está tudo pronto e você pode pular esta etapa.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Considere adicionar esses dois módulos /etc/modulesse desejar 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 --persistentopção para permitir que o Libvirt atualize a definição XML do domínio 'persistente'.

  4. Por fim, verifique dentro do convidado se o disco foi realmente inserido com 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 vdbem duas partições na tabela de partições.

Referências

gertvdijk
fonte
Você também não deve adicionar --persistentpara garantir que essa configuração não se perca ao desligar a máquina virtual?
Chutz