web-dev-qa-db-fra.com

KVM et Libvirt - Comment connecter à chaud un nouveau disque virtio?

J'essaie d'ajouter à chaud un disque basé sur des fichiers à un serveur virtuel en cours d'exécution KVM. J'ai créé un nouveau disque à partir de zéro à l'aide de la commande

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

et j'espérais le faire ajouter à chaud à l'invité en faisant cela dans le virsh Shell:

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

La définition XML du domaine devient alors:

<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>

Comme vous pouvez le voir, le nom du pilote devient incorrect, il devrait être driver name='qemu' comme le disque vda existant. J'ai essayé avec --drive=qemu mais il indique qu'il n'est pas pris en charge.

Deuxièmement, je ne "vois" le lecteur nouvellement ajouté qu'une fois que j'ai redémarré la machine virtuelle exécutant Ubuntu 10.04.4 LTS. Comment puis-je rendre le lecteur "hotplug"? Je veux que la machine virtuelle "voit" le nouveau disque immédiatement sans redémarrage.

24
Daniele Testa

J'aimerais commencer par une note que vous devez éviter d'utiliser virsh attach-disk avec son nombre limité d'options. Au lieu de cela, je suggère de spécifier le format de disque exact que vous préférez dans un fichier XML temporaire séparé ou en utilisant l'application GUI virt-manager (pour ce dernier, ignorez la première étape).

  1. Créez un fichier temporaire avec une définition de disque comme celui-ci ci-dessous.

    ajustez les propriétés en fonction de votre situation

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

    Conseil: jetez un œil à votre configuration de domaine XML actuelle et copiez un <disk> section à partir de là.

    virsh dumpxml <domainname>
    
  2. Maintenant, avant d'ajouter le disque à un domaine actuel, assurez-vous que les modules de noyau hotplug requis sont chargés dans l'invité.

    Certaines distributions Linux comme les récents CentOS/RHEL/Fedora ont ce intégré dans le noyau. Dans ce cas, recherchez CONFIG_HOTPLUG_PCI_ACPI. Si c'est y, alors vous êtes prêt et vous pouvez ignorer cette étape.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Pensez à ajouter ces deux modules à /etc/modules si vous voulez qu'ils soient chargés au démarrage par défaut.

  3. Ajoutez-le au disque en cours d'exécution VM using

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

    Facultativement, ajoutez le --persistent option pour laisser Libvirt mettre à jour la définition XML du domaine 'persistante'.

  4. Enfin, vérifiez à l'intérieur de l'invité si le disque a bien été inséré à chaud. Le noyau doit être déclenché, comme cela peut être vérifié avec dmesg:

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

    Dans l'exemple ci-dessus, j'ai ajouté un disque en tant que vdb avec deux partitions dans la table de partition.

Références

31
gertvdijk