Virtual-Machine
virsh 預引導腳本
我正在執行一個需要 vfio 訪問 PCI 卡的虛擬機。使用這個腳本,我能夠成功地將 PCI 設備及其 iommu 組綁定到 vfio-pci,然後讓我啟動 VM:
./vfio-pci-bind.sh 0000:03:00.0
virsh start myvm
我想自動執行此操作,而不必每次都手動綁定到 vfio-pci。是否有某種預檢/預啟動腳本可以讓 virsh 在嘗試啟動虛擬機之前執行?
您可以使用libvirt 掛鉤在啟動或停止 VM 或網路時執行任意程序。
例如,您可以創建一個文件
/etc/libvirt/hooks/qemu
來確定您的 VM 是否被呼叫,然後執行任何需要執行的操作。#!/bin/bash if [ "$1" = "myvm" ] && [ "$2" = "prepare" ]; then /path/to/vfio-pci-bind.sh '0000:03:00.0' fi
@michael-hampton 有最正確的答案,但對於任何人的參考,我都很不耐煩,還做了一個名為
vfio-pci-bind.service
執行的 systemd 服務vfio-pci-bind.sh
:[Unit] Description=bind PCI card to vfio [Service] ExecStart=/opt/vfio-pci-bind/vfio-pci-bind.sh "0000:03:00.1" Type=oneshot RemainAfterExit=yes
然後我添加到
libvirt-guests.service
:[Service] ... Wants=vfio-pci-bind.service After=vfio-pci-bind.service
這個存在的問題
- 它依賴於 systemd 而不是獨立於 libvirt
- 它執行 vfio-pci-bind 而不管受影響的虛擬機是否會在啟動時實際啟動
所以是的,我將切換到 libvirt 掛鉤,感謝您的幫助!