KVM e Libvirt - Come posso collegare a caldo un nuovo disco virtio?


24

Sto cercando di aggiungere a caldo un disco basato su file a un server virtuale KVM in esecuzione. Ho creato un nuovo disco da zero usando il comando

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

e speravo di aggiungerlo a caldo all'ospite facendo questo nella shell virsh:

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

La definizione XML del dominio diventa quindi:

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

Come puoi vedere, il nome del driver diventa errato, dovrebbe essere driver name='qemu'come il vdadisco esistente . Ho provato con --drive=qemuma afferma che non è supportato.

In secondo luogo, "vedo" l'unità appena aggiunta dopo il riavvio della macchina virtuale che esegue Ubuntu 10.04.4 LTS. Come posso rendere l'unità "hotplug"? Voglio che la macchina virtuale "veda" immediatamente la nuova unità senza riavviare.


1
Suggerimento non correlato, usa qemu-imginvece di dd- i suoi argomenti diventano più naturali e fanno la stessa cosa:qemu-img create test.img 5G
chutz

Risposte:


31

Vorrei iniziare con una nota che dovresti evitare di usare virsh attach-diskcon la sua quantità limitata di opzioni. Invece, suggerirei di specificare il formato esatto del disco che preferisci in un file XML temporaneo separato o utilizzando l'applicazione GUI di virt-manager (per quest'ultimo, salta il primo passaggio).

  1. Crea un file temporaneo con una definizione del disco come questa qui sotto.

    regola le proprietà per adattarle alla tua situazione

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

    Suggerimento: dai un'occhiata alla tua attuale configurazione del dominio XML e copia una <disk>sezione da lì.

    virsh dumpxml <domainname>
    
  2. Ora, prima di aggiungere il disco a un dominio corrente, assicurarsi che i moduli del kernel hotplug richiesti siano caricati nel guest.

    Alcune distribuzioni Linux come il recente CentOS / RHEL / Fedora hanno questo built-in nel kernel. In questo caso, verificare CONFIG_HOTPLUG_PCI_ACPI. Se lo è y, allora sei pronto e puoi saltare questo passaggio.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Prendi in considerazione l'aggiunta di questi due moduli /etc/modulesse desideri che vengano caricati all'avvio per impostazione predefinita.

  3. Aggiungere il disco alla VM in esecuzione utilizzando

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

    Facoltativamente, aggiungi l' --persistentopzione per consentire a Libvirt di aggiornare la definizione XML di dominio "persistente".

  4. Infine, controlla all'interno del guest se il disco è stato effettivamente inserito hotplug. Il kernel dovrebbe essere attivato, come può essere verificato con dmesg:

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

    Nell'esempio sopra ho aggiunto un disco come vdbcon due partizioni nella tabella delle partizioni.

Riferimenti


Non dovresti anche aggiungere --persistentper assicurarti che questa configurazione non vada persa quando spegni la macchina virtuale?
Chutz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.