libvirt:自動起動が有効なすべてのゲスト仮想マシンを起動するコマンド

libvirt:自動起動が有効なすべてのゲスト仮想マシンを起動するコマンド

私はlibvirt/qemu/kvmを使ってDebian Jessieを仮想マシンホストとして使用しています。

ホストOSの起動時に自動的に起動するように一部のゲストVMを設定しましたが、正常に動作します。

メンテナンスのために"service libvirt-guests stop"すべてのゲストを終了しようとしています(ホストは除く)。

メンテナンスが完了したら(ホストを再起動せずに)、すべてのゲストを簡単に再起動したいと思います。

すべてのゲストVMを再起動するコマンドはありますか?私は次の両方について学びたいと思います。

  1. 自動的に開始されたすべてのタグ付きゲストを再起動するコマンド

  2. 実行前に実行していたすべてのゲストを再起動するコマンド"service libvirt-guests stop"

ホストOSを再起動すると#1が達成されますが、ホストを再起動したくありません。

試してみましたが、"service libvirt-guests start"うまくいかないようです。

答え1

@jason-harrisソリューションと同じです。しかし、もっと簡単です。開始は自動開始として表示されます。

for i in $(virsh list --name --autostart --inactive); do virsh start "$i"; done

修正する:libvirt 3.2.0(CentOS 7.4.1708)でテストしました。 修正する:追加されました--inactiveコメントを残してくれた@lpaeenに感謝します。

答え2

#! /bin/bash

xmlfiles=( $(find /etc/libvirt/qemu/autostart/ -name '*.xml') )

for f in "${xmlfiles[@]}" ; do
  domain=$(xml2 < $f | awk -F= '$1 == "/domain/name" {print $2}')

  # only start domain if it's not already running
  if ! virsh list | grep -q " ${domain} .*running" ; then
    virsh start "$domain"
  #else
    # optionally reboot domain otherwise
    #virsh reboot "$domain"
  fi

done

スクリプトにはxml2ユーティリティが必要です(xml2debianパッケージ、Ubuntuパッケージにあります)。

xml2libvirtのqemu自動起動ディレクトリにあるすべてのXMLファイルからドメイン名を抽出し、virsh startまだ実行されていない場合はそれを実行します。

ルートのどこかvirsh-autostart.sh(またはあなたに適したもの)に保存して利用可能にしますchmod

答え3

私はこれを行う簡単なコマンドがあるとは信じていません(しかしそれは良いでしょう!)。

私はいつもこれを行います。通常、forループとawkクイックスクリプト/1行コマンドを使用します。

ハイパーバイザーが別のハイパーバイザーに接続されている場合は、別のハイパーバイザー内の他の仮想マシンを誤って妨げないように、リンクを一時的に切断する必要があるかもしれません。実際に使う人をたくさん見たことはありませんが、この点を指摘したかったです。

たとえば、すべてのアイテムを再度開こうとすると、次のように入力して目的の結果を得ることができます。これはあなたがルートだと仮定します。

for i in `virsh list --all|awk '{print $2}'|grep -v Name`; do virsh start $i; done

コマンドは次のように分類されます。

virsh list --all

電源が入っているかどうかに関係なく、すべての仮想マシンを表示します。

awk '{print $2}'|grep -v Name

不要な列を削除し、仮想マシン名を含む列のみを印刷します。その後、実際には仮想マシンではないので、ヘッダー行を把握します。

virsh start $i

仮想マシンの電源を入れます。

それはすべて共通のforループを中心に進みます。

答え4

存在するDebian ストレッチ:

systemctl restart libvirtd

いいえ仕事をしてください。 Libvirtは実際にサービスを再起動しますが、すべてのqemuプロセスとオペレーティングシステムの内部は引き続き実行されます。

これ働いた:

systemctl stop libvirt-guests   # stops VMs
systemctl restart libvirtd      # starts VMs agains

関連情報