これは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ゲストが開始、停止、または移行されたときに実行されます。(...)
スクリプトパラメータ
フックスクリプトは、実行しているスクリプトと操作に応じて特定のコマンドライン引数を使用して呼び出されます。
(...)
コマンドライン引数は次のアプローチを取ります。
最初のパラメータは名前です。目的ジョブに参加するか、そうでない場合は「-」です。
たとえば、起動するゲストの名前です。2番目のパラメータは名前です。仕事実行中です。
たとえば、ゲストが起動した場合は「Start」です。(...)
/etc/libvirt/hooks/qemu
QEMU ゲストを開始する前に、3 か所で qemu フックスクリプトが呼び出されます。 1か所でも失敗した場合、ゲストは起動しません。 0.9.0以降、最初の場所はlibvirtがリソース表示を実行する前であり、このフックはDRBDや不足しているブリッジなどのlibvirtによって管理されていないリソースを割り当てることができます。これは... 呼ばれる:
/etc/libvirt/hooks/qemu guest_name prepare begin -
0.8.0以降、利用可能な2番目の場所は、libvirtがすべてのリソースの表示を完了したがまだゲストを起動していない後に発生し、次のように呼び出されます。
/etc/libvirt/hooks/qemu guest_name start begin -
3番目の位置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
ゲストの名前です。
PS:これは実際にコメントです。形式の問題のため、答えとして残しています。