Virtual-Machine

virsh 預引導腳本

  • May 7, 2019

我正在執行一個需要 vfio 訪問 PCI 卡的虛擬機。使用這個腳本,我能夠成功地將 PCI 設備及其 iommu 組綁定到 vfio-pci,然後讓我啟動 VM:

  1. ./vfio-pci-bind.sh 0000:03:00.0
  2. 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 掛鉤,感謝您的幫助!

引用自:https://unix.stackexchange.com/questions/513902