Xen เป็นซอฟต์แวร์ที่ใช้ทำ virtualization ในทางทฤษฎีสามารถรัน guest os ใด ๆ ก็ได้ โดยมีข้อแม้คือ ซีพียู ต้องรองรับการทำ virtualization ด้วย แต่ถ้าซีพียูไม่รองรับ ต้องใช้กับ os ที่ดัดแปลงให้ใช้กับ xen เท่านั้น
(คราวก่อนติดตั้งเพื่อทดลอง windows แต่เที่ยวนี้จะทำ host)
ข้อดีคือ เร็วพอควร และสามารถ swap หน่วยความจำได้ ทำให้ใช้งานได้เหมือนในระบบลินุกส์ปกติ
ข้อเสียคือ เนื่องจากแยกเคอร์เนลและฮาร์ดแวร์กันอย่างเด็ดขาด จึงทำให้ต้องการฮาร์ดแวร์มากกว่าปกติ และหากหน่วยความจำที่แบ่งให้แต่ละ guest os ไม่พอ xen จะทำการสลับหน่วยความจำลงดิสก์ ทำให้ระบบทำงานช้ามาก (ซึ่งจะมีผลกับทุก ๆ โปรเซสที่ยังค้างอยู่ในหน่วยความจำ คือช้าทั้งระบบ)
กำหนด
cpu: Intel E2140
mb: ECS P4M890T-M V2.0
ram: 4GB
host: server1.example.com, 192.168.1.31
guest-101: test.example.com, 192.168.1.131, bridged
xen-physical-partition: /dev/sda10,xvda
apt-proxy: 192.168.1.3:9999
ติดตั้ง Xen - dom0
เริ่มติดตั้งบน lenny
# aptitude install xen-hypervisor-3.2-1-i386 xen-linux-system-2.6.26-2-xen-686 xen-utils-3.2-1 xenstore-utils xen-shell
จะใช้เน็ตเวิร์กแบบ bridge
# vi /etc/xen/xend-config.sxp
... # (network-script network-dummy) (network-script network-bridge) ...
บูตใหม่
# shutdown -r now
ตรวจผลหลังการบูต
# uname -r
2.6.26-2-xen-686
ติดตั้ง domU
สมมุติว่าจะติดตั้ง xen-domU ไว้ที่ฮาร์ดดิสก์จริง /dev/sda10 ที่แบ่งพาร์ติชั่นเป็น ext3 ไว้เรียบร้อยแล้ว โดยจะเมานต์ /dev/sda10 เป็น /dev/xvda ใน xen และแบ่งพาร์ติชั่นต่าง ๆ ของ domU ใน /dev/xvda
# xm block-attach 0 phy:/dev/sda10 xvda w
ใช้ fdisk แบ่งพาร์ติชั่นตามใจชอบ
# fdisk /dev/xvda
ในที่นี้สมมุติว่า /dev/xvda5 เมานต์เป็น /
และ /dev/xvda6 ใช้เป็น swap
ฟอร์แมต ext3 และ swap ตามลำดับ
# mkfs.ext3 /dev/xvda5 # mkswap /dev/xvda6
ใช้วิธีติดตั้งแบบ debootstrap เนื่องจากเร็วกว่าวิธีอื่น
ติดตั้ง debootstrap
# aptitude install debootstrap
ติดตั้ง lenny บน /dev/xvda5 ผ่าน apt-proxy 192.168.1.3:9999
และเนื่องจากซีพียูไม่รองรับการทำ virtualize จึงต้องติดตั้งเคอร์เนลที่แปลงมาใช้กับ xen แล้ว
# mkdir /mnt/tmp # mount /dev/xvda5 /mnt/tmp # debootstrap lenny /mnt/tmp http://192.168.1.3:9999/debian # mount -t proc none /mnt/tmp/proc # mount -o bind /dev /mnt/tmp/dev # mount -t sysfs none /mnt/tmp/sys # cp /etc/apt/sources.list /mnt/tmp/etc/ # ehco 'test.example.com' > /mnt/tmp/etc/hostname # chroot /mnt/tmp
test# vi /etc/network/interface
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.1.131 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.3 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.1.3 dns-search example.com
test# vi /etc/fstab
... #proc /proc proc defaults 0 0 /dev/xvda5 / ext3 errors=remount-ro 0 1 /dev/xvda6 none swap sw 0 0
test# aptitude update test# aptitude install console-data locales ssh test# dpkg-reconfigure locales test# aptitude upgrade test# aptitude install linux-image-2.6.26-2-xen-686 test# passwd test# exit # umount /mnt/tmp/sys # umount /mnt/tmp/dev # umount /mnt/tmp/proc # umount /mnt/tmp # xm block-detach 0 xvda
สร้างไฟล์คอนฟิก
# vi /etc/xen/101.cfg
# # Kernel + memory size # kernel = '/boot/vmlinuz-2.6.26-2-xen-686' ramdisk = '/boot/initrd.img-2.6.26-2-xen-686' memory = '1024' # # Disk device(s). # root = '/dev/xvda5 ro' disk = [ 'phy:sda10,xvda,w' ] # # Hostname # name = 'test.example.com' # # Networking # vif = [ 'bridge=eth0' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
เริ่ม domU - 101.cfg
# xm create 101.cfg
ตรวจสถานะ
# xm list
เข้าใช้งาน domU ด้วย ssh
# ssh root@test.example.com
เสร็จแล้วครับ
ที่มา