가상화 · 6 min read · Nov 30, 2025

CentOS 6.2에서 Xen을 이용한 가상화 (파라가상화 및 하드웨어 가상화)

CentOS 6.2에서 Xen을 이용한 가상화 (파라가상화 및 하드웨어 가상화)

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

이 튜토리얼은 CentOS 6.2 (x86_64) 시스템에 Xen (버전 4.1.2)을 설치하는 방법에 대한 단계별 지침을 제공합니다.

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

저는 호스트 OS (dom0)와 게스트 OS (domU) 모두에 CentOS 6.2 (x86_64)를 사용할 것입니다.

이 문서는 실용적인 가이드를 위한 것이며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 많은 다른 문서에서 다루어집니다.

이 문서는 어떤 종류의 보증 없이 제공됩니다! 이는 이러한 시스템을 설정하는 유일한 방법이 아님을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이 방법이 귀하에게도 작동할 것이라는 보장을 하지 않습니다!

1. 사전 참고 사항

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

SELinux가 비활성화되었거나 허용 모드인지 확인하십시오:

vi /etc/sysconfig/selinux

| # 이 파일은 시스템에서 SELinux의 상태를 제어합니다. # SELINUX=은 다음 세 가지 값 중 하나를 가질 수 있습니다: # enforcing - SELinux 보안 정책이 시행됩니다. # permissive - SELinux가 시행 대신 경고를 출력합니다. # disabled - SELinux가 완전히 비활성화됩니다. SELINUX=disabled # SELINUXTYPE= 사용 중인 정책의 유형. 가능한 값은: # targeted - 오직 타겟 네트워크 데몬만 보호됩니다. # strict - 전체 SELinux 보호. SELINUXTYPE=targeted |

/etc/sysconfig/selinux를 수정해야 했다면 시스템을 재부팅하십시오:

reboot

2. 네트워크 브리지 생성

가상 머신이 네트워크의 물리적 시스템처럼 다른 호스트에서 접근할 수 있도록 서버에 네트워크 브리지를 설정해야 합니다.

이를 위해 bridge-utils 패키지를 설치합니다…

yum install bridge-utils

… 그리고 브리지를 구성합니다. /etc/sysconfig/network-scripts/ifcfg-br0 파일을 생성합니다 (IPADDR, PREFIX, GATEWAY, DNS1 및 DNS2 값은 /etc/sysconfig/network-scripts/ifcfg-eth0 파일에서 가져오십시오); TYPE=Bridge를 사용하고 TYPE=Ethernet을 사용하지 마십시오:

vi /etc/sysconfig/network-scripts/ifcfg-br0

| DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0" |

/etc/sysconfig/network-scripts/ifcfg-eth0를 다음과 같이 수정합니다 (BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1 및 DNS2를 주석 처리하고 BRIDGE=br0를 추가합니다):

vi /etc/sysconfig/network-scripts/ifcfg-eth0

| DEVICE="eth0" NM_CONTROLLED="yes" ONBOOT=yes HWADDR=00:1E:90:F3:F0:02 TYPE=Ethernet #BOOTPROTO=none #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 BRIDGE=br0 |

네트워크를 재시작합니다…

/etc/init.d/network restart

… 그리고 실행합니다

ifconfig

이제 네트워크 브리지 (br0)가 표시되어야 합니다:

[root@server1 ~]# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1196 (1.1 KiB)  TX bytes:2794 (2.7 KiB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:4554 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:3020 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:6249612 (5.9 MiB)  TX bytes:254928 (248.9 KiB)  
          Interrupt:25 Base address:0x6000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1304 (1.2 KiB)  TX bytes:1304 (1.2 KiB)  
  
[root@server1 ~]#

3. Xen 설치

먼저 CPU가 하드웨어 가상화를 지원하는지 확인하십시오 - 이 경우 명령어

egrep '(vmx|svm)' --color=always /proc/cpuinfo

는 다음과 같은 내용을 표시해야 합니다:

