공유 스토리지를 사용하지 않고 두 KVM 호스트간에 VM을 이동하는 올바른 방법이 무엇인지 궁금합니다.
디스크 파일과 XML 덤프를 소스 KVM 시스템에서 대상으로 복사하면 충분합니까? 그렇다면 대상에서 vm을 가져 오기 위해 어떤 명령을 실행해야합니까?
OS는 Dom0과 DomU 모두에서 우분투입니다.
미리 감사드립니다
공유 스토리지를 사용하지 않고 두 KVM 호스트간에 VM을 이동하는 올바른 방법이 무엇인지 궁금합니다.
디스크 파일과 XML 덤프를 소스 KVM 시스템에서 대상으로 복사하면 충분합니까? 그렇다면 대상에서 vm을 가져 오기 위해 어떤 명령을 실행해야합니까?
OS는 Dom0과 DomU 모두에서 우분투입니다.
미리 감사드립니다
답변:
/var/lib/libvirt/images
src 호스트 의 VM 디스크를 대상 호스트의 동일한 디렉토리로 복사virsh dumpxml VMNAME > domxml.xml
하고이 xml을 대상 호스트에 복사하십시오.virsh define domxml.xml
VM을 시작하십시오.
virsh net-dumpxml > netxml.xml
및 virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
)./dev/mapper/vgname-lvname
있다
아직 언급 할 수 없으므로이 부록을 dyasny의 답변에 다음과 같이 게시해야합니다.
VM에 보존하려는 virsh snapshot-dumpxml $dom $name > file.xml
스냅 샷이있는 경우 VM의 스냅 샷 목록에서 각 스냅 샷에 대해 소스의 스냅 샷 xml 파일을 덤프해야합니다 virsh snapshot-list --name $dom
.
그런 다음 대상 virsh snapshot-create --redefine $dom file.xml
에서 스냅 샷 마이그레이션을 완료하는 데 사용하십시오.
현재 스냅 샷이 어떤 스냅 샷인지에 관심이있는 경우 소스
virsh snapshot-current --name $dom
및 대상에서 추가로 수행 하십시오.
virsh snapshot-current $dom $name
그런 다음 virsh snapshot-delete --metadata $dom $name
각 스냅 샷에 대해 소스에서 xml 파일을 삭제하거나 다음에서 삭제할 수 있습니다./var/lib/libvirt/qemu/snapshots/$guestname
출처 :
예. XML 파일과 가상 디스크 이미지 만 복사하면 충분하지만 "실시간"마이그레이션은 불가능합니다. 이 절차 중에 VM을 종료해야합니다.
대상에 복사 한 libvirtd
후 새 XML 파일을 인식하려면 다시로드하거나 다시 시작해야합니다.
virsh
입니다. 파일을 직접 복사하고 다시로드 libvirtd
합니다.
이 지침은 LVM 제공 디스크를 사용하는 VM에 적용되며 Python이 각 호스트에 있다고 가정합니다.
https://gist.github.com/rcoup/1338263 에서 blocksync.py 스크립트를 다운로드 하여 / home / user 폴더에 소스 및 대상 호스트를 모두 배치하십시오.
또한 두 머신 모두에서 '루트'에 대한 '스도'액세스 권한이 있어야합니다.
또는 모든 것을 루트로 수행 할 수 있지만, ssh 키가 최소한 대상 시스템에 대한 루트 액세스 권한을 제공하는 경우에만 가능합니다. **이 경우 명령 행에서 사용자 이름을 제거하십시오.
ssh user@chewie.domainname.com.au
sudo virsh --all
sudo virsh dumpxml larry> larry.xml
덤프 된 정의를 새 시스템 ( "대상"호스트)에 복사하십시오. 예 :
scp -p larry.xml 10.10.10.38:larry.xml내부 IP를 대상 dom0 서버 이름으로 변경할 수 있습니다. ** 참고 : 대상의 IP 주소를 사용하는 것이 가장 좋습니다. 예 :
scp -p larry.xml 사용자 @ 10.10.10.38 : larry.xml
키로 인해 복사 할 수없는 경우 고양이 larry.xml을 복사 한 다음 다른 시스템으로 ssh하여 파일을 작성하여 붙여 넣을 수 있습니다.
다음을 사용하여 VM 디스크의 크기와 이름을 찾으십시오.
sudo lvs-단위 B.
LV VG Attr LSize 풀 오리진 데이터 % 메타 % 이동 로그 Cpy % Sync 변환 lv_root vg1 -wi-ao ---- 53687091200B lv_swap vg1 -wi-ao ---- 17179869184B vm_vsrv1 vg1 -wi-ao ---- 193273528320B vm_vsrv10 vg1 -wi-ao ---- 64424509440B vm_vsrv11 vg1 -wi-ao ---- 161061273600B vm_vsrv12 vg1 -wi-ao ---- 204010946560B vm_vsrv2 vg1 -wi-ao ---- 140110725120B vm_vsrv3 vg1 -wi-ao ---- 128849018880B vm_larry vg1 -wi-ao ---- 69793218560B vm_vsrv5 vg1 -wi-ao ---- 257698037760B vm_vsrv6 vg1 -wi-ao ---- 64424509440B vm_vsrv7 vg1 -wi-ao ---- 161061273600B vm_vsrv8 vg1 -wi-ao ---- 64424509440B vm_vsrv9 vg1 -wi-ao ---- 214748364800B
ls -l / dev / vg1 / vm_larrylrwxrwxrwx입니다. 1 루트 루트 8 1 월 31 일 13:57 / dev / vg1 / vm_larry-> ../dm-11
ssh user@darth.domainname.com.au
다음과 같은 볼륨 정의 파일을 작성하십시오.
vi larry.domainname.com.au-vol.xml또는
나노 larry.domainname.com.au-vol.xml참고-원래 VM에서 크기를 바이트 단위로 가져 와서 아래 스크립트에 넣어야합니다. 크기에 대한 소스 시스템의 명령은 sudo lvs --units B입니다.
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
참고 :이 정의는 VM larry에 대한 69793218560 바이트 디스크에 대한 것이며 실제 VM에 필요한대로 변경하십시오.
참고 : 경로의 이름과 마지막 부분이 일치해야하며 새 디스크 이름으로 사용됩니다.
다음을 사용하여 정의에서 새 디스크를 작성하십시오.
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
larry.domainname.com.au-vol.xml에서 생성 된 Vol larry.domainname.com.au라고 표시됩니다.
디스크 장치 파일을 액세스 가능하게 만드십시오.
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
다음과 같이 복사 된 xml 정의를 편집하십시오.
vi larry.xml
파일에서 디스크 정의를 찾고 ( "source dev ="검색) 장치를 방금 생성 한 것으로 바꾸십시오 (vm을 보려면 ls / dev / centos / 가능). 예 : / dev / drbd4-> / dev / centos / larry.domainname.com.au
** 인터페이스 스탠자에서 "br1"에 대한 참조를 찾아서 "br0"으로 변경하십시오. 예를 들어 소스 브릿지를 변경하여 라인은 다음과 같습니다.
소스 호스트에 로그인하십시오. 예 :
ssh user@chewie.domainname.com.au
가장 좋은 방법은 최종 동기화를 수행하기 전에 소스 호스트에서 VM을 종료하는 것이지만 수행 할 필요는 없습니다. (버디 셧다운 NameOfMachine)
소스 호스트에없는 경우 https://gist.github.com/rcoup/1338263 에서 blocksync.py 스크립트를 다운로드 하십시오.
사용자 이름이 사용자 인 경우 (예 : blocksync.py 스크립트를 두 시스템 모두 / home / user 및 chown user : user 및 chmod 755 스크립트로 복사)
scp -p blocksync.py user@10.10.10.38 : blocksync.py
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
참고 : 첫 번째 장치 이름은 'lvs'명령에서 결정된 소스 호스트의 이름입니다. 이것은 [[chewie]] 소스 호스트에서 온 것입니다.
참고 :이됩니다 파괴 대상 디스크의 내용을 /dev/mapper/centos-larry.domainname.com.au가 정확한지 확인!
참고 : 동기화는 기가 바이트 당 약 100 초, 즉 60 기가 바이트 디스크의 경우 90 분이 소요됩니다.
그러나 VM을 사용하는 동안 동기화를 수행 할 수 있습니다. 후속 동기화는 최대 25 % 빨라질 수 있습니다
스크립트는 사용중인 매개 변수를 인쇄합니다 (더 이상 사용되지 않는 모듈에 대한 메시지가있을 수 있습니다). 다음으로, 사용중인 ssh 명령을 표시하고이를 실행합니다 (이 작업을 수행 할 때 권한이있는 직원에게만 메시지가 표시됨). 동기화하는 동안 실행 된 총 블록 수와 평균 속도가 표시됩니다. 마지막으로 완료 시간 (초)과 함께 완료 메시지를 인쇄합니다.
CTRL C와의 동기화를 취소 한 후 명령을 다시 실행하여 나중에 다시 시작할 수 있습니다.
ssh user@darth.domainname.com.au
virsh는 larry.xml을 정의합니다
sudo virsh start 래리
sudo virsh 자동 시작 larry
참고 : 새 환경에 맞게 VM의 세부 정보를 변경해야 할 수도 있습니다.
이전 KVM 서버 두 대 에서이 문제가 발생했지만 실제로 발생하면 성가 시며 설치된 VM에 문제가 발생할 수 있습니다. 필자의 경우 디스크 공간이 느리게 소모되어 VM 중 하나를 정기적으로 재설정 상태로 푸시했습니다. 아래 지침은 KVM / Distro 버전에 다소 민감합니다. 제 경우에는 CentOS 7.5가 있습니다.
CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3
기본적으로 KVM 이미지는 / var / lib / libvirt / images / 위치에 있습니다.
이 virsh 목록을 사용하려면 VM의 이름을 찾아야합니다.
virsh list
Id Name State
----------------------------------------------------
12 VM-Name paused
VM virsh 중지 VM-Name 중지
나를 위해 이동하지 않고 파일을 먼저 복사합니다. qcow 파일을 새 위치로 복사
cp /var/lib/libvirt/images/VM-Name.qcow2 /home/VMImages/
새 "소스 파일"위치를 참조하도록 VM xml 파일을 편집하십시오. virsh edit VM-Name
이 파일을 "소스 파일"로 변경하려고합니다.
libvirtd 서비스를 다시 시작하십시오.
service libvirtd restart
그런 다음 VM을 다시 시작하면 좋습니다.
virsh start VM-Name