KVM Overlay Disk Image
+-------------------------+
| Overlay Image 1 |
| |
| - Update to CentOS 5.5 | +-------------------------+
| - Update kernel | | Overlay Image 2 |
| - Install web server | | |
| - Add new user | | - Do nothing |
| | | |
| 167 MB after commit | | 256 kB |
+-------------------------+ +-------------------------+
^ ^
| |
| |
+---------------------------------+
| |
| Base Image |
| |
| (CentOS 5.4 i386) |
| |
| 680 MB |
| |
+---------------------------------+
ในตัวอย่างนี้ เป็นการทดลองสร้าง Overlay Disk Image 2 ตัว บน Base Image ที่ติดตั้ง CentOS 5.4 โดยที่ตัวที่ 1 มีการเปลี่ยนแปลงข้อมูลใน Disk (Update/Install Software, Add User) หลังจากทำการ Commit แล้วพบว่า Overlay Disk มีขนาดเพิ่มขึ้น ในขณะที่ตัวที่ 2 ไม่มีการเปลี่ยนแปลงข้อมูลใด ๆ พบว่ามีขนาดเท่าเดิม รายละเอียดการทดลองมีดังนี้
PATH
เพื่อความสะดวกในการพิมพ์คำสั่ง kvm ที่ได้จากการ compile ในการบ้านที่ 3 (cs797-ex3) จึงมีการกำหนดตัวแปร PATH โดยใช้คำสั่ง export
$ export PATH=/opt/kvm/bin:$PATH
Create Base Image
สร้าง Disk Image สำหรับติดตั้ง Guest OS โดยกำหนดให้มีขนาด 2GB ในรูปแบบ qcow2
$ qemu-img create -f qcow2 centos_base.img 2G
Install Guest OS on Base Image
ทำการติดตั้ง CentOS 5.4 ลงบน Base Image โดยมีขั้นตอนดังนี้
- ดาวน์โหลดไฟล์สำหรับติดตั้ง ในตัวอย่างนี้เป็นการติดตั้งผ่าน http
$ wget http://mirror.issp.co.th/centos/5.4/isos/i386/CentOS-5.4-i386-netinstall.iso
- ทำการติดตั้ง OS โดยเรียกใช้คำสั่ง qemu-system-x86_64 (ติดตั้งแบบ Text Mode โดยการพิมพ์ linux text ที่ boot prompt)
$ qemu-system-x86_64 -hda centos_base.img -cdrom CentOS-5.4-i386-netinstall.iso -boot d -m 256
- ติดตั้งโดยไม่เลือกกลุ่มของซอฟต์แวร์ใด ๆ เลย เพื่อให้ Guest มีขนาดเล็ก
- ดำเนินการติดตั้งจนแล้วเสร็จ
- ทำการ Reboot
- ทำการตรวจสอบข้อมูลของ Guest (Release, Kernel Version, Disk Usage, etc.)
Create Overlay Disk Image
- สร้าง Overlay Disk Image ขึ้นมา 2 ตัว
$ qemu-img create -f qcow2 -b centos_base.img centos_ovl1.img
$ qemu-img create -f qcow2 -b centos_base.img centos_ovl2.img
Modify Guest OS on Overlay 1
- เปิด Guest ขึ้นมาโดยใช้ Overalay 1 (Disk Image) ในคำสั่งเพิ่ม Option -snapshot ด้วย
$ qemu-system-x86_64 -hda centos_ovl1.img -boot c -m 256 -snapshot
- Install/Update ซอฟต์แวร์บน Guest
$ yum update centos-release
$ yum update kernel
$ yum install httpd
$ yum install finger
- Add user ชื่อ phithak
$ mkdir -p /home/users
$ useradd -g users -c "Phithak Thaenkaew" -d /home/users/phithak phithak
$ passwd phithak
$ finger phithak
- เข้าสู่ Command Mode ด้วยการกดปุ่ม Ctrl + Alt + 2
- ทำการ Commit ด้วยคำสั่ง commit all เพื่อบันทึกความเปลี่ยนแปลงลงบน Overlay 1
- ปิด Guest ด้วยคำสั่ง quit ในหน้า Command Mode
(qemu) quit
Guest OS on Overlay 2
- เปิด Guest ขึ้นมาโดยใช้ Overalay 2 (Disk Image)
$ qemu-system-x86_64 -hda centos_ovl2.img -boot c -m 256 -snapshot
- ตรวจสอบข้อมูลของ Guest พบว่า เหมือนกับที่ติดตั้งให้ Base Image โดยไม่ได้มีการ Update ใด ๆ ทั้งสิ้น
- จากนั้น Shutdown
Guest OS on Overlay 1 (Again)
- เปิด Guest ขึ้นมา โดยใช้ Overlay 1 อีกครั้ง พบว่า Version ตอน Boot เป็น 5.5
- ตรวจสอบ Guest แล้วพบว่า ข้อมูลที่ได้ทำการ Update/Install ไว้ ยังอยู่ครบถ้วน
Image Size
- เปรียบเทียบขนาดของ Image ทั้งสาม (ก่อนและหลัง Commit) พบว่า Base Image มีขนาด 680 MB, Overlay 1 มีขนาดเพิ่มขึ้นเป็น 167 MB, Overlay 2 มีขนาด 256 KB เท่ากับตอนที่สร้าง
(ที่มา: การบ้าน หัวข้อ CS797 Exercise 4 – Create a COW Overlay Disk and use QEMU’s commit command วิชา CS797 Advanced Topics in Computer Science – Introduction to Computer Virtualization ภาคเรียนที่ 1/2553 อาจารย์ผู้สอน ดร.กษิดิศ ชาญเชี่ยว ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยธรรมศาสตร์)
References
- http://wiki.qemu.org/download/qemu-doc.html
- http://www.h7.dion.ne.jp/~qemu-win/HowToFloppyCdrom-en.html
Mirror Site
- http://phithak.com/kvm-overlay-disk-image
- http://phithak.wordpress.com/2010/07/18/kvm-overlay-disk-image/














