가상화 · 7 min read · Dec 09, 2025

Debian Squeeze에서 Xen 4.0을 이용한 파라가상화 (AMD64)

Debian Squeeze에서 Xen 4.0을 이용한 파라가상화 (AMD64)

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

이 튜토리얼은 Debian Squeeze (6.0) 시스템 (AMD64)에 Xen 4.0을 설치하고 파라가상화된 게스트를 만드는 방법에 대한 단계별 지침을 제공합니다 (완전 가상화된 게스트, 즉 하드웨어 가상화 (HVM)와 혼동하지 마세요).

Xen을 사용하면 호스트 운영 체제 (dom0) 아래에서 게스트 운영 체제 (*nix 운영 체제인 Linux 및 FreeBSD와 같은) 즉 “가상 머신” 또는 domU를 생성할 수 있습니다. Xen을 사용하면 애플리케이션을 서로 독립적인 여러 가상 머신으로 분리할 수 있습니다 (예: 메일 서버용 가상 머신, 트래픽이 많은 웹사이트용 가상 머신, 고객의 웹사이트를 제공하는 또 다른 가상 머신, DNS용 가상 머신 등), 하지만 동일한 하드웨어를 여전히 사용할 수 있습니다. 이는 비용을 절감하고, 더 중요한 것은 보안이 더 강화됩니다. DNS 서버의 가상 머신이 해킹당하더라도 다른 가상 머신에는 영향을 미치지 않습니다. 또한 가상 머신을 한 Xen 서버에서 다른 서버로 이동할 수 있습니다.

이것이 여러분에게 작동할 것이라는 보장은 하지 않습니다!

1 사전 참고

저는 호스트 시스템 (dom0)으로서 hostname이 server1.example.com이고 IP 주소가 192.168.0.100인 Debian Squeeze 시스템 (x86_64)을 사용하고 있습니다. (i386 시스템인 경우 설정이 약간 다를 수 있습니다.) 가상 머신 (domU)에도 Debian Squeeze를 사용할 것입니다 (하지만 Ubuntu Maverick 게스트를 설치하고 싶다면 필요한 변경 사항도 보여드리겠습니다).

이 가이드는 이미지 기반 가상 머신과 LVM 기반 가상 머신을 설정하는 방법을 설명합니다.

2 Xen 설치

Xen을 설치하기 위해 우리는 간단히 다음을 실행합니다.

apt-get install xen-hypervisor xen-linux-system xen-utils xenstore-utils xenwatch xen-tools

그 후 /etc/modules를 열고 loop max_loop=64라는 줄이 있는지 확인합니다 (이 단계는 이미지 기반 가상 머신을 생성하려는 경우에만 필요합니다 - LVM 기반 가상 머신을 생성하려는 경우 이 단계를 건너뛸 수 있습니다):

vi /etc/modules

| [...] loop max_loop=64 |

다음으로 /etc/xen/xend-config.sxp를 엽니다…

vi /etc/xen/xend-config.sxp

… 그리고 (network-script ‘network-bridge antispoof=yes’) 줄의 주석을 제거하거나 추가하고 모든 다른 (network-script …) 줄에 주석을 추가합니다 (antispoof=yes는 VM이 사용할 수 없는 IP 주소를 사용할 수 없도록 방지하는 Xen 방화벽을 활성화합니다. 예를 들어, 게이트웨이 IP와 같은 주소입니다). 또한 (vif-script vif-bridge) 줄이 활성화되어 있는지 확인합니다:

| [...] (network-script 'network-bridge antispoof=yes') [...] (vif-script vif-bridge) [...] |

그런 다음 시스템을 재부팅합니다:

reboot

다음으로

uname -r

을 실행하면 새로운 Xen 커널이 표시되어야 합니다:

root@server1:~# uname -r
2.6.32-5-xen-amd64
root@server1:~#

이제

xm dmesg 

을 실행합니다. 출력이 다음과 같으면…

root@server1:~# xm dmesg
WARNING! Can’t find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?
root@server1:~#

… 이는 여러분이 Xen 준비 커널에서 실행 중이지만 Xen 하이퍼바이저 자체에서 실행 중이 아니라는 것을 의미합니다 (이는 가상 머신을 부팅할 수 없음을 의미합니다). 이를 변경하기 위해 커널의 부팅 순서를 다음과 같이 변경하고 GRUB 부트로더를 업데이트합니다:

mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub2

이렇게 하면 다음 번 부팅 시 Xen 하이퍼바이저가 로드됩니다.

다시 재부팅합니다:

reboot

그 후,

xm dmesg

은 하이퍼바이저가 실행 중임을 보여야 합니다:

root@server1:~# xm dmesg
(XEN) Xen version 4.0.1 (Debian 4.0.1-2) ( [email protected]) (gcc version 4.4.5 (Debian 4.4.5-10) ) Wed Jan 12 14:04:06 UTC 2011
(XEN) Bootloader: GRUB 1.98+20100804-14
(XEN) Command line: placeholder
(XEN) Video information:
(XEN)  VGA is text mode 80x25, font 8x16
(XEN)  VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN)  Found 1 MBR signatures
(XEN)  Found 1 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN)  0000000000000000 - 000000000009f000 (usable)
(XEN)  000000000009f000 - 00000000000a0000 (reserved)
(XEN)  00000000000e0000 - 0000000000100000 (reserved)
(XEN)  0000000000100000 - 00000000affa0000 (usable)
(XEN)  00000000affa0000 - 00000000affae000 (ACPI data)
(XEN)  00000000affae000 - 00000000afff0000 (ACPI NVS)
(XEN)  00000000afff0000 - 00000000b0000000 (reserved)
(XEN)  00000000fec00000 - 00000000fec01000 (reserved)
(XEN)  00000000fee00000 - 00000000fef00000 (reserved)
(XEN)  00000000ff700000 - 0000000100000000 (reserved)
(XEN)  0000000100000000 - 0000000140000000 (usable)
(XEN) ACPI: RSDP 000FA310, 0014 (r0 ACPIAM)
(XEN) ACPI: RSDT AFFA0000, 0044 (r1 052608 RSDT1415 20080526 MSFT       97)
(XEN) ACPI: FACP AFFA0200, 0084 (r1 052608 FACP1415 20080526 MSFT       97)
(XEN) ACPI: DSDT AFFA0450, 960C (r1  1AAAA 1AAAA000        0 INTL 20051117)
(XEN) ACPI: FACS AFFAE000, 0040
(XEN) ACPI: APIC AFFA0390, 0080 (r1 052608 APIC1415 20080526 MSFT       97)
(XEN) ACPI: MCFG AFFA0410, 003C (r1 052608 OEMMCFG  20080526 MSFT       97)
(XEN) ACPI: OEMB AFFAE040, 0073 (r1 052608 OEMB1415 20080526 MSFT       97)
(XEN) ACPI: HPET AFFA9A60, 0038 (r1 052608 OEMHPET0 20080526 MSFT       97)
(XEN) ACPI: INFO AFFAE0C0, 0124 (r1 052608 AMDINFO  20080526 MSFT       97)
(XEN) ACPI: NVHD AFFAE1F0, 0284 (r1 052608  NVHDCP  20080526 MSFT       97)
(XEN) ACPI: SSDT AFFA9AA0, 028A (r1 A M I  POWERNOW        1 AMD         1)
(XEN) System RAM: 3839MB (3931388kB)
(XEN) Domain heap initialised
(XEN) Processor #0 15:11 APIC version 16
(XEN) Processor #1 15:11 APIC version 16
(XEN) IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
(XEN) Enabling APIC mode:  Flat.  Using 1 I/O APICs
(XEN) Using scheduler: SMP Credit Scheduler (credit)
(XEN) Detected 2600.088 MHz processor.
(XEN) Initing memory sharing.
(XEN) HVM: ASIDs enabled.
(XEN) HVM: SVM enabled
(XEN) AMD-Vi: IOMMU not found!
(XEN) I/O virtualisation disabled
(XEN) AMD: Disabling C1 Clock Ramping Node #0
(XEN) Total of 2 processors activated.
(XEN) ENABLING IO-APIC IRQs
(XEN)  -> Using new ACK method
(XEN) checking TSC synchronization across 2 CPUs:
(XEN) CPU#0 had -2 usecs TSC skew, fixed it up.
(XEN) CPU#1 had 2 usecs TSC skew, fixed it up.
(XEN) Platform timer is 25.000MHz HPET
(XEN) Allocated console ring of 16 KiB.
(XEN) Brought up 2 CPUs
(XEN)  LOADING DOMAIN 0 
(XEN)  Xen  kernel: 64-bit, lsb, compat32
(XEN)  Dom0 kernel: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) PHYSICAL MEMORY ARRANGEMENT:
(XEN)  Dom0 alloc.:   0000000138000000->000000013c000000 (921455 pages to be allocated)
(XEN) VIRTUAL MEMORY ARRANGEMENT:
(XEN)  Loaded kernel: ffffffff81000000->ffffffff816ba000
(XEN)  Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN)  Phys-Mach map: ffffffff8323c000->ffffffff83963b78
(XEN)  Start info:    ffffffff83964000->ffffffff839644b4
(XEN)  Page tables:   ffffffff83965000->ffffffff83986000
(XEN)  Boot stack:    ffffffff83986000->ffffffff83987000
(XEN)  TOTAL:         ffffffff80000000->ffffffff83c00000
(XEN)  ENTRY ADDRESS: ffffffff81509200
(XEN) Dom0 has maximum 2 VCPUs
(XEN) Scrubbing Free RAM: .done.
(XEN) Xen trace buffers: disabled
(XEN) Std. Loglevel: Errors and warnings
(XEN) Guest Loglevel: Nothing (Rate-limited: Errors and warnings)
(XEN) Xen is relinquishing VGA console.
(XEN) * Serial input -> DOM0 (type ’CTRL-a’ three times to switch input to Xen)
(XEN) Freed 176kB init memory.
(XEN) MCE: MSR 417 is not MCA MSR
(XEN) MCE: MSR 417 is not MCA MSR
root@server1:~#

