[Xen 가상화 1] Windows 7 hvm guest on Ubuntu 14.4 LTS, Xen 4.4.1 - 설치 및 설정 가이드
2015년 현재, Opensource Xen이나 Citrix XenServer+XenCenter, VMWare ESX+vSphere, Oracle VM Server 등의 많은 가상화 Solution들이 있다. 본 편에서는 현존 대다수 가상화 솔루션들의 근간이 되는, Opensource Xen을 활용한 가상화 실습 시에 가장 필수적으로 밟아 나가는 단계를 정리해 두려 한다. 염두에 두고 있는 것은 Ubuntu와 OpenSuse 를 각각 Host로 하고 Windows 7 과 CentOS Server 를 각각 Guest 로 하는 조합으로 대략 3~4가지의 시리즈를 써 나가는 것이다.
본 편에서는 그 첫 번째 Case로, Ubuntu 14.4 LTS 를 Host(Dom0)로 한 Xen 환경에서 Windows 7 VM을 사용하기 위한 방법과 과정을 정리해 나가고자 한다. 단, 가상화 솔루션이 "어떻게 작동하는지"의 이해에 도움이 되도록, 각 과정을 수동으로 직접 다루며, 최대한 GUI 관리 툴 등은 사용하지 않는 것이 본 포스팅들의 특별한 의도도 생각하면 되겠다.
전체적인 과정을 간단히 나열하면 다음과 같다.
* Ubuntu 14.4 LTS Desktop 설치 - Host OS 준비
* Host 를 Xen Dom0 로 사용할 수 있도록 하는 필수 과정들
* VM에 Guest OS(Windows 7) 을 설치하고 사용, 운영하는 방법과 과정
이제 각 단계 별로 실제 작업을 차근차근 수행해 보자.
1. Ubuntu 14.4 LTS 설치 - Host OS 준비
* 준비물: Ubuntu 14.4 LTS Desktop, 64 bit의 iso 파일을 내려 받아 구운 DVD-ROM(http://www.ubuntu.com/download/desktop 참조)
Windows계열이든 Linux 계열이든 OS를 설치하는 과정은 크게 다르지 않다. 설치 화면을 "잘 보고 따라 가면" 된다! 만약 주의 사항이 있다면 따로 Post-it 같은 메모지를 써서 기록해 두는 방법을 애용하자. 아마도 내 말이 피가 되고 살이 됨을 나중에 느끼게 될 지도 모를 일이다.
* OS 설치시 가상화 등의 추가 옵션은 따로 지정하지 않고, Default 옵션만으로 진행한다.
* 본 글에서는 vm을 설치할 볼륨이 스파스(sparse) 파일이 될 것이므로, Host OS에 마운트 되는 볼륨의 경우 /(root) 볼륨은 20~100 GB 가량, /home 볼륨은 200GB~400GB 이상 여유 있게 잡는다. vm OS 가 설치된 볼륨 파일들을 /home 내에 하위 디렉토리를 만들고 체계적으로 관리하기 위함이다.
* 한글/영문 입력이 가능하도록 설정하고, 인터넷 접속이 가능하도록 네트워크 설정까지 완료한다.
* 추후에 linux guest vm으로 양방향 ssh 접속/운영이 가능하도록 다음과 같이 설정해 둔다
$ su -
# apt-get install ssh
# vi /etc/ssh/sshd_config -> 아래 항목을 찾아서 yes 로 변경한다.
PermitRootLogin yes
# service ssh restart
2.Host 를 Xen Dom0 로 사용할 수 있도록 하는 필수 과정들
* 이번 단계에서는 Xen 관련 패키지 설치, VM 네트워킹을 위한 bridge 설정, 부팅 시 Xen kernel 이 로딩되도록 grub 설정 등의 작업을 수행한다.
* 과정을 단순하게 하기 위해 모든 패키지는 바이너리 형태로 설치된다. 즉 source 를 다운로드하여 빌드하는 방식으로 설정하는 경우에 꼭 써야 하는 apt-get build-dep, .configure, make && make install 등의 명령이나 스크립트의 실행 등은 사용하지 않아도 된다.
# apt-get install xen-hypervisor-4.4-amd64 xen-utils-4.4
# apt-get install qemu-kvm libvirt-bin libvirt-dev virt-manager virtinst vncviewer
# adduser $USER libvirtd
* Xen networking 에서 가장 중요한 부분. 여기서는 첫 번째 NIC(eth0)를 Xen 에서 사용할 bridge로 설정한다.
# vi /etc/network/interfaces -> 구조에 맞게 적당히 수정(dhcp 를 사용하지 않는 경우는 dhcp 대신 static 으로)
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
...
# vi /etc/xen/xend-config.sxp -> uncomment 처리
(network-script network-bridge)
# vi /etc/default/xen -> xl 로 되어 있는지 확인(기본 툴스택이 xm 에서 보다 향상된 최근 xl 로 업그레이드 되어 있음)
TOOLSTACK=xl
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="" # dom0_mem=512 dom0_max_vcpus=1 dom0_vcpus_pin 와 같이 튜닝 가능
GRUB_CMDLINE_LINUX_DEFAULT=""
# cd /etc/grub.d
# mv 10_linux 21_linux -> 부팅 순서에 20_linux_xen 이 먼저 배치되도록 변경
# sync
# reboot
* Host 의 네트웍이 정상 작동 하는지, 브리지 설정이 제대로 되어 있는지 점검한다.
# ping google.com
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes
xenbr0 8000.d0505602a73d no eth0
* 아래의 xl 실행 결과를 볼 수 있다면, 설정된 Xen 가상화 환경이 잘 작동하는 것으로 보고 다음 단계 수행
# xl info
host : Ubuntu-desktop
release : 3.16.0-38-generic
version : #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015
machine : x86_64
nr_cpus : 4
max_cpu_id : 3
nr_nodes : 1
cores_per_socket : 4
threads_per_core : 1
cpu_mhz : 3399
hw_caps : bfebfbff:2c100800:00000000:00007f00:77fafbff:00000000:00000021:00002fbb
virt_caps : hvm hvm_directio
total_memory : 12207
free_memory : 8559
sharing_freed_memory : 0
sharing_used_memory : 0
outstanding_claims : 0
free_cpus : 0
xen_major : 4
xen_minor : 4
xen_extra : .1
xen_version : 4.4.1
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset :
xen_commandline : placeholder
cc_compiler : gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
cc_compile_by : stefan.bader
cc_compile_domain : canonical.com
cc_compile_date : Wed May 20 12:19:20 UTC 2015
xend_config_format : 4
3.VM에 Guest OS(Windows 7) 을 설치하고 사용, 운영하는 방법과 과정
* 준비물: Windows 7 이 설치 가능한 CD 또는 DVD의 iso 파일, /root/vmos_images/win7.iso 로 복사해 둔다.
* 이번 단계에서는 VM을 설치하기 위한 가상 볼륨(Sparse 파일)을 준비하고, 실제로 guest os인 Windows 7을 설치, Xen을 통해 구동하고 사용하는 방법을 기술한다.
# mkdir -p /home/vmimage/win7
# cd /home/vmimage/win7
# dd if=/dev/zero of=./win7.img bs=4k count=1 seek=8M -> 30GB 가량의 빈 파일 생성
* Windows 계열 OS 는 일반적으로 전가상화(Full virtualization, HVM) 방식을 쓴다
# vi win7.cfg
# WINDOWS 7 CONFIGURATIONS for Xen
# - Installation: Ubuntu 14.4 LTS, Xen 4.4.1 guest
builder = 'hvm'
vcpus = 2
memory = 4096
#Disks
disk = [
'file:/home/vmimage/win7/win7.img,ioemu:hda,w',
'file:/root/vmos_images/win7.iso,ioemu:hdc:cdrom,r'
]
#Hostname
name = 'windows7-1'
# Networking
vif = ['type=ioemu,mac=00:16:3E:*:*:*,bridge=xenbr0']
# Behavior
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
on_xend_stop='shutdown'
# VNC
vnc=1 # Enable VNC
vncconsole=0 # Don’t start vncviewer after “create” the domain
vncunused=0 # Don’t automatically assign unused port based on domain id
vncdisplay=2 # VNC Port Number to be added to “5900”. e.g.: vncdisplay=2 : port=5902
# So, invoke "vncviewer 127.0.0.1::5902 &" after "create" domU
# Boot: d(cdrom) - to install Windows into the image file or target volume
# After installation, change it as 'c' or 'cd'
boot='d'
#boot='cd'
# Mouse cursor sync in vncviewer
usb=1
usbdevice='tablet'
# Set video ram for HiRes
stdvga=1
videoram=16
* Xen에 의해 vm이 생성되고, 설정 파일(win7.cfg) 에서 지정된 가상볼륨 파일(win7.img)에 windows 7 이 설치되는 과정
# xl create win7.cfg
Parsing config from win7.cfg
# vncviewer 127.0.0.1::5902 &
# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 3482 4 r----- 4430.5
windows7-1 14 4096 4 -b---- 71.1
- Barracuda -