[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall  
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall  
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse  
[root@server1 ~]#

아무것도 표시되지 않으면 프로세서가 하드웨어 가상화를 지원하지 않는 것입니다. 이는 Xen과 함께 파라가상화만 사용할 수 있음을 의미하며, 하드웨어 가상화는 사용할 수 없습니다.

CentOS 6은 RedHat 6을 기반으로 하며, RedHat은 6 버전에서 Xen에 대한 지원을 중단했으므로, 우리는 제3자 저장소에서 Xen을 가져와야 합니다. 다음과 같이 저장소를 활성화할 수 있습니다:

yum install wget
yum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpm

Xen을 설치하기 위해 이제 간단히 실행합니다:

yum install kernel-xen xen

이렇게 하면 CentOS 시스템에 Xen과 Xen 커널이 설치됩니다.

Xen 커널로 시스템을 부팅하기 전에 GRUB 부트로더 구성을 확인하십시오. /boot/grub/menu.lst를 엽니다:

vi /boot/grub/menu.lst

첫 번째로 나열된 커널은 방금 설치한 Xen 커널이어야 합니다:

| [...] title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |

그 섹션을 수정하여 Xen 하이퍼바이저가 먼저 로드되도록 해야 합니다. kernel /vmlinuz… 줄에서 첫 번째 단어 kernel을 module로 바꾸고, 다음 줄에서도 첫 번째 단어 initrd를 module로 바꿉니다. 그런 다음 root 줄 다음에 kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin 줄을 추가합니다 (CPU 코어가 여러 개 있는 경우 dom0_max_vcpus에 1이 아닌 다른 숫자를 지정할 수 있습니다). 최종 커널 섹션은 다음과 같아야 합니다:

| [...] title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |

기본값을 0으로 변경하여 첫 번째 커널 (Xen 커널)이 기본적으로 부팅되도록 합니다:

| [...] default=0 [...] |

완전한 /boot/grub/menu.lst는 다음과 같아야 합니다:

| # grub.conf은 anaconda에 의해 생성되었습니다 # 이 파일을 변경한 후 grub를 다시 실행할 필요는 없습니다 # 주의: /boot 파티션이 있습니다. 이는 모든 커널 및 initrd 경로가 /boot/에 상대적임을 의미합니다. 예: # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup00-LogVol00 # initrd /initrd-[generic-]version.img #boot=/dev/sde default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img title CentOS (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32-220.el6.x86_64.img |

재부팅하기 전에 libvirt 및 python-virtinst (나중에 Xen VM을 설치하는 데 사용할 virt-install 도구가 포함되어 있습니다) 패키지를 설치합니다:

yum install libvirt python-virtinst

CentOS 6/RedHat 6의 libvirt 패키지는 Xen을 지원하지 않으므로, Xen 지원으로 재구성해야 합니다. 이를 위해 몇 가지 필수 패키지를 지금 설치합니다:

yum groupinstall 'Development Tools'
yum install python-devel xen-devel libxml2-devel xhtml1-dtds readline-devel ncurses-devel libtasn1-devel gnutls-devel augeas libudev-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl-devel avahi-devel libselinux-devel cyrus-sasl-devel parted-devel device-mapper-devel numactl-devel libcap-ng-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel

우리의 libvirt 버전을 확인해 봅시다:

rpm -qa | grep libvirt
[root@server1 ~]# rpm -qa | grep libvirt  
libvirt-client-0.9.4-23.el6_2.4.x86_64  
libvirt-0.9.4-23.el6_2.4.x86_64  
libvirt-python-0.9.4-23.el6_2.4.x86_64  
[root@server1 ~]#

버전은 0.9.4이므로, 적절한 src.rpm 패키지를 /root/src에 다운로드하고 설치합니다:

mkdir /root/src  
cd /root/src  
wget http://vault.centos.org/6.2/os/Source/SPackages/libvirt-0.9.4-23.el6.src.rpm  
rpm -i libvirt-0.9.4-23.el6.src.rpm

마지막 명령은 무시할 수 있는 몇 가지 경고를 표시할 것입니다:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root

다음으로 Xen 지원을 libvirt 소스에 패치합니다:

wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch  
cd /root/rpmbuild/SPECS  
cp -a libvirt.spec libvirt.spec.orig  
patch -p0 < ~/src/libvirt-spec-rhel6-enable-xen.patch

이제 새로운 libvirt 패키지를 빌드합니다:

rpmbuild -bb libvirt.spec

빌드 프로세스가 끝나면 다음과 같은 내용이 표시되어야 합니다:

Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-lock-sanlock-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.9.4-23.el6.x86_64.rpm

새 패키지가 생성된 디렉토리 (/root/rpmbuild/RPMS/x86_64/)로 이동합니다…

cd /root/rpmbuild/RPMS/x86_64/

… 그리고 다음과 같이 새로운 libvirt 패키지 (Xen 지원 포함)를 설치합니다:

rpm -Uvh --force libvirt-0.9.4-23.el6.x86_64.rpm libvirt-client-0.9.4-23.el6.x86_64.rpm libvirt-python-0.9.4-23.el6.x86_64.rpm

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

reboot

시스템은 이제 자동으로 새로운 Xen 커널로 부팅되어야 합니다. 시스템이 부팅된 후 다음을 실행하여 확인할 수 있습니다:

uname -r
[root@server1 ~]# uname -r  
2.6.32.54-1.el6xen.x86_64  
[root@server1 ~]#

정말로 새로운 Xen 커널을 사용하고 있습니다!

이제

xm list

을 실행하여 Xen이 시작되었는지 확인할 수 있습니다. Domain-0 (dom0)가 나열되어야 합니다:

[root@server1 ~]# xm list  
Name                                    ID   Mem VCPUs      State   Time(s)  
Domain-0                                0   1024     1     r-----     18.9  
[root@server1 ~]#

이제 xm 명령 대신 virsh 명령을 사용하여 Xen VM을 관리할 것입니다. 이는 libvirt를 사용하고 있으므로 선호되는 방법입니다.

virsh list

는 다음과 같이 표시되어야 합니다:

[root@server1 ~]# virsh list  
 Id Name                 State  
----------------------------------  
  0 Domain-0             running  
[root@server1 ~]#
Share: X/Twitter LinkedIn

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

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