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. 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)

おすすめ記事