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 후크로 전환하겠습니다. 도움을 주셔서 감사합니다!