これは、Ask Ubuntuでの私の質問に関連しています: virt-managerでQEMU/KVM仮想マシンに物理パーティションを追加 (必要に応じて、末尾近くの「アップデート」を参照してください)。
VMがvirt-managerから起動されるたびにホスト上で任意のスクリプトを実行する良い方法はありますか?
その理由は、ESPパーティション/dev/sda1
(ホストに/boot/efi
としてマウントされている)を自動的にアンマウントし、VMの電源がオフになっています。
[更新]私が使用していたスクリプト ここにあります 。
現在、呼び出すことができる5つのフックスクリプトがあります。
_
/etc/libvirt/hooks/daemon
_
libvirtデーモンが開始、停止、またはその構成を再ロードするときに実行されます_
/etc/libvirt/hooks/qemu
_
QEMUゲストが起動、停止、または移行されたときに実行されます(...)
スクリプト引数
フックスクリプトは、スクリプトと実行される操作に応じて、特定のコマンドライン引数で呼び出されます。
(...)
コマンドライン引数はこのアプローチを取ります:
最初の引数は、操作に関係するobjectの名前です。存在しない場合は「-」です。
たとえば、開始されているゲストの名前。2番目の引数は、実行中のoperationの名前です。
たとえば、ゲストが起動している場合は「start」。(...)
/ etc/libvirt/hooks/qemu
QEMUゲストが開始される前に、qemuフックスクリプトが3つの場所で呼び出されます。いずれかの場所で障害が発生した場合、ゲストは起動されません。 0.9.0以降の最初の場所は、libvirtがリソースのラベル付けを実行する前であり、フックは、DRBDや欠落しているブリッジなど、libvirtによって管理されていないリソースを割り当てることができます。これは次のように呼ばれます:
_/etc/libvirt/hooks/qemu guest_name prepare begin -
_2番目の場所(0.8.0以降で使用可能)は、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
_を再起動します。
完全なソリューションを https://gitlab.com/ranolfi/rvirtesp で利用できるようにしています。
補遺:この特定のユースケースでは、fstab
ファイルにオプションnoauto
を設定し、_x-systemd.automount
_および_x-systemd.device-timeout=<seconds>
_。 http://man7.org/linux/man-pages/man5/fstab.5.html および https://www.freedesktop.org/software/systemd/man/を参照してください。 systemd.automount.html 。