Home | Back
การทำ Vitualization แบบ HVM ด้วย Xen บน Ubuntu 13.04
Saturday, 14 September 2013
ในการทำ Virtualization (VM) นั้นมีหลายเทคโนโลยีและหลายค่าย แต่คราวนี้ผมจะแนะนำ Xen ซึ่งสามารถทำ VM ที่มีประสิทธิภาพด้วย Hardware-assisted Virtualization (HVM) ที่มีประสิทธิภาพ โดยจะทำ HVM ได้นั้นอาจจะต้องมีการปรับแต่งค่าใน bios ให้มีการ enable ความสามารถในส่วนนี้ก่อนนะครับ จึงจะสามารถทำ VM แบบ HVM ได้ โดยในครั้งนี้ผมจะแสดงวิธีการทำ VM บนระบบ Ubuntu 13.04 นะครับโดยมีขั้นตอนต่าง ๆ ดังนี้ครับ
1. สร้าง bridge interface สำหรับ Xen
เริ่มต้นในกรณีที่เรายังไม่เคยสร้าง bridge interface มาก่อนก็จะต้องลง package สำหรับการสร้าง bridge ดังนี้ครับ
$ sudo aptitude install bridge-utils
จากนั้นถ้าหากเครื่อง Host ของเรามีการตั้งค่าเครือข่ายผ่าน DHCP เราก็จะทำการปรับแต่งไฟล์ /etc/network/interfaces ดังนี้ครับ
File: /etc/network/interfaces
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
แต่หากเครื่อง Host ของเรามีการตั้งค่าทางเครือข่ายแบบ static เราก็สามารถปรับแต่งไฟล์ /etc/network/interfaces ได้ดังนี้ครับ
File: /etc/network/interfaces
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet static
address 172.16.9.10
network 172.16.9.0
netmask 255.255.255.0
gateway 172.16.9.254
dns-nameservers 8.8.8.8
dns-nameservers 8.8.4.4
dns-search example.com
bridge_ports eth0
2. ลง package สำหรับ Xen
ขั้นตอนต่อไปเป็นการลง package ที่จำเป็นสำหรับ Xen ดังนี้ครับ
$ sudo aptitude install xen-hypervisor
จากนั้นเราจะทำการ reboot ระบบใหม่เพื่อบูตเข้าสู่ kernel ที่รองรับการทำงานของ Xen Hypervisor โดยใน Ubuntu 13.04 นั้น Grub Menu จะไม่แสดงให้เราเลือก Kernel ได้ในตอนบูต เราจึึงต้องทำการปรับแต่ง Grub ให้แสดงเมนูเลือก Kernel โดยการแก้ไขไฟล์ /etc/default/grub ดังนี้ครับ
File: /etc/default/grub
GRUB_DEFAULT=2
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
โดยเราจะแก้บรรทัด GRUB_DEFAULT จากเดิม 0 ให้เป็น 2 เพราะเราต้องการให้ Grub เลือกเมนูที่ 3 เป็นค่า default ซึ่งเป็นการเลือกบูตเข้าสู่ Kernel ที่รองรับ Xen Herpervisor และ GRUB_HIDDEN_TIMEOUT เราใส่ตัว comment (#) ไว้เพื่อให้ Grub ทำการแสดงเมนูให้เราดูนั่นเองครับ เมื่อแก้ไฟล์เสร็จแล้วก็ทำการ update-grub ดังนี้ครับ
$ sudo update-grub
จากนั้นก็ทำการ reboot ระบบครับ
$ sudo reboot
3. ทำการสร้าง VM
ขั้นตอนต่อไปเราจะทำการสร้าง VM ขึ้นมา โดยเราจะทำการติดตั้ง Ubuntu 13.04 server ลงใน VM ตัวนี้ โดยเราจะสร้างโฟลเดอร์สำหรับ VM ตัวนี้ขึ้นมาในชื่อ ubuntu และทำการนำไฟล์ ubuntu-13.04-server-amd64.iso มาวางในโฟลเดอร์ ubuntu นี้ เพื่อใช้ติดตั้งตัว ubuntu และทำการสร้างไฟล์จำลองขนาด 5G เพื่อจำลองเป็นฮาร์ดดิส ดังนี้ครับ
$ mkdir ubuntu $ cd ubuntu $ cp /data/ubuntu-13.04-server-amd64.iso . $ dd if=/dev/zero of=disk1 bs=1G count=5 $ ls disk1 ubuntu-13.04-server-amd64.iso
คำสั่ง dd เป็นคำสั่งในการสร้างไฟล์จำลองที่ชื่อ disk1 และมีขนาด 5G นั่นเองครับ และขั้นตอนต่อไปจะเป็นการสร้างไฟล์ config สำหรับ VM ของเรา โดยผมจะสร้างไฟล์ชื่อ ubuntu.cfg และจะกำหนดให้ VM ของเรา มีแรมขนาด 1G และมีจำนวน CPU 2 ตัว และเชื่อมต่อกับไฟล์ ubuntu-13.04-server-amd64.iso ในลักษณะ CDROM และเชื่อมต่อกับไฟล์ disk1 ในลักษณะฮาร์ดดิสก้อนแรก และเราสามารถเข้าถึงหน้าจอ console ได้โดยผ่าน vnc เราจะสามารถกำหนดรายละเอียดดังกล่าวในไฟล์ ubuntu.cfg ได้ดังนี้ครับ
File: ubuntu.cfg
builder = "hvm" # Guest name name = "ubuntu" # 128-bit UUID for the domain as a hexadecimal number. # Use "uuidgen" to generate one if required. # The default behavior is to generate a new UUID each time the guest is started. #uuid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # Enable Microsoft Hyper-V compatibile paravirtualisation / # enlightenment interfaces. Turning this on can improve Windows guest # performance and is therefore recommended #viridian = 1 # Initial memory allocation (MB) memory = 1024 # Maximum memory (MB) # If this is greater than `memory' then the slack will start ballooned # (this assumes guest kernel support for ballooning) #maxmem = 512 # Number of VCPUS vcpus = 2 # Network devices # A list of 'vifspec' entries as described in # docs/misc/xl-network-configuration.markdown vif = [ 'bridge=xenbr0' ] # Disk Devices # A list of `diskspec' entries as described in # docs/misc/xl-disk-configuration.txt disk = [ 'file:/home/user/ubuntu/disk1,hda,w','file:/home/user/ubuntu/ubuntu-13.04-server-amd64.iso,hdc:cdrom,r' ] # Guest VGA console configuration, either SDL or VNC #sdl = 1 vnc = 1 boot = "dc"
ในส่วนที่เป็นสีส้มคือส่วนที่เราทำการปรับแต่งโดยในหัวข้อ builder จะหมายถึง VM ของเราเป็นแบบ hvm หัวข้อ name จะหมายถึงชื่อของ VM ของเรา หัวข้อ memory จะเป็นการกำหนดขนาดของแรมโดยมีหน่วยเป็น MB หัวข้อ vcpus จะเป็นการกำหนดจำนวน cpu ให้กับ VM ของเรา หัวข้อ vif เป็นการกำหนดการเชื่อมต่อเครือข่ายของเรา โดยผมจะให้ VM ของเราเชื่อมต่อแบบ bridge network ไปยัง bridge interface ของ Host โดยตรงครับ หัวข้อ disk จะเป็นการกำหนดฮาร์ดดิสต่าง ๆ ให้กับ VM ของเรา หัวข้อ vnc เป็นการกำหนดให้เราดูหน้า console ผ่านโปรโตคอล VNC และสุดท้ายหัวข้อ boot จะเป็นการกำหนดลำดับการบูตครับ โดยเราจะให้บูต VM ผ่านไดร์ฟ D ที่เชื่อมต่อกับไฟล์ติดตั้ง ubuntu เพื่อเราจะได้ทำการติดตั้ง ubuntu ใน VM ของเราได้ครับ
เมื่อเราได้ไฟล์ ubuntu.cfg แล้ว เราก็พร้อมจะสร้าง VM แล้วครับ โดยเราสามารถตรวจสอบว่ามี VM ทำงานอยู่ในเครื่อง Host ของเราอยู่รึเปล่าได้ดังคำสั่ง xm list ดังนี้ครับ
$ sudo xm list Name ID Mem VCPUs State Time(s) Domain-0 0 7008 4 r----- 1917.1
จะเห็นว่าในตอนแรกเราจะเห็นว่ามี Domain-0 เพียงตัวเดียว ซึ่ง Domain-0 นั้นจะหมายถึงตัว Host ของเรานั่นเอง จากนั้นเราก็จะทำการสร้าง VM ของเราด้วยคำสั่ง xm create ดังนี้ครับ
$ sudo xm create ubuntu.cfg Using config file "./ubuntu.cfg". Started domain ubuntu (id=1)
ตอนนี้ VM ของเราทำงานแล้วครับ เราสามารถตรวจดูว่ามี VM ทำงานอยู่จริงรึเปล่า เราก็ดูด้วย xm list ครับ
$ sudo xm list Name ID Mem VCPUs State Time(s) Domain-0 0 7008 4 r----- 1958.0 ubuntu 1 1024 4 -b---- 6.8
เราจะเห็นว่ามี VM ที่ชื่อ Ubuntu เพิ่มเข้ามา แสดงว่า VM ของเราได้ทำงานอยู่ในเครื่อง Host ของเราแล้วครับ และเราสามารถเข้าไปจัดการในหน้า console โดยผ่านโปรโตคอล VNC ดังนี้ครับ
$ vncviewer localhost:0
เราก็จะสามารถเข้าไปดำเนินการต่าง ๆ ในตัว VM ของเราได้เลยครับ ถ้าหากไม่มี vncviewer ก็ทำการลง package vncviewer ได้เลยครับ เมื่อดำเนินการติดตั้ง ubuntu ลงใน VM เรียบร้อยแล้ว เราก็ทำการ shutdown ตัว VM ของเรา ได้ดังนี้ครับ
$ sudo xm shutdown ubuntu
เมื่อ shutdown แล้ว เราก็ทำการแก้ไขไฟล์ ubuntu.cfg อีกครั้ง โดยในส่วนของ disk ก็จะแก้ให้เหลือแต่ disk1 และในหัวข้อ boot แก้ให้เหลือแต่ c เพื่อให้การบูตครั้งต่อไปเป็นการบูตจากไดร์ฟ C นั่นเอง หลังจากนั้นก็ทำการสร้างตัว VM อีกครั้งด้วยคำสั่ง xm create จากนั้นตัว VM ของเราก็จะพร้อมใช้งานแล้วครับ