Host OS: Ubuntu 14.04.1 Desktop (amd64)
Host OS (이동 대상): Ubuntu 14.04 Server (amd64)
Guest OS: Windows 10 (64-bit)
개인 PC에서 개인용 윈도우10 VM 하나를 만들어서 KVM에서 돌리다가, PC의 디스크 속도가 받쳐주질 못해서 서버에 옮기기로 했다.
원래 개인 PC에서 VM을 쓰려고 했던 이유는 guest OS에 원격접속할 때 네트워크 지연 시간을 극단적으로 줄이려는 목적이었고, 실제로 지연 시간은 매우 적었지만 물리적인 하드디스크 1개에서 host OS (Ubuntu)와 guest OS (Windows 10)를 모두 써 보니 전체적인 속도가 느려지고 말았다. 안 그래도 디스크를 많이 쓰는 경향이 있는데 SSD도 아니라서 bottleneck이 되고 말았다. 그래서 같은 건물에 있어서 어차피 LAN의 범위 안에 있는 자원이 충분한 서버에 VM을 옮기기로 했다.
VirtualBox처럼 간단하게 이미지 파일만 복사하면 되는 것 같지는 않아서 찾아본 결과, 나와 같은 목적으로 VM을 다른 호스트 머신에 복사해서 성공한 사례가 있었다. [1]
정리하면:
1. clone 명령으로 옮길(==복사할) 이미지를 만든다. 사실은 새로 안 만들고 바로 옮겨도 될 것 같다.
즉, 굳이 복사할 필요성을 못 느낀다면 원래 있던 VM 이름과 이미지 파일 위치, xml 파일 위치를 기억해 두고 바로 2번부터 시작한다.
# virt-clone --original=[원래 있던 VM 이름] --name=[새로 만들 VM 이름] -f [생성할 img 파일 위치] --mac [랜카드 맥주소]
예를 들어,
# virt-clone --original=testvm1 --name=newvm -f /var/lib/libvirt/images/skylit_newvm.img --mac 00:12:34:56:78:90
2. 기존 호스트 머신에서 방금 생성한 img 파일과 설정 파일(xml)을 새로운 호스트 머신에 옮긴다.
서로 네트워크로 연결돼 있다면 scp를 쓰는 게 제일 빠를 듯. 일반적으로 virt-manager에 의해서 생성되는 VM 이미지가 저장되는 위치는 /var/lib/libvirt/images/ 이다. (루트 권한으로만 접근 가능)그리고 xml파일은 /etc/libvirt/qemu/ 에 [새로 만든 VM 이름].xml 로 생성된다.
예를 들어, 아래 두 파일을 새로운 호스트 머신으로 옮긴다.
- /var/lib/libvirt/images/newvm.img
- /etc/libvirt/qemu/newvm.xml
3. 새로운 호스트 서버의 콘솔에서, virt-manager에서 인식할 수 있도록 새로 옮긴 VM 이미지를 추가한다.
$ virsh define /etc/libvirt/qemu/[옮겨온 VM 이름].xml
4. 이제 virt-manager를 실행하면 목록에 방금 옮겨온 VM 이름이 추가되어 있음을 확인할 수 있다.
<주의사항>
옮겨 가는 새로운 호스트 머신의 KVM 설정에 따라서 기존 호스트 머신에서 설정한 것이 작동하지 않을 수도 있다.
대표적으로 CPU 설정, 메모리 용량, display 설정 등이 있다.
- CPU는 가상 CPU로 특정 모델(e.g. Intel SandyBridge)을 지정해 두었는데 새로운 호스트 머신에서 해당 CPU 모델을 가상화하지 못할 수 있으므로, CPU 프로파일을 한번 확인해 볼 필요는 있다.
- 메모리의 경우, [1] 에서도 언급되었듯이 물리적인 전체 메모리 용량을 넘어서는 등의 자원 할당 문제가 있는지 살펴봐야 한다.
- Display의 경우, 필자는 기존 호스트 머신에서 SPICE 프로토콜을 썼는데 옮겨 가는 새로운 호스트 머신에 SPICE를 설치해 두지 않아서 virt-manager를 통해서는 화면을 볼 수 없었다. 하지만 네트워크 관련 설정에 문제가 없어서 원격 접속하는 데에는 문제가 없었다.
<참고자료>
[1] http://serverfault.com/questions/399835/clone-kvm-qemu-vm-to-a-different-server
'IT > Linux' 카테고리의 다른 글
XRDP 기존 세션 재활용하기 (1) | 2016.05.19 |
---|---|
SCP에 찍히는 실시간 전송속도를 로그로 저장하기 (script 활용) (3) | 2016.05.13 |
부팅 때마다 interface name (eth1, wlan0, wlan1 등)이 바뀌는 문제 해결방법 (0) | 2016.04.07 |
tcpdump를 여러 네트워크 인터페이스에 대하여 실행 (0) | 2016.03.02 |
SSH로 X11 forwarding 되도록 로그인할 때 .Xauthority 오류 해결법 (0) | 2016.02.03 |