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

24

J'essaie d'ajouter à chaud un disque basé sur des fichiers à un serveur virtuel KVM en cours d'exécution. J'ai créé un nouveau disque à partir de zéro en utilisant 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 shell virsh:

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 erroné, il doit s'agir driver name='qemu'du vdadisque existant . J'ai essayé avec --drive=qemumais il indique qu'il n'est pas pris en charge.

Deuxièmement, je ne "vois" le lecteur nouvellement ajouté qu'après avoir 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.

Daniele Testa
la source
1
Suggestion indépendante, utilisez à la qemu-imgplace de dd- ses arguments sont plus naturels et font la même chose:qemu-img create test.img 5G
chutz

Réponses:

31

J'aimerais commencer par une note que vous devriez éviter d'utiliser virsh attach-diskavec 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 celle-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 une <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, vérifiez CONFIG_HOTPLUG_PCI_ACPI. Si c'est le cas y, vous êtes prêt et vous pouvez ignorer cette étape.

    modprobe acpiphp
    modprobe pci_hotplug
    

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

  3. Ajoutez le disque à la machine virtuelle en cours d'exécution à l'aide

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

    Facultativement, ajoutez l' --persistentoption pour permettre à Libvirt de mettre à jour la définition XML de 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 comme vdbavec deux partitions dans la table de partition.

Les références

gertvdijk
la source
Ne devriez-vous pas également ajouter --persistentpour vous assurer que cette configuration ne se perd pas lorsque vous éteignez la machine virtuelle?
chutz