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


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 à l'invité en faisant ceci 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 constater, le nom du pilote devient faux, il devrait être driver name='qemu' comme l'existant vda disque. J'ai essayé avec --drive=qemu mais il est indiqué qu'il n'est pas pris en charge.

Deuxièmement, je ne "vois" que le lecteur nouvellement ajouté une fois que je redémarre la machine virtuelle exécutant Ubuntu 10.04.4 LTS. Comment puis-je faire le lecteur "hotplug"? Je veux que la machine virtuelle "voie" le nouveau lecteur immédiatement sans redémarrage.


22
2017-12-11 23:22


origine


Suggestion sans rapport, utilisation qemu-img au lieu de dd - ses arguments sont plus naturels et font la même chose: qemu-img create test.img 5G - chutz


Réponses:


J'aimerais commencer par une note que vous devriez éviter d'utiliser virsh attach-disk avec sa quantité limitée d'options. Au lieu de cela, je suggérerais de spécifier le format de disque exact que vous préférez dans un fichier XML temporaire distinct ou à l'aide de l'application d'interface graphique virt-manager (pour ce dernier, ignorez la première étape).

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

    ajustez les propriétés à 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 coup d’œil dans la configuration de votre domaine XML actuel et copiez un fichier. <disk> section à partir de là.

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

    Certaines distributions Linux, comme les récentes CentOS / RHEL / Fedora, intègrent cette fonctionnalité dans le noyau. Dans ce cas, vérifiez CONFIG_HOTPLUG_PCI_ACPI. Si c'est y, alors vous êtes tous ensemble et vous pouvez ignorer cette étape.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Envisagez d’ajouter ces deux modules à /etc/modules si vous voulez 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 de

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

    Ajoutez éventuellement le --persistent option permettant à Libvirt de 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


28
2017-12-11 23:43



Ne devriez-vous pas aussi ajouter --persistent vous assurer que cette configuration ne soit pas perdue lorsque vous éteignez la machine virtuelle? - chutz
@chutz oui, merci. mis à jour ma réponse. - gertvdijk