Frage KVM und Libvirt - Wie kann ich eine neue Virtio-Festplatte hotpluggen?


Ich versuche, einen dateibasierten Datenträger einem laufenden KVM-Server hinzuzufügen. Ich habe eine neue Festplatte von Grund auf mit dem Befehl erstellt

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

und ich hatte gehofft, dass es dem Gast heiß gemacht wird, indem ich das in der Virsh Shell mache:

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

Die XML-Definition der Domäne wird dann:

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

Wie Sie sehen können, wird der Name des Treibers falsch, sollte es sein driver name='qemu' als das Bestehende vda Platte. Ich habe es versucht --drive=qemu aber es gibt an, dass es nicht unterstützt wird.

Zweitens "sehe" ich das neu hinzugefügte Laufwerk nur, wenn ich die virtuelle Maschine, auf der Ubuntu 10.04.4 LTS läuft, neu starte. Wie kann ich das Laufwerk "hotplug" machen? Ich möchte, dass die virtuelle Maschine das neue Laufwerk ohne Neustart sofort "sieht".


22
2017-12-11 23:22


Ursprung


Unzusammenhängender Vorschlag, Gebrauch qemu-img anstatt dd - seine Argumente kommen natürlicher und machen dasselbe: qemu-img create test.img 5G - chutz


Antworten:


Ich möchte mit einer Notiz beginnen, die Sie vermeiden sollten virsh attach-disk mit seiner begrenzten Menge an Optionen. Stattdessen würde ich vorschlagen, das gewünschte Plattenformat in einer separaten, temporären XML-Datei oder mit der virt-manager GUI-Anwendung anzugeben (für den letzteren Schritt überspringen Sie den ersten Schritt).

  1. Erstellen Sie eine temporäre Datei mit einer Datenträgerdefinition mögen dieses hier unten.

    Passen Sie die Eigenschaften an Ihre Situation an

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

    Tipp: Sehen Sie in Ihre aktuelle XML-Domänenkonfiguration und kopieren Sie ein <disk> Abschnitt von dort.

    virsh dumpxml <domainname>
    
  2. Stellen Sie jetzt vor dem Hinzufügen der Festplatte zu einer aktuellen Domäne sicher, dass die erforderlichen Hotplug-Kernel-Module in den Gast geladen sind.

    Einige Linux-Distributionen wie CentOS / RHEL / Fedora haben dies im Kernel integriert. In diesem Fall prüfen Sie nach CONFIG_HOTPLUG_PCI_ACPI. Wenn es yDann sind Sie fertig und Sie können diesen Schritt überspringen.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Erwägen Sie, diese beiden Module hinzuzufügen /etc/modules wenn Sie möchten, dass sie beim Booten standardmäßig geladen werden.

  3. Fügen Sie den Datenträger der laufenden VM mit hinzu

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

    Optional, fügen Sie das hinzu --persistent Option, damit Libvirt die Domänen-XML-Definition 'persistent' aktualisiert.

  4. Überprüfen Sie schließlich den Gast, ob die Festplatte tatsächlich Hotplug-eingelegt wurde. Der Kernel sollte getriggert werden, wie mit geprüft werden kann dmesg:

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

    Im obigen Beispiel habe ich eine Diskette als hinzugefügt vdb mit zwei Partitionen in der Partitionstabelle.

Verweise


28
2017-12-11 23:43



Sollten Sie nicht auch hinzufügen --persistent um sicherzustellen, dass diese Konfiguration beim Ausschalten der virtuellen Maschine nicht verloren geht? - chutz
@chutz ja, danke. aktualisierte meine Antwort. - gertvdijk