一、簡介
libvirt是Linux上的虛擬化庫,是長期穩(wěn)定的C語言API,支持KVM/QEMU、Xen、LXC等主流虛擬化方案。鏈接:http://libvirt.org/
virsh是libvirt對應(yīng)的shell命令。
二、環(huán)境介紹
OS:Ubuntu12.04.1 LTS
內(nèi)核:Linux3.2.0-33-generic-pae #52-Ubuntu SMP Thu Oct 18 16:39:21 UTC 2012i686 i686 i386 GNU/Linux
libvirt:0.9.8
三、準(zhǔn)備工作
ubuntu安裝,直接apt-getinstall
1、安裝kvm/qemu
sudo apt-get install kvm qemu
2、安裝libvirt
sudo apt-get install libvirt-bin libvirt-dev
3、網(wǎng)橋管理工具
sudo apt-get install bridge-utils
4、統(tǒng)一建模語言
sudo apt-get install uml-utilities
5、vnc 虛擬機查看工具
sudo apt-get install vncviewer vnc4server
四、創(chuàng)建鏡像
在指定目錄下
執(zhí)行 qemu-imgcreate -f raw template.img 3G
這樣就創(chuàng)建了一個大小為3G的鏡像(img)
有人可能問鏡像是什么東西。簡單的說,我們在鏡像上啟動一個虛擬機,這個3G的鏡像就相當(dāng)于這個虛擬機對應(yīng)的磁盤空間。
也有人執(zhí)行 qemu-imgcreate -f qcow2 template.img 3G,(備注:qcow2支持動態(tài)擴張)來獲得一個動態(tài)擴張的鏡像。我沒有用這個,不同情景下可能這種模式更好,有興趣的朋友自己試一下。
五、libvirtxml配置文件
libvirt(包括virsh)使用xml文件對虛擬機進(jìn)行配置,其中包括虛擬機名稱、分配內(nèi)存、vcpu等多種信息。定義、創(chuàng)建虛擬機等操作都需要xml配置文件的參與,因此這里先介紹xml配置文件。我編輯了一個名為template.xml的xml文件,其中定義了一個名為demo的kvm 虛擬機。
<domain type ='kvm'> //虛擬機類型,kvm <name>demo</name> //虛擬機名稱 <memory>1048576</memory>//分配內(nèi)存,單位kb <vcpu>1</vcpu> //分配vcpu,單位個數(shù) <os> <type arch = 'x86_64'machine ='pc'>hvm</type> <bootdev ='cdrom'/> //cd 啟動 <bootdev = 'hd'/> //硬盤啟動 </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset ='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type = 'file'device ='disk'> //對應(yīng)的鏡像,就是之前使用qemu-img命令新建的img文件,注意路徑要正確 <driver name ='qemu'type = 'raw'/> <sourcefile ='/var/lib/lynn/img/template.img'/> <target dev ='hda'bus = 'ide'/> </disk> <disk type = 'file'device ='cdrom'> //可選項,iso通常是操作系統(tǒng)的安裝光盤 <source file ='/var/lib/lynn/img/template.iso'/> <target dev ='hdb'bus = 'ide'/> </disk> <interface type ='bridge'> //libvirt默認(rèn)虛擬機的網(wǎng)絡(luò)配置是NAT模式,就是虛擬機與宿主機的網(wǎng)絡(luò)拓?fù)涫荖AT形式。實際中,許多開發(fā)者更希望使用網(wǎng)橋模式。 <source bridge= 'br0'/> </interface> <input type='tablet'bus='usb'/> <input type = 'mouse'bus ='ps2'/> <graphics type = 'vnc'port ='-1'listen = '0.0.0.0'keymap ='en-us'/> //vnc端口系統(tǒng)自動配置 </devices> </domain> |
六、查看虛擬機列表
查看本機默認(rèn)(kvm)連接的虛擬機:virshlist 。出現(xiàn)如下列信息:
$ virsh list Id 名稱 狀態(tài) ---------------------------------- |
$ virsh list Id 名稱 狀態(tài) ---------------------------------- 1 demo running |
七、定義、啟動、創(chuàng)建虛擬機
這里以上述template.xml配置文件為例
1、定義虛擬機
virsh define template.xml
備注:此時虛擬機只被定義了,并沒有真正啟動。因此此時執(zhí)行virshlist沒有任何虛擬機信息
$ virsh list Id 名稱 狀態(tài) ---------------------------------- |
2、啟動虛擬機
virsh start demo
啟動了由template.xml定義的、名為demo的虛擬機。此時執(zhí)行virshlist出現(xiàn)如下信息:
$ virsh list Id 名稱 狀態(tài) ---------------------------------- 1 demo running |
3、創(chuàng)建虛擬機
創(chuàng)建虛擬機的作用相當(dāng)于定義虛擬機+啟動虛擬機
virsh create template.xml
此時執(zhí)行virshlist,結(jié)果如下:
$ virsh list Id 名稱 狀態(tài) ---------------------------------- 1 demo running |
八、通過vnc查看虛擬機
前面都沒有直觀感受,我們可能需要進(jìn)入虛擬機內(nèi)部進(jìn)行操作。
1、查看vnc端口
$ virsh vncdisplay demo :0 |
2、通過vnc查看虛擬機內(nèi)部
效果如下:(由于新浪博客容量有限,這里就不貼圖了)
備注:這個鏡像是我之前創(chuàng)建好的鏡像,所以已經(jīng)安裝好了操作系統(tǒng)。如果你從頭建了一個新的鏡像,就需要在虛擬機內(nèi)安裝操作系統(tǒng)(操作就像在物理機上安裝os一樣)。
九、關(guān)閉、銷毀、取消定義虛擬機
1、關(guān)閉虛擬機
virsh shutdown demo
虛擬機將慢慢關(guān)閉,就像平時我們關(guān)閉計算機那樣。此步驟與virshstart demo對應(yīng)
2、取消定義虛擬機
virsh undefine demo
libvirt取消demo的定義,系統(tǒng)無法在辨識demo。此步驟與virshdefine template.xml對應(yīng)。
2、銷毀虛擬機
virsh destroy demo
libvirt直接銷毀demo,取消demo的定義。此步驟之后無法在執(zhí)行virshundefine demo。