KVM / libvirt / virt-manager VM을 복제하는 방법은 무엇입니까?


13

virt-manager / libvirt / KVM으로 조금 잃어 버렸습니다.

작동하는 KVM VM (Windows XP)이 잘 작동합니다.

VM은 4GB 파일 ( .img ) 로 백업됩니다 .

이제 매우 간단한 작업을 수행하려고합니다. VM을 복제하고 싶습니다.

"문제 없습니다. 4GB 파일을 복사하고 XML을 복사하겠습니다" 라고 생각했습니다 .

그러나 libvirt FAQ는 모든 대문자로 표시됩니다. "XML이 저장된 곳에는 신경 쓰지 말아야합니다."

libvirt FAQ

알았어, 상관 없어 그러나 어떻게 내 VM을 복제합니까?

해당 VM의 복사 본인 새 VM을 만들고 싶습니다.

답변:


4

virsh서버의 XML 정의를 편집, 내보내기 및 가져올 수 있습니다. 내가 사용하는 것이 virt-clone복제 된 이미지 파일을 생성하고 XML을 내보낼 수 있습니다. 안전을 위해 원래 서버에서 복제 구성을 제거합니다.


42

가장 편리한 방법은 다음과 같습니다.

# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone

this-vm,의 이름 을 가진 사본을 만들고 that-vm저장 장치 복제를 처리합니다. 세부 사항 외에는 새로운 것이 없습니다.

더 중요한 것은 FAQ가 말하는 것은 XML 도메인 설명을 직접 편집 할 수 없다는 것 입니다. libvirt 를 거쳐야 합니다 . virt-clone명령으로 수행 된 단계를 완료하기 위해 다음을 수행 할 수 있습니다.

source_vm=vm_name
new_vm=new_vm_name

# You cannot "clone" a running vm, stop it.  suspend and destroy
# are also valid options for less graceful cloning
virsh shutdown "$source_vm"

# copy the storage.
cp /var/lib/libvirt/images/{"$source_vm","$new_vm"}.img

# dump the xml for the original
virsh dumpxml "$source_vm" > "/tmp/$new_vm.xml"

# hardware addresses need to be removed, libvirt will assign
# new addresses automatically
sed -i /uuid/d "/tmp/$new_vm.xml"
sed -i '/mac address/d' "/tmp/$new_vm.xml"

# and actually rename the vm: (this also updates the storage path)
sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"

# finally, create the new vm
virsh define "/tmp/$new_vm.xml"
virsh start "$source_vm"
virsh start "$new_vm"

이것은 VM을 다른 호스트로 복사하는 경우에도 작동합니다. cp 대신 sftp를 사용하고 (가능한 경우) 새 vm을 '정의'하기 전에 이미지 경로를 변경하고 sftp도 다른 호스트에 해당 vm.xml을 변경하십시오.
Andreas Florath

덕분에 시간을 많이 절약 할 수있었습니다. 내가 가진 문제는 복제 대 새로운 것을 만드는 것입니다. 새 노드를 만들면 패키지 버전이 로컬 미러를 사용하는 다른 노드와 동기화되지 않을 수 있습니다.
Mike Purcell

virt-clone전체 디스크 암호화를 올바르게 처리 합니까 ? 의미, 그것은 그것을하기 전에 내 암호 해독 암호를 요구합니까?
코더

나는 데비안 파생물 sed에서 sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"거나 적어도 누락 된 후행 /을 불평 한다고 생각합니다 . 정보도 주셔서 감사합니다. 내 virsh-clone은 전혀 작동하지 않았습니다.
number9

3

"virt-clone"이외의 방법으로 VM을 복제 할 수 있습니다.

  1. 기존 VM (중복 될)이 종료되었는지 확인하십시오.
  2. 기존 VM의 "sudo virsh dumpxml <domid>"를 수행하고 출력 xml 파일을 저장하십시오.
  3. <domain> 태그 아래에서 <name> 태그를 수정하십시오.
  4. "uuidgen"을 사용하여 새로운 고유 ID를 생성하고이를 사용하여 기존 <uuid> 태그를 수정하십시오.
  5. VM에서 사용하는 기존 qcow 가상 이미지의 복사본을 만듭니다 (보통 / var / lib / libvirt / images에 저장되지만 정확한 위치는 XML 파일을 읽으십시오). 명령은 "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2"이며 XML 파일에 새 파일 yyyy.qcow2를 입력하십시오.
  6. 새 VM을 시작하십시오. sudo virsh define new.xml
  7. 새 domid를 시작하십시오 : sudo virsh start <new_domid>



0

분명히 virt-clone 은 갈 길입니다.

XML을 복제하려고 시도했지만 virt-manager에 나타나지 않습니다.

여전히 XML + .img를 새로운 시스템으로 전송할 수있는 방법이 궁금합니다 ...


0

다음 명령이 나를 위해 일했습니다 (명령을 실행하기 전에 VSA / Vm을 종료해야합니다)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone

1
의사 VM 이름을 제외하고 이것은 3 년 된 답변의 명령과 동일하지만 해당 답변의 보충 정보가 없습니다.
G-Man, 'Reinstate Monica'라고

0

virt-clone --auto-clone은 LVM에서 잘 작동하지 않는 것 같습니다. 스냅 샷을 만들어서 사용할 것을 기대했지만 대신 모든 데이터를 복사합니다.

dumpxml / define 경로를 수행하는 것이 좋습니다. 원본과 클론을 시작하기 전에 클론의 루트 파일 시스템을 마운트하고 IP 주소와 호스트 이름을 적절히 변경해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.