Issue
Saat ingin menambahkan device seperti disk atau interface ke VM muncul error seperti berikut.
$ virsh attach-disk --domain domname --source /var/lib/libvirt/images/disk2.qcow2 --target vdb --targetbus virtio --cache none --config --live
error: Failed to attach disk
error: internal error: No more available PCI slots
Solution
Hal tersebut karena controller pci yang tersedia di VM telah terpakai sehingga perlu ditambakan slotnya.
Sebelum menambahkan PCI matikan terlebih dahulu VM di libvirt.
virsh shutdown domname
Selanjutnya cek machine type yang digunakan oleh VM. Terletak di bawah element <os>
seperti contoh berikut.
<os>
<type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
<boot dev='hd'/>
</os>
q35 machine type
Tipe q35
menggunakan controller pcie-root
dan untuk menambahkan perangkat PCI maka perlu menambahkan jumlah pcie-root-port
Edit konfigurasi XML pada domain VM
virsh edit domname
Kemudian tambahkan konfigurasi berikut dibawah controller pcie-root
lalu simpan.
<controller type='pci' model='pcie-root-port'/>
<controller type='pci' model='pcie-root-port'/>
Ini akan menambahkan dua perangkat PCI sehingga Anda bisa menambahkan dua disk atau interface ke dalam VM.
Hidupkan kembali VM lalu test kembali penambahan device.
virsh start domname
$ virsh attach-disk --domain domname --source /var/lib/libvirt/images/disk2.qcow2 --target vdb --targetbus virtio --cache none --config --live
Disk attached successfully
Jika Anda ingin menambahkan perangkat PCI lama, maka diperlukaan controller khusus seperti
<controller type='pci' model='pcie-to-pci-bridge'/>
i440fx (pc) machine type
Tipe i440fx
merupakan tipe lama yang menggunakan controller pci-root
. Tipe ini dapat menambahkan perangkat PCI lama sampai 31 slot.
Edit konfigurasi XML pada domain VM
virsh edit domname
Kemudian ubah konfigurasi machine
dibawah element <os>
menjadi pc-i440fx-6.2
<os>
<type arch='x86_64' machine='pc-i440fx-6.2'>hvm</type>
<boot dev='hd'/>
</os>
Anda dapat melihat tipe dan versi machine yang tersedia dengan perintah.
virsh capabilities
Kemudian hapus semua konfigurasi controller yang memakai pcie-root
dan pcie-root-port
lalu tambahkan controller pci-root
<controller type='pci' index='0' model='pci-root'/>
Hidupkan kembali VM lalu test kembali penambahan device.
virsh start domname
$ virsh attach-disk --domain domname --source /var/lib/libvirt/images/disk2.qcow2 --target vdb --targetbus virtio --cache none --config --live
Disk attached successfully