1、簡介shell
libvirt是Linux上的虛擬化庫,是長期穩定的C語言API,支持KVM/QEMU、Xen、LXC等主流虛擬化方案。連接:http://libvirt.org/ubuntu
virsh是libvirt對應的shell命令。api
2、環境介紹網絡
OS:Ubuntu 12.04.1 LTSdom
內核:Linux 3.2.0-33-generic-pae #52-Ubuntu SMP Thu Oct 18 16:39:21 UTC 2012 i686 i686 i386 GNU/Linux ide
libvirt:0.9.8工具
3、準備工做spa
ubuntu安裝,直接apt-get install操作系統
1、安裝kvm/qemurest
sudo apt-get install kvm qemu
2、安裝libvirt
sudo apt-get install libvirt-bin libvirt-dev
3、網橋管理工具
sudo apt-get install bridge-utils
4、統一建模語言
sudo apt-get install uml-utilities
5、vnc 虛擬機查看工具
sudo apt-get install vncviewer vnc4server
4、建立鏡像
在指定目錄下
執行 qemu-img create -f raw template.img 3G
這樣就建立了一個大小爲3G的鏡像(img)
有人可能問鏡像是什麼東西。簡單的說,咱們在鏡像上啓動一個虛擬機,這個3G的鏡像就至關於這個虛擬機對應的磁盤空間。
也有人執行 qemu-img create -f qcow2 template.img 3G,(備註:qcow2支持動態擴張)來得到一個動態擴張的鏡像。我沒有用這個。不一樣情景下可能這種模式更好,有興趣的朋友本身試一下。
5、libvirt xml配置文件
libvirt(包括virsh)使用xml文件對虛擬機進行配置,其中包括虛擬機名稱、分配內存、vcpu等多種信息。定義、建立虛擬機等操做都須要xml配置文件的參與,所以這裏先介紹xml配置文件。我編輯了一個名爲template.xml的xml文件,其中定義了一個名爲demo的kvm 虛擬機。
<domain type = 'kvm'> //虛擬機類型,kvm <name>demo</name> //虛擬機名稱 <memory>1048576</memory> //分配內存,單位kb <vcpu>1</vcpu> //分配vcpu,單位個數 <os> <type arch = 'x86_64'machine = 'pc'>hvm</type> <boot dev = 'cdrom'/> //cd 啓動 <boot dev = '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'> //對應的鏡像,就是以前使用qemu-img命令新建的img文件,注意路徑要正確 <driver name = 'qemu' type = 'raw'/> <source file = '/var/lib/lynn/img/template.img'/> <target dev = 'hda' bus = 'ide'/> </disk> <disk type = 'file' device = 'cdrom'> //可選項,iso一般是操做系統的安裝光盤 <source file = '/var/lib/lynn/img/template.iso'/> <target dev = 'hdb' bus = 'ide'/> </disk> <interface type = 'bridge'> //libvirt默認虛擬機的網絡配置是NAT模式,就是虛擬機與宿主機的網絡拓撲是NAT形式。實際中,許多開發者更但願使用網橋模式。 <source bridge = 'br0'/> </interface> <input type ='tablet' bus='usb'/> <input type = 'mouse' bus = 'ps2'/> <graphics type = 'vnc' port = '-1' listen = '0.0.0.0' autoport = 'yes' keymap = 'en-us'/> //vnc端口系統自動配置 </devices> </domain>
6、查看虛擬機列表
查看本機默認(kvm)鏈接的虛擬機:virsh list 。出現以下列信息:
$ virsh list Id 名稱 狀態 ---------------------------------- |
$ virsh list Id 名稱 狀態 ---------------------------------- 1 demo running |
7、定義、啓動、建立虛擬機
這裏以上述template.xml配置文件爲例
1、定義虛擬機
virsh define template.xml
備註:此時虛擬機只被定義了,並無真正啓動。所以此時執行virsh list沒有任何虛擬機信息
$ virsh list Id 名稱 狀態 ---------------------------------- |
2、啓動虛擬機
virsh start demo
啓動了由template.xml定義的、名爲demo的虛擬機。此時執行virsh list出現以下信息:
$ virsh list Id 名稱 狀態 ---------------------------------- 1 demo running |
3、建立虛擬機
建立虛擬機的做用至關於定義虛擬機+啓動虛擬機
virsh create template.xml
此時執行virsh list,結果以下:
$ virsh list Id 名稱 狀態 ---------------------------------- 1 demo running |
8、經過vnc查看虛擬機
前面都沒有直觀感覺,咱們可能須要進入虛擬機內部進行操做。
1、查看vnc端口
$ virsh vncdisplay demo :0 |
2、經過vnc查看虛擬機內部
$ vncviewer 127.0.0.1:0 |
效果以下:
備註:這個鏡像是我以前建立好的鏡像,因此已經安裝好了操做系統。若是你從頭建了一個新的鏡像,就須要在虛擬機內安裝操做系統(操做就像在物理機上安裝os同樣)。
9、關閉、銷燬、取消定義虛擬機
1、關閉虛擬機
virsh shutdown demo
虛擬機將慢慢關閉,就像平時咱們關閉計算機那樣。此步驟與virsh start demo對應
2、取消定義虛擬機
virsh undefine demo
libvirt取消demo的定義,系統沒法在辨識demo。此步驟與virsh define template.xml對應。
2、銷燬虛擬機
virsh destroy demo
libvirt直接銷燬demo,取消demo的定義。此步驟以後沒法在執行virsh undefine demo。