이것은 Ask Ubuntu에 대한 내 질문과 관련이 있습니다.virt-manager에서 QEMU/KVM 가상 머신에 물리적 파티션 추가(필요한 경우 마지막에 있는 "업데이트"를 참조하십시오).
virt-manager에서 가상 머신을 부팅할 때마다 호스트에서 임의 스크립트를 실행하는 좋은 방법이 있습니까?
/dev/sda1
그 이유는 ESP 파티션 (호스트 시스템에 마운트된 대로 /boot/efi
)을 자동으로 마운트 해제하고 VM의 전원이 꺼지면 다시 마운트하고 싶기 때문입니다 .
[업데이트] 내가 사용하고 있는 스크립트여기에서 찾을 수 있습니다.
답변1
스크립트 이름
현재 호출할 수 있는 후크 스크립트는 5개입니다.
/etc/libvirt/hooks/daemon
libvirt 데몬이 해당 구성을 시작, 중지 또는 다시 로드할 때 실행됩니다.
/etc/libvirt/hooks/qemu
QEMU 게스트가 시작, 중지 또는 마이그레이션될 때 실행됩니다.(...)
스크립트 매개변수
후크 스크립트는 수행 중인 스크립트 및 작업에 따라 특정 명령줄 인수를 사용하여 호출됩니다.
(...)
명령줄 인수는 다음 접근 방식을 취합니다.
첫 번째 매개변수는 이름입니다.목적작업에 참여하거나 그렇지 않은 경우 "-"입니다.
예를 들어, 시작되는 게스트의 이름입니다.두 번째 매개변수는 이름입니다.작업실행 중입니다.
예를 들어 게스트가 시작되는 경우 "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
손님의 이름입니다 .
추신: 이것은 실제로 의견입니다. 형식 문제로 인해 답변으로 남겨두고 있습니다.