KVM - 라이브 외부 스냅샷 및 적절한 디스크 이름

KVM - 라이브 외부 스냅샷 및 적절한 디스크 이름

실행 중인 KVM 게스트의 외부 스냅샷을 찍으려면 다음과 같은 명령을 실행합니다.

# create the directory for the snapshot data
mkdir /vms/$DOMAIN/snapshots/$SNAPSHOT_NAME

# create the snapshot
virsh snapshot-create-as \
--domain $DOMAIN $SNAPSHOT_NAME \
--diskspec vda,file=/vms/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2,snapshot=external \
--memspec file=/vms/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

내 VM이 호출되고 새로 설치한 직후 스냅샷을 찍기 위해 vm1내 스냅샷이 호출된 경우 다음과 같은 폴더 구조를 가질 수 있습니다.base-installation

/
|- vms/
   |- vm1/
      |- disk.qcow2
      |- snapshots/
           |-base-installation/
               |-disk.qcow2
               |-mem

이제 구조는 내가 원하는 대로 되었지만 불행하게도 disk.qcow2파일의 방향이 잘못되었습니다(교체해야 함). 스냅샷 폴더 disk.qcow2의 파일은 base-installation실제로 스냅샷을 생성할 당시의 디스크 상태를 나타내는 필수 읽기 전용 백업 파일이 아니라 가상 머신에 대한 향후 모든 쓰기에 사용되는 오버레이 디스크 이미지입니다. 이 폴더 바로 아래에 있는 disk.qcow2 파일은 vm1최근 덮어쓴 디스크 이미지가 아닌 읽기 전용 백업 파일입니다.

질문

virsh snapshot-create-as읽기 전용 지원 파일을 지정된 disk-spec경로에 저장하고 덮어쓰기 포인터 디스크 파일을 원래 위치에 두도록 명령을 변경하는 방법이 있습니까 ? 또는 VM "일시 중지", 디스크 파일 교환, 게스트의 xml 정의 업데이트 및 VM 복원과 같은 해결 방법이 있습니까? 이상적으로는 방문자를 차단하거나 상당한 가동 중지 시간을 초래하고 싶지 않습니다.

답변1

메타데이터에서 스냅샷을 제거하고 "실제" 스냅샷을 수행하기 전에 중간 "스냅샷"을 수행하고 해당 스냅샷으로 블록 풀을 수행하여 해결 방법을 찾았습니다. 그러면 오버레이 이미지가 시작된 위치로 돌아가고 데이터가 위치합니다. 스냅샷 폴더에 있습니다. 조금 번거롭고 앞으로 더 나은 기본 솔루션이 있기를 바라지만, 저처럼 기다릴 수 없다면 아래 단계를 자세히 설명하겠습니다.

속도

먼저 설정을 적절하게 설정하십시오.

# Your settings may vary
DOMAIN="guest1"
SNAPSHOT_NAME="base-installation"
VMS_DIR="/vms" 

이제 스냅샷 데이터를 저장할 디렉터리를 생성합니다.

mkdir -p $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME

이제 방금 생성한 스냅샷 디렉터리에 오버레이 이미지를 생성할 중간 스냅샷을 생성합니다.

virsh snapshot-create-as \
--domain $DOMAIN intermediary_snapshot \
--diskspec vda,file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2,snapshot=external \
--memspec file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

노트:가상 머신에서 ping을 실행 중인데 명령이 실행되는 동안 핑이 잠시만 일시 중지되는 것 같습니다.

이제 blockpull을 사용하여 백업 파일의 데이터를 스냅샷 디렉터리의 활성 오버레이 이미지로 이동합니다.

virsh blockpull \
--domain $DOMAIN \
--path $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2 \
--wait \
--verbose

노트:당신은해야합니다아니요명령에 인수를 제공하십시오 --base. 그렇지 않으면 아무 작업도 수행하지 않습니다. 왜냐하면 인수를 지정하면 --base명령이 지정된 기본을 기본 디렉터리로 유지하고 기본 디렉터리가 아닌 중간 계층(우리가 가지고 있지 않은)만 병합하기 때문입니다. 그 자체.

이전 명령을 수행하는 데 약 30초가 걸렸지만 VM은 그 시간 동안 행복하게 핑을 실행했습니다.

ls -alh스냅샷 디렉터리를 표시하는 이미지 disk.qcow2의 크기는 이제 2.2GB이지만 더 중요한 것은 qemu-img info disk.qcow2이제 백업 파일이 표시되지 않으므로 이제 모든 데이터가 스냅샷 디렉터리에 있으며 "독립 실행형 이미지"라는 것을 알 수 있습니다.

이제 이 중간 스냅샷 단계에 대한 지식을 제거하여 메타데이터를 정리합니다.

virsh snapshot-delete \
--domain $DOMAIN \
intermediary_snapshot \
--metadata

이제 더 이상 필요하지 않은 원본 지원 파일과 절대 사용하지 않을 중간 memspec 파일도 제거했습니다.

rm $VMS_DIR/$DOMAIN/disk.qcow2
rm $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem

이 시점에서 인스턴스를 종료한 다음 수동으로 시작하여 문제가 없는지, 모든 것이 제대로 작동하는지 테스트했습니다.

이 시점에서 모든 "준비"가 완료되었다고 생각할 수 있습니다. 이제 스냅샷만 찍으면 됩니다. 단, 오버레이 이미지가 최상위 $DOMAIN 디렉터리에 있고 memspec 파일이 스냅샷 폴더에 있음을 지정해야 합니다. 백업 디스크 이미지 옆에 있습니다.

virsh snapshot-create-as \
--domain $DOMAIN $SNAPSHOT_NAME \
--diskspec vda,file=$VMS_DIR/$DOMAIN/disk.qcow2,snapshot=external \
--memspec file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

그게 다야!

스토리지에 미치는 영향

위의 단계를 계속 반복하여 많은 스냅샷을 만들면 각 스냅샷 폴더의 다른 파일에 의존하지 않고 완전히 복구 가능한 스냅샷을 얻게 되지만 이는 많은 공간을 낭비하게 된다는 점에 유의할 필요가 있습니다. 후속 스냅샷의 경우 매개변수 변경 명령을 사용 blockpull하여 --base각 스냅샷이 이전 스냅샷을 병합하는 대신 백업 이미지로 사용하도록 할 수 있습니다 .

스냅샷 복원

스냅샷 목록을 실행하면 새로운 스냅샷을 볼 수 있습니다. 그러나 외부 스냅샷 복원이 아직 지원되지 않기 때문에 해당 명령을 실행할 수 없으므로 virsh snapshot-revert(적어도 제가 사용하고 있는 ubuntu 16.04에서는 지원되지 않음) 현재 활성화된 오버레이 이미지를 삭제하여 수동으로 수행해야 합니다...

rm $VMS_DIR/$DOMAIN/disk.qcow2

그런 다음 복원하려는 스냅샷 기본 이미지에서 새 오버레이 이미지를 만듭니다.

qemu-img create \
-b $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2 \
-f qcow2 \
$VMS_DIR/$DOMAIN/disk.qcow2

이제 게스트를 시작할 수 있습니다.

sudo virsh start $DOMAIN

불행히도 나는 이 답변에서 빠진 가장 큰 점인 memspec 파일을 사용하는 방법을 찾지 못했습니다.

인용하다

모든 것을 이해하려고 노력하는 과정에서훌륭한 게시물 fedorapeople.org이것은 제가 가장 유용하다고 생각하는 외부 스냅샷을 병합하는 방법을 설명합니다.

관련 정보