서버 관리 · 7 min read · Dec 07, 2025
LVM이 있는 Debian Wheezy에서 Xen
LVM이 있는 Debian Wheezy에서 Xen
저자: Jason Norwood-Young jason [at] freespeechpub dot co dot za
당신은 심각한 서버 요구가 있습니다. 여러 운영 체제를 가진 서버를 원하고, 그들이 각자의 미친 사이트를 운영하며 세상을 더 나은 곳으로 만들고 있습니다. 문제는 하나입니다 - 당신은 가난합니다. AWS 서버와 Rackspace 서버를 가동하는 데 드는 비용을 세지 않고는 그들이 가동되는 시간을 계산할 수 없을 만큼 가난합니다. 매번 청구서를 받을 때마다 눈물을 흘리게 됩니다.
걱정하지 마세요 - 당신이 찾고 있는 것을 클라우드 서버 비용보다 훨씬 저렴하게 가질 수 있습니다. 특히 24/7/365로 가동해야 한다면 더욱 그렇습니다. 가상화를 통해 하나의 큰 서버를 사용하여 많은 작은 서버를 호스팅할 수 있습니다. 마치 자신의 클라우드를 가진 것과 같습니다!
이 튜토리얼은 Debian Wheezy 위에 Xen과 첫 번째 가상 머신을 설치하는 방법을 다룹니다. Squeeze를 사용하고 있다면, 제가 영감을 받은 Falko Timme의 튜토리얼을 확인해 보세요 (비록 우리는 약간 다르게 작업하지만).
0. 서버 선택하기
저는 Hetzner 독일을 사용합니다. 왜냐고요? 그들은 정말 저렴합니다. 가상화된 환경에서는 많은 메모리를 찾는 것이 중요합니다. 메모리가 많을수록 더 많은 가상 시스템을 그곳에 넣을 수 있으며, 더 크게 만들 수 있습니다. 저는 32GB 서버 두 대를 가지고 있어, 각각 1GB에서 4GB 사이의 약 8개의 서버를 문제 없이 운영할 수 있습니다. 이것은 어떤 추천도 아니며, 저는 매달 그들에게 제 힘들게 번 돈을 지불하는 것 외에는 Hetzner와 어떤 관계도 없습니다.
당신이 찾고 있는 것은 저렴하게 루트 서버를 제공하고, 많은 메모리를 제공하며, 정말로 잘못했을 때 원격으로 재부팅하고 복구할 수 있는 능력을 가진 공급자입니다.
1. Xen 설치하기
Wheezy를 설치하고 루트로 로그인했으며 필요한 모든 apt-get 업데이트와 apt-get 업그레이드를 완료했다고 가정합니다. 이제 시작해 봅시다!
apt-get install xen-linux-system xen-tools이 명령은 Xen, 일부 고메모리 관련 패키지 및 나중에 가상 이미지를 생성하는 데 사용할 매우 유용한 xen-tools를 설치합니다.
다음으로 Xen에게 네트워킹을 처리하는 방법을 알려주고 싶습니다. 제가 작은 고백을 해야 합니다: 저는 네트워킹 전문가가 아닙니다. 사실, 저는 네트워킹을 싫어합니다. 그것은 인터넷의 배관이며, 저는 제 배관공의 균열을 보여주기를 거부합니다. Xen 네트워킹은 복잡하며, 이상한 경로와 브리지, 그리고 신이 아는 다른 것들이 있습니다. 그래서 저는 가장 쉽고 빠르며 더러운 해결책을 선택합니다 - NAT 모드로 설정합니다. (아니요, NAT가 무엇인지 잘 모르지만, 작동합니다, 알겠죠? 질문하지 마세요.)
pico /etc/xen/xend-config.sxp다음 두 줄의 주석을 제거합니다:
(network-script network-nat)
(vif-script vif-nat)Xen을 설치했지만 실제로 실행되고 있지는 않습니다. Xen은 커널 수준에서 실행되므로 실제로 Xen으로 부팅해야 합니다.
먼저 Debian에게 일반 커널 대신 Xen으로 부팅하도록 알려야 합니다:
dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen update-grub그런 다음 재부팅해야 합니다:
reboot새롭고 멋진 Xen 시스템에 ssh로 접속하고 싶겠지만, 재부팅할 시간을 주세요.
좋아요, 이제 시도해 보세요.
지금은 어떤가요?
접속했나요? 괜찮나요? 좋습니다. 계속 진행합시다.
2. Xen 제어하기
이제 Xen이 실제로 실행되고 있는지 확인하고 싶습니다. Squeeze에서는 uname -r을 실행하면 2.6.32-5-xen-amd64와 같은 것을 볼 수 있었습니다. 인류가 알지 못하는 신비한 이유로, 이것은 Wheezy에서는 작동하지 않으므로 대신 다음을 수행합니다:
xen dmesg다음과 같은 것을 볼 수 있어야 합니다:
(XEN) Xen version 4.1.4 (Debian 4.1.4-3+deb7u1) ([email protected]) (gcc version 4.7.2 (Debian 4.7.2-5) ) Sun May 5 14:44:49 UTC 2013
(XEN) Bootloader: GRUB 1.99-27+deb7u2
(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 2 MBR signatures
(XEN) Found 2 EDD information structures
...그것을 보지 못했다면, 뭔가 잘못했습니다. 돌아가서 다시 시도하세요. 나머지 분들은, 성공입니다! 축하합니다! 이제 멋진 Dom0 인스턴스가 생겼습니다!
Dom-무엇? 누가 dom이라고 부르나요?
진정하세요. Dom0, 또는 Domain 0은 당신이 지금 있는 호스트 서버입니다. 하위 계층의 것입니다. 게스트 서버는 DomU라고 하며, 아마도 약간 모욕적으로 들리기 때문일 것입니다.
xm listName ID Mem VCPUs State Time(s)
Domain-0 0 31089 8 r—— 8.8이 명령은 Dom0을 포함한 모든 가상 서버를 나열합니다. 현재 실행 중인 서버는 그것뿐입니다.
우리는 xm을 사용하여 많은 작업을 수행할 수 있습니다. 여기에는 서버를 시작하는 xm create, 서버를 종료하는 xm destroy, 서버를 재부팅하는 xm reboot, 실행 중인 모든 서버를 모니터링하는 xm top이 포함됩니다.
3. LVM 구성하기
Xen 서버를 블록 장치 또는 LVM 인스턴스로 생성할 수 있습니다. 저는 LVM을 좋아합니다. 왜냐하면 더 강력하고, 나중에 파티션 크기를 조정하는 것이 훨씬 더 쉬워지기 때문입니다.
먼저 LVM을 설치할 빈 마운트되지 않은 드라이브가 필요합니다. 저는 빈 마운트되지 않은 드라이브가 없으므로, 서버에서 하나를 훔쳐오겠습니다.
df -hFilesystem Size Used Avail Use% Mounted on
rootfs 1008G 915M 956G 1% /
udev 10M 0 10M 0% /dev
tmpfs 3.0G 292K 3.0G 1% /run
/dev/disk/by-uuid/5642a4c4-1bcb-49e2-b89c-7d754e6a521a 1008G 915M 956G 1% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 9.2G 0 9.2G 0% /run/shm
/dev/md1 496M 34M 437M 8% /boot
/dev/md3 1.7T 196M 1.7T 1% /home/home에 1.7TB? 진짜인가요? 그건 완전히 불필요해 보입니다.
pico /etc/fstab문제가 되는 드라이브의 주석을 제거합니다.
#/dev/md/3 /home ext4 defaults 0 0드라이브를 마운트 해제합니다.
umount /dev/md3좋습니다. 이제 LVM 파티션을 생성할 수 있습니다.
pvcreate /dev/md3 Writing physical volume data to disk "/dev/md3"
Physical volume "/dev/md3" successfully createdvgcreate xen-vol /dev/md3vgdisplay --- Volume group ---
VG Name xen-vol
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.71 TiB
PE Size 4.00 MiB
Total PE 448996
Alloc PE / Size 0 / 0
Free PE / Size 448996 / 1.71 TiB
VG UUID wa0QCN-lBc1-545B-zMwf-vIuS-VXXI-GZAfbW멋지네요!
4. Xen 도구 구성하기
Xen 도구는 새로운 서버를 생성할 때 우리의 Xen 생활을 훨씬 더 쉽게 만들어 줍니다. 하지만 먼저 약간의 구성이 필요합니다.
pico /etc/xen-tools/xen-tools.conflvm = xen-vol
size = 20Gb # 디스크 이미지 크기.
memory = 4Gb # 메모리 크기
swap = 512Mb # 스왑 크기
gateway = 192.168.1.2
netmask = 255.255.0.0
broadcast = 192.168.1.255
mirror = http://ftp.de.debian.org/debian/
mirror_precise = http://archive.ubuntu.com/ubuntu # (원하는 다른 것들)
serial_device = hvc0
disk_device = xvda # 기본값
copyhosts = 15. 게스트 서버 생성하기
이제 주요 이벤트 시간입니다! 이것은 새로운 Xen 게스트 서버를 생성할 때마다 반복할 과정입니다.
첫 번째 테스트 서버를 위해, xen-tools.conf에서 설정한 기본값보다 약간 작은 것을 만들 것입니다. 원하는 대로 명령줄에서 기본값을 재정의할 수 있습니다. DHCP 서버를 사용하지 않기 때문에 매번 “hostname”과 “ip”를 설정해야 합니다. 나머지는 선택 사항입니다.
xen-create-image --hostname=test --ip=192.168.1.99 --memory=512Mb --size=5G --swap=256KbGeneral Information
--------------------
Hostname : test
Distribution : wheezy
Mirror : http://ftp.de.debian.org/debian/
Partitions : swap 256Kb (swap)
/ 5G (ext3)
Image type : full
Memory size : 512Mb
Kernel path : /boot/vmlinuz-3.2.0-4-amd64
Initrd path : /boot/initrd.img-3.2.0-4-amd64
Networking Information
----------------------
IP Address 1 : 192.168.1.99 [MAC: 00:16:3E:27:33:2D]
Netmask : 255.255.0.0
Broadcast : 192.168.1.255
Gateway : 192.168.1.2
Creating swap on /dev/xen-vol/test-swap
Done
Creating ext3 filesystem on /dev/xen-vol/test-disk
Done
Installation method: debootstrap
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/test.log
Installation Summary
---------------------
Hostname : test
Distribution : wheezy
IP-Address(es) : 192.168.1.99
RSA Fingerprint : de:92:b7:63:55:20:74:46:d3:de:cc:ff:55:22:69:24
Root Password : MlkaIn8이 명령은 구성 파일과 파티션을 생성하지만, 서버를 부팅하지는 않습니다. 구성 파일은 /etc/xen/hostname.cfg에 위치합니다. 나중에 메모리와 같은 것을 변경해야 할 경우 이 파일을 직접 편집할 수 있습니다.
서버를 시작해 보겠습니다.
xm create /etc/xen/test.cfgUsing config file "/etc/xen/test.cfg".
Started domain test (id=1)상당히 멋진 점은 “test”가 /etc/hosts 파일에 추가되어, 다음과 같이 간단히 할 수 있다는 것입니다:
ssh testxen-create-image 출력의 끝에서 받은 비밀번호를 사용하면 접속할 수 있습니다!
인터넷에 접속할 수 있는지 확인하세요:
ping google.comPING google.com (173.194.70.113) 56(84) bytes of data.
64 bytes from fa-in-f113.1e100.net (173.194.70.113): icmp_req=1 ttl=48 time=6.05 ms
64 bytes from fa-in-f113.1e100.net (173.194.70.113): icmp_req=2 ttl=48 time=6.03 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 6.030/6.044/6.058/0.014 ms6. 맥주 한 잔 하세요
당신은 그럴 자격이 있습니다!
7. IP 주소를 가상 서버에 지정하기
ISP로부터 여러 개의 IP 주소(서브넷이라고 함)를 받아야 합니다. 저는 추가로 8개의 IP 주소를 위해 매달 조금 더 지불합니다. 하지만 이들을 가상 서버로 직접 연결하는 데는 약간의 작업이 필요합니다.
pico /etc/network/interfacesauto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.0.0
pre-up brctl addbr $IFACE
post-down brctl delbr $IFACE/etc/init.d/networking restartifconfig br0br0 Link encap:Ethernet HWaddr 82:18:d1:b8:37:c9
inet addr:192.168.1.2 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: fe80::9118:d1ff:feb8:37c9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:172 (172.0 B)ip addr add 80.1.2.41 dev eth0iptables -A PREROUTING -t nat -p all -i eth0 -d 80.1.2.41 -j DNAT --to 192.168.1.99xen-create를 사용할 때 –bridge=br0를 사용하세요. 기존의 /etc/xen/*.cfg 파일에 대해서는 이 줄을 편집하세요:
vif = [ 'ip=192.168.1.99,mac=00:15:3F:B4:AC:34' ]다음과 같이 변경합니다:
vif = [ 'ip=192.168.1.99,mac=00:15:3F:B4:AC:34','bridge=br0' ]필요한 경우 가상 서버를 삭제하고 생성하세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.