3 이미지 기반 가상 머신 생성

우리는 xen-tools를 사용하여 가상 머신을 생성할 것입니다. xen-tools는 가상 머신을 생성하는 것을 매우 쉽게 만들어 줍니다 - 더 많은 정보를 얻으려면 이 튜토리얼을 읽어보세요: https://www.howtoforge.com/xen_tools_xen_shell_argo. 우리는 이전 단계 (2장)에서 이미 xen-tools를 설치했습니다.

이제 /etc/xen-tools/xen-tools.conf를 편집합니다. 이 파일은 xen-create-image 스크립트에서 사용되는 기본 값을 포함하고 있으며, 명령줄에서 다른 값을 지정하지 않는 한 사용됩니다. 저는 다음 값을 변경하고 나머지는 그대로 두었습니다:

vi /etc/xen-tools/xen-tools.conf

| [...] dir = /home/xen [...] # lvm = vg0 [...] dist = `xt-guess-suite-and-mirror --suite` # 설치할 기본 배포판. [...] gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 [...] passwd = 1 [...] kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` [...] mirror = `xt-guess-suite-and-mirror --mirror` [...] serial_device = hvc0 #기본값 [...] disk_device = xvda #기본값 [...] |

dir 줄은 가상 머신 이미지가 저장될 위치를 지정합니다. 동시에 lvm이 주석 처리되어 있는지 확인하세요 (이 설정들은 상호 배타적입니다!).

dist는 가상 머신에 설치될 배포판을 지정합니다 (명령줄에서

xt-guess-suite-and-mirror --suite

를 실행하면 squeeze로 변환되는 것을 볼 수 있으므로, 이 경우 Debian Squeeze가 설치됩니다. 명령줄에서 다른 것을 지정하지 않는 한).

가상 머신에 설치할 수 있는 배포판을 확인하려면 다음을 실행하세요:

gunzip /usr/share/doc/xen-tools/README.gz
cat /usr/share/doc/xen-tools/README

passwd = 1 줄은 새 게스트 도메인을 생성할 때 루트 비밀번호를 지정할 수 있게 해줍니다.

kernel 및 initrd 줄은 가상 머신에 설치될 커널과 램디스크를 지정합니다. Debian Squeeze를 설치하려면 위와 같이 설정을 사용하세요 (그렇지 않으면 Debian Squeeze 게스트가 부팅되지 않을 수 있습니다). 예를 들어 Ubuntu Maverick을 설치하려면 동일한 설정을 사용하거나 두 줄을 주석 처리하여 기본 Ubuntu 커널이 사용되도록 할 수 있습니다 (예, Xen 4.0은 게스트에서 비-Xen 커널을 사용할 수 있도록 허용합니다!).

