KVM i Libvirt - Jak mogę podłączyć nowy dysk Virtio?

24

Próbuję dodać dysk oparty na plikach do działającego serwera wirtualnego KVM. Utworzyłem nowy dysk od zera za pomocą polecenia

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

i miałem nadzieję, że zostanie to dodane do gościa na gorąco, robiąc to w powłoce virsh:

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

Definicja XML domeny staje się wtedy:

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

Jak widać, nazwa sterownika staje się błędna, tak powinno być driver name='qemu' jak istniejący vdadysk. Próbowałem z, --drive=qemuale stwierdza, że ​​nie jest obsługiwany.

Po drugie „widzę” nowo dodany dysk dopiero po ponownym uruchomieniu maszyny wirtualnej z systemem Ubuntu 10.04.4 LTS. Jak mogę ustawić dysk jako „hotplug”? Chcę, aby maszyna wirtualna natychmiast „zobaczyła” nowy dysk bez ponownego uruchamiania.

Daniele Testa
źródło
1
Niepowiązana sugestia, użyj qemu-imgzamiast dd- jej argumenty stają się bardziej naturalne i robią to samo:qemu-img create test.img 5G
chutz

Odpowiedzi:

31

Chciałbym zacząć od notatki, której powinieneś unikać przy virsh attach-diskograniczonej liczbie opcji. Zamiast tego sugeruję określenie dokładnego formatu dysku w osobnym, tymczasowym pliku XML lub za pomocą aplikacji GUI virt-manager (w tym drugim przypadku pomiń pierwszy krok).

  1. Utwórz plik tymczasowy z definicją dysku taką jak ta poniżej.

    dostosuj właściwości do swojej sytuacji

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

    Wskazówka: zajrzyj do bieżącej konfiguracji domeny XML i <disk>stamtąd skopiuj sekcję.

    virsh dumpxml <domainname>
    
  2. Teraz, przed dodaniem dysku do bieżącej domeny, upewnij się, że wymagane moduły jądra hotplug są załadowane do gościa.

    Niektóre dystrybucje Linuksa, takie jak najnowsze CentOS / RHEL / Fedora, mają tę wbudowaną funkcję w jądrze. W takim przypadku sprawdź CONFIG_HOTPLUG_PCI_ACPI. Jeśli tak y, to wszystko gotowe i możesz pominąć ten krok.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Rozważ dodanie tych dwóch modułów, /etc/modulesjeśli chcesz, aby były ładowane domyślnie podczas rozruchu.

  3. Dodaj dysk do działającej maszyny wirtualnej, używając

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

    Opcjonalnie dodaj --persistentopcję, aby Libvirt zaktualizował definicję XML domeny jako „trwałą”.

  4. Na koniec sprawdź, czy dysk rzeczywiście został włożony w trybie hotplug. Jądro powinno zostać uruchomione, co można sprawdzić za pomocą dmesg:

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

    W powyższym przykładzie dodałem dysk vdbz dwiema partycjami w tablicy partycji.

Referencje

gertvdijk
źródło
Czy nie powinieneś również dodać, --persistentaby upewnić się, że ta konfiguracja nie zginie po wyłączeniu maszyny wirtualnej?
chutz 12.12.12