KVM y Libvirt: ¿cómo conecto un nuevo disco virtio?

24

Estoy tratando de agregar un disco basado en archivos a un servidor virtual KVM en ejecución. He creado un nuevo disco desde cero usando el comando

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

y esperaba que se agregara en caliente al invitado haciendo esto en el shell virsh:

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

La definición XML del dominio se convierte en:

<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 puede ver, el nombre del controlador se vuelve incorrecto, debe ser driver name='qemu'como el vdadisco existente . He intentado con --drive=qemupero dice que no es compatible.

En segundo lugar, solo "veo" la unidad recién agregada una vez que reinicio la máquina virtual que ejecuta Ubuntu 10.04.4 LTS. ¿Cómo puedo hacer que la unidad se "conecte en caliente"? Quiero que la máquina virtual "vea" la nueva unidad inmediatamente sin reiniciar.

Daniele Testa
fuente
1
Sugerencia no relacionada, use en qemu-imglugar de dd- sus argumentos son más naturales y hacen lo mismo:qemu-img create test.img 5G
chutz

Respuestas:

31

Me gustaría comenzar con una nota que debe evitar usar virsh attach-diskcon su cantidad limitada de opciones. En cambio, sugeriría que especifique el formato de disco exacto que prefiere en un archivo XML temporal separado o utilizando la aplicación GUI virt-manager (para el último, omita el primer paso).

  1. Cree un archivo temporal con una definición de disco como esta a continuación.

    ajustar las propiedades para adaptarse a su situación

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

    Consejo: Eche un vistazo a su configuración de dominio XML actual y copie una <disk>sección desde allí.

    virsh dumpxml <domainname>
    
  2. Ahora, antes de agregar el disco a un dominio actual, asegúrese de que los módulos del núcleo hotplug necesarios estén cargados en el invitado.

    Algunas distribuciones de Linux como CentOS / RHEL / Fedora recientes tienen esto incorporado en el núcleo. En este caso, verifique CONFIG_HOTPLUG_PCI_ACPI. Si es así y, ya está todo listo y puede omitir este paso.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Considere agregar estos dos módulos /etc/modulessi desea que se carguen en el arranque de forma predeterminada.

  3. Agregue el disco a la VM en ejecución usando

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

    Opcionalmente, agregue la --persistentopción para permitir que Libvirt actualice la definición XML del dominio 'persistente'.

  4. Finalmente, verifique dentro del invitado si el disco fue realmente insertado en caliente. El núcleo debe activarse, como se puede verificar con dmesg:

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

    En el ejemplo anterior, he agregado un disco como vdbcon dos particiones en la tabla de particiones.

Referencias

gertvdijk
fuente
¿No debería agregar también --persistentpara asegurarse de que esta configuración no se pierda cuando apaga la máquina virtual?
chutz