KVM dan Libvirt - Bagaimana cara hotplug disk virtio baru?

24

Saya mencoba untuk menambahkan file berbasis disk ke server virtual KVM yang sedang berjalan. Saya telah membuat disk baru dari awal menggunakan perintah

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

dan saya berharap untuk menambahkannya ke tamu dengan melakukan ini di shell virsh:

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

Definisi XML dari domain tersebut kemudian menjadi:

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

Seperti yang Anda lihat, nama pengemudi menjadi salah, seharusnya begitu driver name='qemu' seperti vdadisk yang ada . Saya sudah mencoba --drive=qemutetapi menyatakan tidak didukung.

Kedua, saya hanya "melihat" drive yang baru ditambahkan setelah saya reboot mesin virtual yang menjalankan Ubuntu 10.04.4 LTS. Bagaimana saya bisa membuat drive "hotplug"? Saya ingin mesin virtual "melihat" drive baru segera tanpa reboot.

Daniele Testa
sumber
1
Saran yang tidak terkait, gunakan qemu-imgsebagai ganti dd- argumennya menjadi lebih alami dan melakukan hal yang sama:qemu-img create test.img 5G
chutz

Jawaban:

31

Saya ingin memulai dengan catatan bahwa Anda harus menghindari penggunaan virsh attach-diskdengan jumlah opsi yang terbatas. Sebagai gantinya, saya sarankan untuk menentukan format disk persis yang Anda inginkan dalam file XML sementara yang terpisah atau dengan menggunakan aplikasi GUI virt-manager (untuk yang terakhir, lewati langkah pertama).

  1. Buat file sementara dengan definisi disk seperti ini di bawah ini.

    sesuaikan properti agar sesuai dengan situasi Anda

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

    Kiat: Mengintip konfigurasi domain XML Anda saat ini dan menyalin <disk>bagian dari sana.

    virsh dumpxml <domainname>
    
  2. Sekarang, sebelum menambahkan disk ke domain saat ini, pastikan modul kernel hotplug yang diperlukan dimuat di tamu.

    Beberapa distribusi Linux seperti CentOS / RHEL / Fedora baru-baru ini memiliki bawaan di dalam kernel. Dalam hal ini, periksa CONFIG_HOTPLUG_PCI_ACPI. Jika sudah y, maka Anda sudah siap dan Anda dapat melewati langkah ini.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Pertimbangkan untuk menambahkan kedua modul ini /etc/modulesjika Anda ingin mereka dimuat saat boot secara default.

  3. Tambahkan disk ke VM yang sedang berjalan menggunakan

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

    Secara opsional, tambahkan --persistentopsi untuk membiarkan Libvirt memperbarui definisi XML domain 'persisten'.

  4. Akhirnya, periksa di dalam tamu apakah disk itu memang dimasukkan dengan hotplug. Kernel harus dipicu, karena dapat diperiksa dengan dmesg:

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

    Dalam contoh di atas saya telah menambahkan disk seperti vdbdengan dua partisi di tabel partisi.

Referensi

gertvdijk
sumber
Bukankah sebaiknya Anda juga menambahkan --persistentuntuk memastikan konfigurasi ini tidak hilang ketika Anda mematikan mesin virtual?
chutz