게이트웨이, 넷마스크 및 브로드캐스트 주소를 지정해야 합니다. 그렇지 않으면, xen-create-image를 사용할 때 명령줄에서 게이트웨이와 넷마스크를 지정하지 않으면, IP 주소를 지정했더라도 게스트 도메인에 네트워킹이 없게 됩니다!

mirror 줄은 사용할 미러를 지정합니다 (명령

xt-guess-suite-and-mirror --mirror

는 기본적으로 Debian 미러로 변환됩니다. 물론 다른 미러를 지정할 수 있습니다, 예를 들어 다음과 같이:

mirror = http://ftp.de.debian.org/debian/

또는

mirror = http://archive.ubuntu.com/ubuntu (Ubuntu의 경우; 이 경우 dist 줄에 Ubuntu 버전을 지정해야 합니다, 예: dist = maverick)

)

serial_device = hvc0 줄을 추가하는 것이 매우 중요합니다. 그렇지 않으면 가상 머신이 제대로 부팅되지 않을 수 있습니다!

disk_device = xvda는 가상화된 디스크의 이름이 xvda1, xvda2 등으로 지정되도록 합니다. 이는 Debian Squeeze 게스트에 대한 올바른 설정입니다; Ubuntu 게스트, 특히 비-Xen 커널을 사용할 때는 이 설정으로 부팅되지 않을 수 있지만, xen-create-image 명령에 –scsi 스위치를 전달하여 이를 재정의할 수 있습니다 - 이 경우 가상화된 디스크의 이름은 sda1, sda2 등으로 지정됩니다.

요약하자면, 위의 설정은 Debian Squeeze 게스트에 적합합니다; Ubuntu Maverick을 대신 설치하려면 /etc/xen-tools/xen-tools.conf에서 일부 설정을 재정의해야 합니다 (–dist, –mirror, –scsi 스위치; 아마도 kernel 및 initrd도 주석 처리해야 함) - 잠시 후에 이에 대해 설명하겠습니다.

계속하기 전에 가상 머신 이미지가 저장될 디렉토리를 생성해야 합니다:

mkdir /home/xen 

이제 IP 주소가 192.168.0.101인 첫 번째 게스트 도메인 xen1.example.com을 생성해 보겠습니다:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev

명령줄에서 지정한 옵션은 /etc/xen-tools/xen-tools.conf의 설정을 재정의합니다. 명령줄에서 지정하지 않은 옵션은 /etc/xen-tools/xen-tools.conf에서 가져옵니다. –role=udev를 추가해야 하며, 그렇지 않으면 가상 머신이 제대로 부팅되지 않을 수 있습니다!

(사용 가능한 옵션에 대해 더 알아보려면 xen-create-image 매뉴얼 페이지를 확인하세요:

man xen-create-image

)

xen-create-image 명령은 이제 xen1.example.com 가상 머신을 생성합니다. 몇 분 정도 걸릴 수 있습니다. 출력은 다음과 비슷해야 합니다:

root@server1:~# xen-create-image –hostname=xen1.example.com –size=4Gb –swap=256Mb –ip=192.168.0.101 –memory=256Mb –arch=amd64 –role=udev

일반 정보

호스트 이름       :  xen1.example.com
배포판   :  squeeze
미러         :  http://ftp.de.debian.org/debian/
파티션     :  swap            256Mb (swap)
/               4Gb   (ext3)
이미지 유형     :  sparse
메모리 크기    :  256Mb
커널 경로    :  /boot/vmlinuz-2.6.32-5-xen-amd64
Initrd 경로    :  /boot/initrd.img-2.6.32-5-xen-amd64

네트워킹 정보

IP 주소 1   : 192.168.0.101 [MAC: 00:16:3E:E8:61:97]
넷마스크        : 255.255.255.0
브로드캐스트      : 192.168.0.255
게이트웨이        : 192.168.0.1

/home/xen/domains/xen1.example.com/swap.img에 파티션 이미지를 생성 중입니다.
완료

/home/xen/domains/xen1.example.com/swap.img에 스왑 생성 중입니다.
완료

/home/xen/domains/xen1.example.com/disk.img에 파티션 이미지를 생성 중입니다.
완료

/home/xen/domains/xen1.example.com/disk.img에 ext3 파일 시스템 생성 중입니다.
완료
설치 방법: debootstrap
완료

후크 실행 중
완료

역할: udev
파일: /etc/xen-tools/role.d/udev
역할 스크립트 완료.

