virsh 사전 시작 스크립트

virsh 사전 시작 스크립트

PCI 카드에 대한 vfio 액세스가 필요한 가상 머신을 실행하고 있습니다. 사용이것PCI 장치와 해당 iommu 그룹을 vfio-pci에 성공적으로 바인딩할 수 있었던 스크립트를 통해 가상 머신을 시작할 수 있었습니다.

  1. ./vfio-pci-bind.sh 0000:03:00.0
  2. 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 후크로 전환하겠습니다. 도움을 주셔서 감사합니다!

관련 정보