저는 libvirt/qemu/kvm을 사용하여 Debian Jessie를 가상 머신 호스트로 사용하고 있습니다.
호스트 OS가 부팅될 때 자동으로 시작되도록 일부 게스트 VM을 설정했는데 제대로 작동합니다.
유지 관리를 위해 "service libvirt-guests stop"
모든 게스트를 종료하려고 합니다(호스트는 제외).
유지 관리가 완료된 후 (호스트를 다시 시작하지 않고) 모든 게스트를 쉽게 다시 시작하고 싶습니다.
모든 게스트 VM을 다시 시작하는 명령이 있습니까? 나는 다음 두 가지 모두에 대해 배우고 싶습니다.
자동으로 시작된 모든 태그된 게스트를 다시 시작하는 명령
실행하기 전에 실행 중이던 모든 게스트를 다시 시작하는 명령
"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
유틸리티가 필요합니다( xml2
debian 패키지, 우분투 패키지에 있음).
xml2
libvirt의 qemu 자동 시작 디렉토리에 있는 모든 XML 파일에서 도메인 이름을 추출하고 virsh start
아직 실행되고 있지 않은 경우 이를 실행하는 데 사용됩니다 .
경로의 어딘가 virsh-autostart.sh
(또는 귀하에게 적합한 것)에 저장하고 사용 가능하게 만드세요 chmod
.
답변3
나는 이것을 수행하는 간단한 명령이 있다고 믿지 않습니다(그러나 그것은 좋을 것입니다!).
나는 항상 이 작업을 수행합니다. 일반적으로 for 루프와 awk 빠른 스크립트/한 줄 명령을 사용합니다.
하이퍼바이저가 다른 하이퍼바이저에 연결되어 있는 경우 다른 하이퍼바이저에 있는 다른 가상 머신을 실수로 방해하지 않도록 링크를 일시적으로 끊어야 할 수도 있습니다. 실제로 사용하는 사람을 많이 본 적은 없지만 이 점을 지적하고 싶었습니다.
예를 들어, 모든 항목을 다시 열고 싶다고 가정하면 다음을 입력하여 원하는 결과를 얻을 수 있습니다. 이는 귀하가 루트라고 가정합니다.
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
존재하다데비안 스트레치:
systemctl restart libvirtd
아니요일을 하세요. Libvirt는 실제로 서비스를 다시 시작하지만 모든 qemu
프로세스와 운영 체제 내부는 계속 실행됩니다.
이것일했다:
systemctl stop libvirt-guests # stops VMs
systemctl restart libvirtd # starts VMs agains