節(jié)選
Devices 通常需要指定:
1) 模擬器
2) 磁盤
3) 網(wǎng)卡
4) 圖形界面接口
1) 模擬器
范例:
<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>QEMU-fedora-i686</name>
<memory>219200</memory>
<os>
<type arch='i686' machine='pc'>hvm</type>
</os>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
</devices>
<qemu:commandline>
<qemu:arg value='-newarg'/>
<qemu:env name='QEMU_ENV' value='VAL'/>
</qemu:commandline>
</domain>
QEMU emulated guest on x86_64
<emulator>/usr/bin/qemu-system-x86_64</emulator>
KVM hardware accelerated guest on i686
<emulator>/usr/bin/qemu-kvm</emulator>
LXC container driver
<emulator>/usr/libexec/libvirt_lxc</emulator>
libxl hypervisor driver for Xen
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
OpenVZ container driver
VirtualBox hypervisor driver
VMware ESX hypervisor driver
VMware Workstation / Player / Fusion hypervisors driver
Microsoft Hyper-V hypervisor driver
IBM PowerVM hypervisor driver (phyp)
Virtuozzo driver
Bhyve driver
沒看到,沒有???
2) 磁盤
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/demo2.img'/>
<target dev='hda'/>
</disk>
disk
disk 元素 用于描述disks屬性,如下:
type
可選值有 "file", "block", "dir" , "network" , o"volume"
device
描述映射到Guset OS后的角色??捎弥?code>"floppy", "disk", "cdrom", "lun", 默認(rèn)為 "disk"
"lun"僅用于iscsi存儲(chǔ) type為 "block"或者"network",光纖存儲(chǔ) type為“volume” 。
"lun"僅可被識(shí)別為raw設(shè)備,不可用于LVM
model
描述了disk的仿真模式。通常,取決于總線屬性。但是在總線(bus)屬性為"virtio"的時(shí)候,可以擴(kuò)展為"virtio-transitional", "virtio-non-transitional", "virtio"
rawio
定義disk是否需要rawio功能??捎弥?"yes" or "no",默認(rèn)"no"。
僅用于"lun"。
sgio
不知道是個(gè)什么玩意。定義了SG_IO指令是否用于disk??捎弥?filtered" or "unfiltered",默認(rèn)"filtered"。
僅用于"lun"。
snapshot
描述了磁盤快照的默認(rèn)模式
Indicates the default behavior of the disk during disk snapshots:
"internal" 需要一個(gè)qcow2格式的文件,用于存儲(chǔ)執(zhí)行快照后的快照和修改的數(shù)據(jù)文件。
"external" 將把快照文件和live data隔離。
"no" 磁盤不參與快照。
Read-only 磁盤默認(rèn) "no", 其他磁盤模式取決于hypervisor的功能。
3) 網(wǎng)卡
<interface type='network'>
<source network='default'/>
<mac address='24:42:53:21:52:45'/>
</interface>
...
<devices>
<interface type='direct' trustGuestRxFilters='yes'>
<source dev='eth0'/>
<mac address='52:54:00:5d:c7:9e'/>
<boot order='1'/>
<rom bar='off'/>
</interface>
</devices>
...
| 類型 | interface type |
|---|---|
| Virtual network | type='network' |
| Bridge to LAN | type='bridge' |
| Userspace SLIRP stack | type='user' |
| Generic ethernet connection | type='ethernet' |
| Direct attachment to physical interface | type='direct' |
| PCI Passthrough | type='hostdev' |
| Multicast tunnel | type='mcast' |
| TCP tunnel |
type='server' type='client'
|
| UDP unicast tunnel | type='udp' |
| vhost-user interface | type='vhostuser' |
Virtual network
推薦用于動(dòng)態(tài)地址、無線網(wǎng)絡(luò)環(huán)境?;蛘咧鳈C(jī)硬件信息使用<network>元素單獨(dú)描述的多主機(jī)環(huán)境。
| 環(huán)境 | forward mode |
|---|---|
| isolated | no <forward>
|
| NAT | <forward mode='nat'> |
| Route | <forward mode='route'/> |
| directly | via macvtap |
| Bridge |
<forward mode='bridge> ,<forward mode='private'>,<forward mode='vepa'> ,<forward mode='passthrough'>
|
如果forward mode 設(shè)置為bridge,private,vepa,passthrough,那么DNS和DHCP設(shè)置在libvirt外。如果是isolated, nat, routed模式,DNS和DHCP需要由libvirt提供,IP范圍通過 'virsh net-dumpxml [networkname]'設(shè)置。
"default"作為默認(rèn)虛擬網(wǎng)絡(luò),提供指向路由(區(qū)別于指向設(shè)備)的NAT服務(wù),IP范圍192.168.122.0/255.255.255.0。
Guest將會(huì)提供一個(gè)關(guān)聯(lián)的tun設(shè)備,以vnetN命名。也可以使用<target>定義。
如果type=network , portgroup也將一起定義。一個(gè)網(wǎng)絡(luò)可以擁有多個(gè)postgroups。
如果type=network , portid屬性有時(shí)候也會(huì)設(shè)置。這提供了UUID(virNetworkPortPtr對(duì)象),記錄interface和network之間的關(guān)聯(lián)信息。因?yàn)镻ort對(duì)象是隨著startup、shutdown自動(dòng)創(chuàng)建刪除的,所以該屬性只讀。
類似于direct網(wǎng)絡(luò),network也可以定義virtualport元素,對(duì)接vepa (802.1Qbg) ,802.1Qbh compliant switch,Open vSwitch virtual switch。
高級(jí)配置,連到switch啥的,還要靠<network>定義。
Bridge to LAN
推薦用于有固定網(wǎng)線連著的環(huán)境
提供一個(gè)VM直接連接LAN的網(wǎng)橋。在宿主機(jī)上,需要有一個(gè)包含一個(gè)或多個(gè)網(wǎng)卡的橋接設(shè)備。Guest VM擁有一個(gè)tun設(shè)備,以vnetN命名,也可以使用<target>定義。Guest VM的tun設(shè)備和橋接設(shè)備綁定。IP和網(wǎng)絡(luò)配置將取決于LAN環(huán)境。這種方式的VM工作方式和物理機(jī)相同。
Linux系統(tǒng),橋接設(shè)備通常為linux host bridge。有些主機(jī)使用Open vSwitch, 也可以通過配置<virtualport type='openvswitch'/> 到interface來連接Open vSwitch 網(wǎng)橋。Open vSwitch 類型的 <parameters>有兩個(gè)元素 interfaceid和profileid。
interfaceid 用于以UUID標(biāo)示唯一的接口信息。如果沒有配置,在首次的創(chuàng)建的時(shí)候會(huì)自動(dòng)生成。
profileid 用于配置Open vSwithc的接口 "port-profile"。
我將以brige模式為主
4) 圖形接口
Graphical framebuffers
...
<devices>
<graphics type='sdl' display=':0.0'/>
<graphics type='vnc' port='5904' sharePolicy='allow-exclusive'>
<listen type='address' address='1.2.3.4'/>
</graphics>
<graphics type='rdp' autoport='yes' multiUser='yes' />
<graphics type='desktop' fullscreen='yes'/>
<graphics type='spice'>
<listen type='network' network='rednet'/>
</graphics>
</devices>
...
graphics
<graphics>元素 屬性有如下值: sdl, vnc, spice, rdp, desktop or egl-headless
sdl
在宿主機(jī)桌面以窗口顯示。有三個(gè)可選參數(shù):
display
xauth 用于認(rèn)證
fullscreen 可選參數(shù) "yes" "no"
可以配置gl屬性 enable="yes" 或者enable="no" 來開啟或關(guān)閉OpenGL
vnc
開啟VNC server.
port屬性定義TCP端口 (配置 -1 會(huì)自動(dòng)分配)。
autoport屬性是自動(dòng)分配TCP端口的新推薦配置方式。
passwd屬性以明文定義VNC password 。如果passwd為空,VNC access 禁用。
keymap屬性
connected屬性,僅接受keep。
sharePolicy 可選屬性定義share策略。allow-exclusive允許客戶端獨(dú)占, 這是默認(rèn)配置.。force-shared 禁止客戶端獨(dú)占。ignore不設(shè)限。
除了listen/port, QEMU 還支持socket屬性 以允許unix domain socket path 。
websocket屬性亦可配置端口訪問。 ( -1 參數(shù)將自動(dòng)分配端口meaning auto-allocation and autoport having no effect due to security reasons) Since 1.0.6.
雖然VNC天生不支持OpenGL, 它可以配合使用egl-headless方式來進(jìn)行OpenGL渲染
spice
開啟SPICE server。
port 屬性定義TCP端口 (配置 -1 會(huì)自動(dòng)分配)
tlsPort屬性定義安全端口。
autoport屬性是自動(dòng)分配TCP端口的新推薦配置方式。
passwd 屬性以明文定義SPICE password,如果 passwd為空, SPICE access禁用。
keymap 屬性 (看不懂)
connected屬性配置是否允許密碼變更期間的控制連接。 keep 允許保持客戶端連接, disconnect 斷開客戶端連接,fail禁止變更密碼。
defaultMode 屬性設(shè)置默認(rèn)channal安全策略。 secure, insecure 和默認(rèn)值 any 。
SPICE 普通和TLS安全模式都支持??梢栽?code><graphics>下面設(shè)置多個(gè)<channel>,并配置mode屬性為 secure 或insecure,可以支持多個(gè)channel以不同的模式工作在不同的端口。mode屬性會(huì)覆蓋defaultMode屬性的配置。有效的channel names 有 main, display, inputs, cursor, playback, record,smartcard ,usbredir
<graphics type='spice' port='-1' tlsPort='-1' autoport='yes'>
<channel name='main' mode='secure'/>
<channel name='record' mode='insecure'/>
<image compression='auto_glz'/>
<streaming mode='filter'/>
<clipboard copypaste='no'/>
<mouse mode='client'/>
<filetransfer enable='no'/>
<gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/>
</graphics>
Spice 支持音頻,圖片,流的壓縮。這些通過compression屬性設(shè)置,包含如下:
image 設(shè)置圖片壓縮 (參數(shù):auto_glz, auto_lz, quic, glz,lz, off)
jpeg JPEG在wan傳輸時(shí)壓縮 (參數(shù)auto, never·,always)zlibwan圖片的壓縮 (acceptsauto,never,always)playback音頻流壓縮 (onoroff`)
streaming元素 設(shè)置streaming mode, mode屬性設(shè)置為filter, al or off
clipboard 用于設(shè)備復(fù)制粘貼功能,默認(rèn)開啟??梢酝ㄟ^設(shè)置 copypaste 參數(shù)為no關(guān)閉。
mouse 設(shè)置鼠標(biāo)模式,可以設(shè)置mode屬性為server or client。 如果沒有設(shè)置,qemu默認(rèn)使用client mode。
filetransfer 設(shè)置文件傳輸功能。默認(rèn)開啟,可以通過設(shè)置enable屬性為no關(guān)閉。
Spice還可以開啟OpenGL在服務(wù)器端渲染。 可以通過配置<gl>元素, 設(shè)置enable屬性來配置是否開啟OpenGL支持。因?yàn)樾枰猆NIX sockets,所以僅能在本地工作。配置listentype為 'socket' or 'none'。如果需要遠(yuǎn)程支持OpenGL,考慮與egl-headless 搭配使用。沒有原生Spice OpenGL性能好。
默認(rèn),QEMU選擇第一個(gè)可用GPU DRM 渲染節(jié)點(diǎn)。也可以手動(dòng)指定節(jié)點(diǎn)路徑。
rdp
啟動(dòng)RDP server.
port屬性定義TCP端口 (配置 -1 會(huì)自動(dòng)分配)。
autoport屬性是自動(dòng)分配TCP端口的新推薦配置方式。如果使用VirtualBox driver, autoport會(huì)在VM啟動(dòng)的時(shí)候,選擇 3389-3689之間的可用端口。
multiUser 屬性是布爾值,配置是否允許到VM的同時(shí)多連接。
replaceUser屬性是布爾值,配置當(dāng)新客戶端連接到VM時(shí)是否關(guān)閉已存在的連接。
desktop
類似于sdl,在宿主機(jī)桌面顯示。只是使用VirtualBox viewer。可選屬性display fullscreen。
egl-headless
提供本地和遠(yuǎn)程的OpenGL加速。作為對(duì)比,原生OpenGL support僅能工作在宿主機(jī)本地(使用UNIX sockets),不過原生OpenGL support擁有更好性能。
因?yàn)椴惶峁﹫D形接口,所以必須與vnc或spice一起使用。僅支持QEMU。
<gl>的子元素<rendernode >可以被用于指定用于OpenGL渲染的到DRI設(shè)備的絕對(duì)路徑
listen
<listen>元素用于設(shè)置監(jiān)聽設(shè)備。 僅 vnc, spice, rdp 支持。
address
指定監(jiān)聽哪個(gè)ip或者h(yuǎn)ostname
也可以忽視這個(gè)參數(shù),調(diào)用config files配置。
如果在listen和graphics元素中都有配置,必須保持一致
network
以網(wǎng)絡(luò)定義監(jiān)聽地址。網(wǎng)絡(luò)需要存在于libvirt的網(wǎng)絡(luò)列表。該網(wǎng)絡(luò)會(huì)被解析,選擇一個(gè)合適的地址寫入XML文件中。
比如,IPV4地址段,會(huì)選擇該段第一個(gè)地址作為監(jiān)聽地址寫入XML文件。如果網(wǎng)絡(luò)是網(wǎng)橋,網(wǎng)橋的IPV4地址會(huì)被使用。如果direct模式,第一個(gè)forward設(shè)備的第一個(gè)地址會(huì)被使用。
socket
監(jiān)聽在unix socket。支持vnc和spice。
我覺得用不到,不研究 。
none
沒有任何屬性。
Libvirt支持APIs接口virDomainOpenGraphics()和virDomainOpenGraphicsFD()。
必須通過這個(gè)兩個(gè)接口之一,發(fā)送FD到QEMU來連接圖形設(shè)備。
支持vnc 和 spice