Xen 구성 파일 생성 중
완료
루트 비밀번호 설정 중
새 UNIX 비밀번호 입력:
새 UNIX 비밀번호 재입력:
passwd: 비밀번호가 성공적으로 업데이트되었습니다.
모두 완료

로그 파일이 생성되었습니다:
/var/log/xen-tools/xen1.example.com.log

설치 요약

호스트 이름        :  xen1.example.com
배포판    :  squeeze
IP 주소(es)  :  192.168.0.101
RSA 지문   :  81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
루트 비밀번호   :  N/A

root@server1:~#

Ubuntu Maverick 게스트의 경우, 대신 다음 명령을 사용해야 합니다:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev --scsi --dist maverick --mirror=http://archive.ubuntu.com/ubuntu 

(게스트에서 Debian의 Xen 커널 대신 기본 Ubuntu 커널을 사용하려면 /etc/xen-tools/xen-tools.conf에서 커널 및 initrd 줄을 주석 처리할 수도 있습니다.)

이제 xen1.example.com 구성 파일이 있어야 합니다 - /etc/xen/xen1.example.com.cfg. 이를 확인하여 가상 머신 구성 파일에 익숙해지세요:

cat /etc/xen/xen1.example.com.cfg

| # # Xen 인스턴스 xen1.example.com에 대한 구성 파일, # 2011년 3월 25일 금요일 xen-tools 4.2에 의해 생성됨. # # 커널 + 메모리 크기 # kernel = '/boot/vmlinuz-2.6.32-5-xen-amd64' ramdisk = '/boot/initrd.img-2.6.32-5-xen-amd64' vcpus = '1' memory = '256' # 디스크 장치들. # root = '/dev/xvda2 ro' disk = [ 'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w', 'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w', ] # # 물리적 볼륨 # # # 호스트 이름 # name = 'xen1.example.com' # # 네트워킹 # vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97' ] # # 동작 # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |

(참고: 듀얼 코어 또는 쿼드 코어 CPU가 있고 가상 머신이 모든 CPU 코어를 사용하도록 하려면 vcpus 줄을 vcpus = ‘2’ 또는 vcpus = ‘4’로 변경하세요.)

가상 머신을 시작하려면 다음을 실행하세요:

xm create /etc/xen/xen1.example.com.cfg

root@server1:~# xm create /etc/xen/xen1.example.com.cfg
Using config file “/etc/xen/xen1.example.com.cfg”.
도메인 xen1.example.com (id=1) 시작됨
root@server1:~#

xm console xen1.example.com

을 실행하여 해당 가상 머신에 로그인합니다 (콘솔에 있을 경우 CTRL+]를 입력하거나 PuTTY를 사용하는 경우 CTRL+5를 입력하여 dom0로 돌아갑니다), 또는 SSH 클라이언트를 사용하여 192.168.0.101에 연결합니다.

실행 중인 가상 머신 목록을 보려면 다음을 입력하세요:

xm list 

출력은 다음과 같아야 합니다:

root@server1:~# xm list
이름                                        ID   Mem VCPUs      상태   시간(s)
Domain-0                                     0  2811     2     r—–    137.2
xen1.example.com                             1   256     1     -b—-      1.7
root@server1:~#

xen1.example.com을 종료하려면 다음을 수행하세요:

xm shutdown xen1.example.com 

xen1.example.com이 시스템의 다음 부팅 시 자동으로 시작되도록 하려면 다음을 수행하세요:

mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto

다음은 가장 중요한 Xen 명령입니다:

xm create -c /path/to/config - 가상 머신 시작.
xm shutdown - 가상 머신 중지.
xm destroy - 가상 머신을 즉시 중지합니다. 전원 버튼을 끄는 것과 같습니다.
xm list - 실행 중인 모든 시스템 목록.
xm console - 가상 머신에 로그인.
xm help - 모든 명령 목록.

xen-create-image 명령으로 생성된 모든 가상 머신 목록은 다음에서 확인할 수 있습니다:

xen-list-images

root@server1:~# xen-list-images
이름: xen1.example.com
메모리: 256
IP: 192.168.0.101
root@server1:~#

xen-tools로 할 수 있는 것에 대해 더 알아보려면 이 튜토리얼을 확인하세요: https://www.howtoforge.com/xen_tools_xen_shell_argo

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.