web-dev-qa-db-ja.com

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

Libvirt/qemu/kvmを使用して、Debian Jessieを仮想マシンホストとして使用しています。

ホストOSの起動時に自動的に起動するように一部のゲスト仮想マシンを設定しましたが、これは正常に機能しています。

メンテナンスのため、私は"service libvirt-guests stop"すべてのゲストをシャットダウンします(ホストはシャットダウンしません)。

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

すべてのゲストVMを再び起動する単一のコマンドはありますか?両方について知りたいです。

  1. 自動起動マークが付いたすべてのゲストを再び起動するコマンド

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

ホストOSを再起動すると1位になりますが、ホストを再起動したくありません。

私は試した、 "service libvirt-guests start"しかし、それはそれをしていないようです。

4
LaVache

@ jason-harrisソリューションのように。しかし、より単純で、開始は自動開始のみにマークされています。

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

PD: libvirt 3.2.0(CentOS 7.4.1708)でテストしました

5
mmv-ru

それを行うための簡単なコマンドがあるとは思いません(しかし、それはすばらしいでしょう!)。

私はこれをかなり頻繁に行い、通常はforループとawkを使用した簡単なスクリプト/ 1行のコマンドです。

ハイパーバイザーが他のハイパーバイザーに接続されている場合、そのリンクを一時的に切断して、他のハイパーバイザーの他のVMに不注意に干渉しないようにする必要がある場合があることに注意してください。実際にこれを利用する人はあまり見たことがありませんが、指摘したいと思います。

たとえば、すべてをオンに戻す場合は、次のように入力して、目的の結果を得ることができます。これはあなたがルートであることを前提としています:

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

不要な列を取り除き、仮想マシン名を含む列のみを印刷します。次に、実際には仮想マシンではないため、grepを使用してヘッダー行を取り出します。

virsh start $i

仮想マシンをオンにします。

そして、これはすべて一般的なforループでラップされています。

1
Jason Harris
#! /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ユーティリティが必要です(debianのxml2パッケージ内、そしておそらくubuntuでも)。

xml2を使用してlibvirtのqemu autostartディレクトリ内のすべてのXMLファイルからドメイン名を抽出し、それらがまだ実行されていない場合はvirsh startを実行します。

PATHのどこかにvirsh-autostart.sh(または意味のあるもの)として保存し、chmodで実行可能にします。

1
cas

私が使う systemctl restart libvirtd.service。 CentOS 7(ホスト)に問題なく動作します。

0
Ned64

オンDebian Stretch

systemctl restart libvirtd

しませんでした仕事をします。 Libvirtは実際にサービスを再起動しましたが、すべてのqemuプロセスとOSの内部は実行され続けました。

これ動作

systemctl stop libvirt-guests   # stops VMs
systemctl restart libvirtd      # starts VMs agains
0
Daniel Böhmer

KVM_AutoBoothttps://github.com/eduardolucioac/kvm_autoboot )を使用して、サーバーブート時にKVM(libvirt)。仮想マシンの起動から次の起動までの間隔を定義することもできます。

注:KVM_AutoBootは希望どおりに正確に応答しませんが、KVMを自動的に起動するために使用できますサーバーの起動時または起動時にリストで定義された仮想マシン(systemctl start kvm_autoboot.service)。

ありがとう! = D

0
Eduardo Lucio