xml文件內容是來定義kvm中domain的配置信息,可使用virt-install來生成,但須要指定各個選項,那還不如生成一個基本的xml或複製模板來作相應修改。linux
如下是kvm中domain的xml配置解釋。windows
<!-- #提示信息 WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit win7-02 or other application using the libvirt API. --> <domain type='kvm'> #用kvm建立的虛擬機稱爲domain,type定義使用哪一個虛擬機管理程序,值能夠是:xen、kvm、qemu、lxc、kqemu #第二個參數是id,它惟一的標示一個運行的虛擬機,不活躍的客戶端沒有id。 <name>win7-02</name> #name參數爲虛擬機定義了一個簡短的名字,必須惟一 <uuid>6ce14f21-33ac-dc79-5444-f64ccc80ea17</uuid> #uuid,全球惟一,linux下能夠用uuidgen生成 <title>This is my first test kvm</title> #title參數提供一個對虛擬機簡短的說明,它不能包含換行符。 <memory unit='KiB'>2097152</memory> #能夠分配到的最大內存,內存單位由unit定義,單位能夠是:K、KiB、M、MiB、G、GiB、T、TiB。默認是KiB。MiB 2048表明2G <currentMemory unit='KiB'>2097152</currentMemory> #實際分給給客戶端的內存她小於memory的定義,若是沒有定義,值和memory一致。 <vcpu placement='static'>1</vcpu> #vcpu的內容是爲虛擬機最多分配幾個cpu <os> <type arch='x86_64' machine='rhel6.5.0'>hvm</type> #arch指定虛擬機的CPU構架,machine指定機器的類型。hvm代表該OS被設計爲直接運行在裸金屬上面,須要全虛擬化。 <boot dev='cdrom'/> #dev屬性的值能夠是:fd、hd、cdrom、network,boot的元素能夠被設置多個用來創建一個啓動優先規則。 </os> <features> #Hypervisor的特性: <acpi/> #Hypervisors容許特定的CPU/機器特性打開或關閉,全部的特性都在fearures元素中,如下介紹一些在全虛擬化中經常使用的標記: <apic/> #acpi:用於電源管理 <pae/> #pae:擴展物理地址模式,使32位的客戶端支持大於4GB的內存 </features> <cpu mode='host-passthrough'> <topology sockets='1' cores='4' threads='1'/> </cpu> <on_poweroff>destroy</on_poweroff> #當客戶端請求poweroff時執行特定的動做 <on_reboot>restart</on_reboot> #當客戶端請求reboot時執行特定的動做 <on_crash>restart</on_crash> #當客戶端崩潰時執行的動做 #每種狀態下能夠容許指定以下四種行爲: #destory:domain將會被徹底終止,domain的全部資源會被釋放 #restart:domain會被終止,而後以相同的配置從新啓動 #preserver:domain會被終止,它的資源會被保留用來分析 #rename-restart:domain會被終止,而後以一個新名字被從新啓動 <clock offset="localtime" /> #客戶端的時間初始化來自宿主機的時間,大多數操做系統指望硬件時鐘保持UTC格式,UTC也是默認格式,然而Windows機器卻指望它是'localtime' #UTC:當引導時客戶端時鐘同步到UTC時鐘 #localtime:當引導時客戶端時鐘同步到主機時鐘所在的時區 #timezone:The guest clock will be synchronized to the requested timezone using the timezone attribute <devices> #全部的設備都是一個名爲devices元素的子設備 <emulator>/usr/libexec/qemu-kvm</emulator> #emulator元素指定模擬設備二進制文件的全路徑 <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data/vmdisk/win7-02.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/iso/win7.iso'/> <target dev='hda' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/iso/virtio-win-0.1-100.iso'/> <target dev='hdb' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> <disk type='file' device='floppy'> <driver name='qemu' type='raw'/> <source file='/iso/virtio-win-0.1.96_amd64.vfg'/> <target dev='fda' bus='fdc'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> #全部的設備看起來就像一個disk、floppy、cdrom或者一個 paravirtualized driver,他們經過一個disk元素指定。 #type特性包括:file,block,dir,network,device描述disk如何受到客戶端OS的,特性包括:floppy、disk、cdrom、lun,默認是disk #source元素:在disk的type是file時,file屬性指定一個合格的全路徑文件映像做爲客戶端的磁盤,在disk的type是block時,dev屬性指定一個主機設備的路徑做爲disk。 #在disk的type是dir時,dir屬性指定一個全路徑的目錄做爲disk,在disk的type是network時,protocol屬性指定協議用來訪問鏡像,鏡像的值能夠是:nbd,rbd,sheepdog #dev屬性代表本地磁盤在客戶端上的實際名稱,由於實際設備的名稱指定並不能保證映射到客戶端OS上的設備 #bus屬性指定了哪一種類型的磁盤被模擬,值主要有:ide、scsi、virtio、xen、usb、sata #readonly元素:指定客戶端不能修改設備。當一個disk含有type=cdrom,readonly則是默認值。 (disk中virtio-win-0.1-100.iso和virtio-win-0.1.96_amd64.vfg是windows須要的驅動文件,linux系列無需定義) <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='fdc' index='0'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <interface type='bridge'> #類型橋接 <source bridge='br0'/> #橋接的設備名字 <model type='virtio'/> </interface> #串行端口 <serial type='file'> <source path='/tmp/console.log'/> <target port='0'/> </serial> <serial type='pty'> <target port='1'/> </serial> <console type='file'> <source path='/tmp/console.log'/> <target type='serial' port='0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> #input元素:input元素含有一個強制的屬性,type屬性的值能夠是mouse或tablet #bus屬性指定一個明確的設備類型,值能夠是:xen、ps二、usb。 <graphics type='spice' port='6789' autoport='no' listen='0.0.0.0' keymap='en-us'> <listen type='address' address='0.0.0.0'/> #graphics元素:graphics含有一個強制的屬性type,type的值能夠是:sdl、vnc、rdp、desktop、spice <channel name='main' mode='insecure'/> #vnc則啓動vnc服務,port屬性指定tcp端口,若是是-1,則表示自動分配 <channel name='display' mode='insecure'/> #vnc的端口自動分配的話是從5900向上遞增。listen屬性提供一個IP地址給服務器監聽,能夠單獨在listen元素中設置 <channel name='inputs' mode='insecure'/> #passwd屬性提供一個vnc的密碼 <channel name='cursor' mode='insecure'/> #listen元素:listen元素專門針對vnc和spice設置監聽端口等 <channel name='playback' mode='insecure'/> #它包含如下屬性:type、address、network。type的值能夠是address或network。 <channel name='record' mode='insecure'/> #若是設置了type=address,那麼address屬性設置一個ip地址或者主機名來監聽。 <channel name='smartcard' mode='insecure'/>#若是type=network,則network屬性設置一個網絡名稱在libvirt‘s的網絡配置文件中。 <channel name='usbredir' mode='insecure'/> <p_w_picpath compression='auto_glz'/> <streaming mode='all'/> <clipboard copypaste='yes'/> </graphics> <video> <model type='qxl' ram='65536' vram='65536' heads='1'> <acceleration accel3d='yes' accel2d='yes'/> </model> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain> #video元素:是描述聲音設備的容器,爲了向後徹底兼容,若是沒有設置video可是有graphics在xml配置文件中,這時libvirt會按照客戶端類型增長一個默認的video