KVM und Libvirt - Wie kann ich eine neue Virtio-Festplatte per Hotplug anschließen?

24

Ich versuche, einem aktiven virtuellen KVM-Server eine dateibasierte Festplatte im laufenden Betrieb hinzuzufügen. Ich habe mit dem Befehl eine neue Festplatte erstellt

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

und ich hatte gehofft, dass es dem Gast hinzugefügt wird, indem ich dies in der Virsh-Shell tue:

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

Die XML-Definition der Domäne lautet 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, wird der Treibername falsch, er sollte driver name='qemu'der vorhandene vdaDatenträger sein. Ich habe es mit versucht, --drive=qemuaber es gibt an, dass es nicht unterstützt wird.

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

Daniele Testa
quelle
1
Unabhängiger Vorschlag, verwenden Sie qemu-imgstatt dd- seine Argumente kommen natürlicher und macht das gleiche:qemu-img create test.img 5G
Chutz

Antworten:

31

Ich möchte mit einem Hinweis beginnen, den Sie virsh attach-diskmit seiner begrenzten Anzahl von Optionen vermeiden sollten . Stattdessen würde ich vorschlagen, das genaue von Ihnen bevorzugte Festplattenformat in einer separaten, temporären XML-Datei oder mithilfe der GUI-Anwendung von virt-manager anzugeben (für letztere überspringen Sie den ersten Schritt).

  1. Erstellen Sie eine temporäre Datei mit einer Datenträgerdefinition wie der folgenden.

    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: Werfen Sie einen Blick auf Ihre aktuelle XML-Domänenkonfiguration und kopieren Sie einen <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-Kernelmodule im Gast geladen sind.

    Einige Linux-Distributionen wie die jüngsten CentOS / RHEL / Fedora haben dies im Kernel eingebaut. Überprüfen Sie in diesem Fall, ob CONFIG_HOTPLUG_PCI_ACPI. Wenn yja, sind Sie fertig und können diesen Schritt überspringen.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Fügen Sie diese beiden Module hinzu, /etc/moduleswenn Sie möchten, dass sie standardmäßig beim Booten geladen werden.

  3. Fügen Sie die Festplatte mit der laufenden VM hinzu

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

    Optional können Sie die --persistentOption hinzufügen , dass Libvirt die XML-Domänendefinition "persistent" aktualisiert.

  4. Überprüfen Sie abschließend im Gast, ob der Datenträger tatsächlich Hotplug-fähig ist. Der Kernel sollte getriggert werden. Dies kann überprüft werden mit dmesg:

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

    Im obigen Beispiel habe ich einen Datenträger wie vdbbei zwei Partitionen in die Partitionstabelle aufgenommen.

Verweise

gertvdijk
quelle
Sollten Sie nicht auch hinzufügen --persistent, um sicherzustellen, dass diese Konfiguration nicht verloren geht, wenn Sie die virtuelle Maschine ausschalten?
Chutz