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 패키지, 우분투 패키지에 있음).

xml2libvirt의 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

관련 정보