virt-manager를 사용하여 가상 머신을 시작할 때 호스트에서 스크립트 실행

virt-manager를 사용하여 가상 머신을 시작할 때 호스트에서 스크립트 실행

이것은 Ask Ubuntu에 대한 내 질문과 관련이 있습니다.virt-manager에서 QEMU/KVM 가상 머신에 물리적 파티션 추가(필요한 경우 마지막에 있는 "업데이트"를 참조하십시오).

virt-manager에서 가상 머신을 부팅할 때마다 호스트에서 임의 스크립트를 실행하는 좋은 방법이 있습니까?

/dev/sda1그 이유는 ESP 파티션 (호스트 시스템에 마운트된 대로 /boot/efi)을 자동으로 마운트 해제하고 VM의 전원이 꺼지면 다시 마운트하고 싶기 때문입니다 .

[업데이트] 내가 사용하고 있는 스크립트여기에서 찾을 수 있습니다.

답변1

~에서libvirt: 특정 시스템 관리를 위한 후크:

스크립트 이름

현재 호출할 수 있는 후크 스크립트는 5개입니다.

  • /etc/libvirt/hooks/daemon
    libvirt 데몬이 해당 구성을 시작, 중지 또는 다시 로드할 때 실행됩니다.

  • /etc/libvirt/hooks/qemu
    QEMU 게스트가 시작, 중지 또는 마이그레이션될 때 실행됩니다.

(...)

스크립트 매개변수

후크 스크립트는 수행 중인 스크립트 및 작업에 따라 특정 명령줄 인수를 사용하여 호출됩니다.

(...)

명령줄 인수는 다음 접근 방식을 취합니다.

  1. 첫 번째 매개변수는 이름입니다.목적작업에 참여하거나 그렇지 않은 경우 "-"입니다.
    예를 들어, 시작되는 게스트의 이름입니다.

  2. 두 번째 매개변수는 이름입니다.작업실행 중입니다.
    예를 들어 게스트가 시작되는 경우 "Start"입니다.

(...)

/etc/libvirt/hooks/qemu

  • QEMU 게스트를 시작하기 전에 세 곳에서 qemu 후크 스크립트가 호출됩니다. 한 곳이라도 실패하면 게스트가 시작되지 않습니다. 0.9.0부터 첫 번째 위치는 libvirt가 리소스 표시를 수행하기 전이며, 이 후크는 DRBD 또는 누락된 브리지와 같이 libvirt에서 관리하지 않는 리소스를 할당할 수 있습니다. 이것은 ... 불리운다:
    /etc/libvirt/hooks/qemu guest_name prepare begin -

    0.8.0부터 사용 가능한 두 번째 위치는 libvirt가 모든 리소스 표시를 완료했지만 아직 게스트를 시작하지 않은 후에 발생하며 다음과 같이 호출됩니다.
    /etc/libvirt/hooks/qemu guest_name start begin -

    세 번째 위치 0.9.13은 QEMU 프로세스가 성공적으로 시작된 후에 나타납니다.
    /etc/libvirt/hooks/qemu guest_name started begin -

(...)


따라서 실제로는 다음과 같습니다.

/etc/libvirt/hooks/qemu(확장자 없음)

#!/bin/bash

if [[ $1 == "<domain_name>" ]] && [[ $2 == "start" || $2 == "stopped" ]]
then
  if [[ $2 == "start" ]]
  then
    # unmount logic here
  else
    # mount logic here
  fi
fi

물론 <domain name>마운트/마운트 해제 논리를 편집하고 구현한 다음 재부팅합니다 libvirtd.service.

또한 다음 사항도 잊지 마세요.chmod +x /etc/libvirt/hooks/qemu

완벽한 솔루션을 제공하고 있습니다https://gitlab.com/ranolfi/rvirtep.


하나부록fstab: 이 특정 사용 사례의 경우 옵션 설정 파일을 사용하는 것이 유용할 수 있으며 noauto 아마도 x-systemd.automount 및도 사용할 수 있습니다. 바라보다 x-systemd.device-timeout=<seconds>파일 시스템 테이블(5)그리고 systemd.automount(5).

답변2

스크립트의 더 짧은 변형입니다. 이것을 넣으십시오 /etc/libvirt/hooks/qemu:

#!/bin/bash

case $1:$2 in
win11:start)
    umount /boot/efi
    ;;
win11:stopped)
    mount /boot/efi
    ;;
esac

그리고 실행 가능하게 만드세요. win11손님의 이름입니다 .

추신: 이것은 실제로 의견입니다. 형식 문제로 인해 답변으로 남겨두고 있습니다.

관련 정보