PCIカードへのvfioアクセスを必要とする仮想マシンを実行しています。使用これPCIデバイスとそのiommuグループをvfio-pciに正常にバインドできたスクリプトを使用して仮想マシンを起動できました。
./vfio-pci-bind.sh 0000:03:00.0
virsh start myvm
私は毎回vfio-pciに手動でバインドする必要なしにそれを自動化したいと思います。 VMを起動する前にvirshが実行できるpreflight / prebootスクリプトの一種はありますか?
答え1
あなたはそれを使用することができますlibvirt フック仮想マシンまたはネットワークの起動または停止時にランダムプログラムを実行します。
たとえば、ファイルを作成して仮想/etc/libvirt/hooks/qemu
マシンが呼び出されていることを確認し、必要なすべての操作を実行できます。
#!/bin/bash
if [ "$1" = "myvm" ] && [ "$2" = "prepare" ]; then
/path/to/vfio-pci-bind.sh '0000:03:00.0'
fi
答え2
@michael-hamptonが最も正解を持っていますが、参考までに私は辛抱強く、次vfio-pci-bind.service
のシステムサービスを作成しました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フックに切り替えます。助けてくれてありがとう!