Libvirt/qemu/kvmを使用して、Debian Jessieを仮想マシンホストとして使用しています。
ホストOSの起動時に自動的に起動するように一部のゲスト仮想マシンを設定しましたが、これは正常に機能しています。
メンテナンスのため、私は"service libvirt-guests stop"
すべてのゲストをシャットダウンします(ホストはシャットダウンしません)。
メンテナンスが完了したら、(ホストを再起動せずに)すべてのゲストを簡単に再起動します。
すべてのゲストVMを再び起動する単一のコマンドはありますか?両方について知りたいです。
自動起動マークが付いたすべてのゲストを再び起動するコマンド
実行前に実行されていたすべてのゲストを再起動するコマンド"service libvirt-guests stop"
ホストOSを再起動すると1位になりますが、ホストを再起動したくありません。
私は試した、 "service libvirt-guests start"
しかし、それはそれをしていないようです。
@ jason-harrisソリューションのように。しかし、より単純で、開始は自動開始のみにマークされています。
for i in $(virsh list --name --autostart); do virsh start $i; done
PD: libvirt 3.2.0(CentOS 7.4.1708)でテストしました
それを行うための簡単なコマンドがあるとは思いません(しかし、それはすばらしいでしょう!)。
私はこれをかなり頻繁に行い、通常は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ループでラップされています。
#! /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
で実行可能にします。
私が使う systemctl restart libvirtd.service
。 CentOS 7(ホスト)に問題なく動作します。
オンDebian Stretch:
systemctl restart libvirtd
しませんでした仕事をします。 Libvirtは実際にサービスを再起動しましたが、すべてのqemu
プロセスとOSの内部は実行され続けました。
これ動作:
systemctl stop libvirt-guests # stops VMs
systemctl restart libvirtd # starts VMs agains
KVM_AutoBoot( https://github.com/eduardolucioac/kvm_autoboot )を使用して、サーバーブート時にKVM(libvirt)。仮想マシンの起動から次の起動までの間隔を定義することもできます。
注:KVM_AutoBootは希望どおりに正確に応答しませんが、KVMを自動的に起動するために使用できますサーバーの起動時または起動時にリストで定義された仮想マシン(systemctl start kvm_autoboot.service
)。
ありがとう! = D