Xen에서 Guest 디스크 이미지를 만드는 방법


Xen에서 Guest 디스크 이미지를 만드는 방법
이번 글에서는 Xen에서 Guest 디스크 이미지를 생성하고 실행하는 방법에 대해서 설명드리도록 하겠습니다.

Xen 사용법 Guest 생성 방법 예제

위의 지난 글에서는 전가상화(HVM)를 이용하여 iso파일로 부터 부팅하여, Guest 운영체제를 설치하는 방법에 대해서 설명드렸습니다.
그리고 직접 파티션 또는 파일 디스크를 생성 한 뒤에 Guest 설정 파일을 만들어 줘야 했습니다.

하지만 이번 글에서는 하지만 iso 파일이 없어도 간편하게 파일 디스크 이미지와 설정 파일을 생성하는 방법에 대해서 설명 드리도록 하겠습니다.
xen-tools 패키지에서 지원되는 xen-create-image 라는 명령어를 이용하면 간편하게 guest 이미지와 반가상화(PV) Guest 설정 파일을 생성할 수 있습니다.

1.패키지 설치

먼저 xen-tools 패키지가 설치되지 않았으면, 아래의 명령어로 패키지를 설치해 주시기 바랍니다.

$ sudo apt-get install xen-tools

그리고 아래와 같은 명령어를 실행하면 상당히 많은 명령어들이 지원 된다는 것을 알 수 있습니다. 출력 결과는 생략하도록 하겠습니다.

$ sudo xen-create-image --help

2. 디스크 이미지 생성

아래의 명령어는 메모리 용랑이 2GB 이고, 하드디스크 사이즈가 20GB로 우분투 16.04(xenial)의 이미지를 생성하는 명령어 입니다.
생성된 디스크 이미지는 /data/xen 위치에 저장되게 됩니다.

$ sudo xen-create-image --hostname=guest --dhcp --memory=2048mb --size=20gb --pygrub --dist=xenial --dir=/data/xen

General Information
--------------------
Hostname       :  guest
Distribution   :  xenial
Mirror         :  http://archive.ubuntu.com/ubuntu
Partitions     :  swap            128M  (swap)
                  /               20gb  (ext3)
Image type     :  sparse
Memory size    :  2048mb
Bootloader     :  pygrub

Networking Information
----------------------
IP Address     : DHCP [MAC: 00:16:3E:DC:C5:4A]

WARNING
-------
Loopback module not loaded and you're using loopback images
Run the following to load the module:

modprobe loop max_loop=255

Creating partition image: /data/xen/domains/guest/swap.img
Done

Creating swap on /data/xen/domains/guest/swap.img
Done

Creating partition image: /data/xen/domains/guest/disk.img
Done

Creating ext3 filesystem on /data/xen/domains/guest/disk.img
Done
Installation method: debootstrap
Done

Running hooks
Done

No role scripts were specified.  Skipping

Creating Xen configuration file
Done

No role scripts were specified.  Skipping
Setting up root password
Generating a password for the new guest.
All done

Logfile produced at:
	 /var/log/xen-tools/guest.log

Installation Summary
---------------------
Hostname        :  guest
Distribution    :  xenial
MAC Address     :  00:16:3E:DC:C5:4A
IP Address(es)  :  dynamic
SSH Fingerprint :  SHA256:x/rQpc1R605y6XOkE21O+uN53dRwiXKLpQody1a5Df0 (DSA)
SSH Fingerprint :  SHA256:Op9x667DJmpMyR3HgWyBuakxPwAiQJd+0rBzg8H0jwE (ECDSA)
SSH Fingerprint :  SHA256:O3BfnFBtAVomXywCsGeBW6hEtXVyWIgJnD/UsMYoAi8 (ED25519)
SSH Fingerprint :  SHA256:aA/L8Qzmcn9s197keaWL5xZ5a77Br71ktBcwSXTnM+w (RSA)
Root Password   :  gyqF46g299tU2sU2GUU2gyS

디스크 이미지 생성과정에서 시간이 다소 소요될 수 있습니다.

하지만, 아래의 명령어를 사용하면, 실시간으로 설치로 그를 바로 확인 할 수 있습니다.
위의 xen-create-image 명령어를 실행한 창에서는 명령어가 종료될 때까지 기다리고, 새로운 창에서 아래의 명령어를 실행합니다.

$ sudo tail -f /var/log/xen-tools/guest.log
.. 생략 ..
I: Configuring debconf-i18n...
I: Configuring whiptail...
I: Configuring libgnutls30:amd64...
I: Configuring libgnutls-openssl27:amd64...
I: Configuring apt...
I: Configuring resolvconf...
I: Configuring iputils-ping...
.. 생략 ..

출력되는 내용을 확인하시다가 마지막에 Root Password 부분이 나타나면 디스크 이미지 생성이 완료된 것입니다.
따라서, 로그를 확인하는 창에서 ctrl+c 버튼을 입력하여 tail 명령어를 종료합니다.

3. Guest 생성

기본적으로 xen-create-image 명령어로 생성된 설정 파일은 반가상화(PV) Guest를 생성하는 설정파입니다. 위치는 /etc/xen/guest.cfg 위치에 저장됩니다. 다음과 같은 내용이 저장된 것을 확인 할 수 있습니다.

#
# Configuration file for the Xen instance guest, created
# by xen-tools 4.6.2 on Sat Mar  3 16:23:22 2018.
#

#
#  Kernel + memory size
#
bootloader = '/usr/lib/xen-4.6/bin/pygrub'

vcpus       = '1'
memory      = '2048'

#
#  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                  'file:/data/xen//domains/guest/disk.img,xvda2,w',
                  'file:/data/xen//domains/guest/swap.img,xvda1,w',
              ]
#
#  Hostname
#
name        = 'guest'

#
#  Networking
#
dhcp        = 'dhcp'
vif         = [ 'mac=00:16:3E:DC:C5:4A' ]

#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

위의 설정 파일을 참고하여, 원하시는 설정을 추가 하시면 됩니다.
HVM 형태로 수정하신다음 부팅 하실 수도 있으며, 메모리 및 CPU등 추가 설정이 가능합니다.

마지막으로 Guest 생성은 아래의 명령어로 실행하실 수 있습니다.

$ sudo xl create -c /etc/xen/guest.cfg

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)