libvirt xml文件解析 -- Devices

节选
Devices 通常需要指定:
1) 模拟器
2) 磁盘
3) 网卡
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后的角色。可用值"floppy", "disk", "cdrom", "lun", 默认为 "disk"
"lun"仅用于iscsi存储 type为 "block"或者"network",光纤存储 type为“volume”
"lun"仅可被识别为raw设备,不可用于LVM

model

描述了disk的仿真模式。通常,取决于总线属性。但是在总线(bus)属性为"virtio"的时候,可以扩展为"virtio-transitional", "virtio-non-transitional", "virtio"

rawio

定义disk是否需要rawio功能。可用值 "yes" or "no",默认"no"。
仅用于"lun"

sgio

不知道是个什么玩意。定义了SG_IO指令是否用于disk。可用值"filtered" or "unfiltered",默认"filtered"。
仅用于"lun"

snapshot

描述了磁盘快照的默认模式
Indicates the default behavior of the disk during disk snapshots:
"internal" 需要一个qcow2格式的文件,用于存储执行快照后的快照和修改的数据文件。
"external" 将把快照文件和live data隔离。
"no" 磁盘不参与快照。
Read-only 磁盘默认 "no", 其他磁盘模式取决于hypervisor的功能。


3) 网卡

    <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

推荐用于动态地址、无线网络环境。或者主机硬件信息使用<network>元素单独描述的多主机环境。

环境 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 设置为bridge,private,vepa,passthrough,那么DNS和DHCP设置在libvirt外。如果是isolated, nat, routed模式,DNS和DHCP需要由libvirt提供,IP范围通过 'virsh net-dumpxml [networkname]'设置。

"default"作为默认虚拟网络,提供指向路由(区别于指向设备)的NAT服务,IP范围192.168.122.0/255.255.255.0

Guest将会提供一个关联的tun设备,以vnetN命名。也可以使用<target>定义。

如果type=network , portgroup也将一起定义。一个网络可以拥有多个postgroups。
如果type=network , portid属性有时候也会设置。这提供了UUID(virNetworkPortPtr对象),记录interface和network之间的关联信息。因为Port对象是随着startup、shutdown自动创建删除的,所以该属性只读。

类似于direct网络,network也可以定义virtualport元素,对接vepa (802.1Qbg) ,802.1Qbh compliant switch,Open vSwitch virtual switch。

高级配置,连到switch啥的,还要靠<network>定义。

Bridge to LAN

推荐用于有固定网线连着的环境

提供一个VM直接连接LAN的网桥。在宿主机上,需要有一个包含一个或多个网卡的桥接设备。Guest VM拥有一个tun设备,以vnetN命名,也可以使用<target>定义。Guest VM的tun设备和桥接设备绑定。IP和网络配置将取决于LAN环境。这种方式的VM工作方式和物理机相同。

Linux系统,桥接设备通常为linux host bridge。有些主机使用Open vSwitch, 也可以通过配置<virtualport type='openvswitch'/> 到interface来连接Open vSwitch 网桥。Open vSwitch 类型的 <parameters>有两个元素 interfaceidprofileid
interfaceid 用于以UUID标示唯一的接口信息。如果没有配置,在首次的创建的时候会自动生成。
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

在宿主机桌面以窗口显示。有三个可选参数:
display
xauth 用于认证
fullscreen 可选参数 "yes" "no"
可以配置gl属性 enable="yes" 或者enable="no" 来开启或关闭OpenGL

vnc

开启VNC server.
port属性定义TCP端口 (配置 -1 会自动分配)。
autoport属性是自动分配TCP端口的新推荐配置方式。
passwd属性以明文定义VNC password 。如果passwd为空,VNC access 禁用。
keymap属性
connected属性,仅接受keep
sharePolicy 可选属性定义share策略。allow-exclusive允许客户端独占, 这是默认配置.。force-shared 禁止客户端独占。ignore不设限。

除了listen/port, QEMU 还支持socket属性 以允许unix domain socket path 。

websocket属性亦可配置端口访问。 ( -1 参数将自动分配端口meaning auto-allocation and autoport having no effect due to security reasons) Since 1.0.6.

虽然VNC天生不支持OpenGL, 它可以配合使用egl-headless方式来进行OpenGL渲染

spice

开启SPICE server。
port 属性定义TCP端口 (配置 -1 会自动分配)
tlsPort属性定义安全端口。
autoport属性是自动分配TCP端口的新推荐配置方式。
passwd 属性以明文定义SPICE password,如果 passwd为空, SPICE access禁用。
keymap 属性 (看不懂)
connected属性配置是否允许密码变更期间的控制连接。 keep 允许保持客户端连接, disconnect 断开客户端连接,fail禁止变更密码。
defaultMode 属性设置默认channal安全策略。 secure, insecure 和默认值 any

SPICE 普通和TLS安全模式都支持。可以在<graphics>下面设置多个<channel>,并配置mode属性为 secureinsecure,可以支持多个channel以不同的模式工作在不同的端口。mode属性会覆盖defaultMode属性的配置。有效的channel names 有 main, display, inputs, cursor, playback, recordsmartcardusbredir

<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属性设置,包含如下:
image 设置图片压缩 (参数:auto_glz, auto_lz, quic, glz,lz, off)
jpeg JPEG在wan传输时压缩 (参数auto, never·,always)zlibwan图片的压缩 (acceptsauto,never,always)playback音频流压缩 (onoroff`)

streaming元素 设置streaming mode, mode属性设置为filter, al or off
clipboard 用于设备复制粘贴功能,默认开启。可以通过设置 copypaste 参数为no关闭。
mouse 设置鼠标模式,可以设置mode属性为server or client。 如果没有设置,qemu默认使用client mode。
filetransfer 设置文件传输功能。默认开启,可以通过设置enable属性为no关闭。

Spice还可以开启OpenGL在服务器端渲染。 可以通过配置<gl>元素, 设置enable属性来配置是否开启OpenGL支持。因为需要UNIX sockets,所以仅能在本地工作。配置listentype为 'socket' or 'none'。如果需要远程支持OpenGL,考虑与egl-headless 搭配使用。没有原生Spice OpenGL性能好。
默认,QEMU选择第一个可用GPU DRM 渲染节点。也可以手动指定节点路径。

rdp

启动RDP server.
port属性定义TCP端口 (配置 -1 会自动分配)。
autoport属性是自动分配TCP端口的新推荐配置方式。如果使用VirtualBox driver, autoport会在VM启动的时候,选择 3389-3689之间的可用端口。
multiUser 属性是布尔值,配置是否允许到VM的同时多连接。
replaceUser属性是布尔值,配置当新客户端连接到VM时是否关闭已存在的连接。

desktop

类似于sdl,在宿主机桌面显示。只是使用VirtualBox viewer。可选属性display fullscreen

egl-headless

提供本地和远程的OpenGL加速。作为对比,原生OpenGL support仅能工作在宿主机本地(使用UNIX sockets),不过原生OpenGL support拥有更好性能。
因为不提供图形接口,所以必须与vnc或spice一起使用。仅支持QEMU。
<gl>的子元素<rendernode >可以被用于指定用于OpenGL渲染的到DRI设备的绝对路径

listen

<listen>元素用于设置监听设备。 仅 vnc, spicerdp 支持。

address
指定监听哪个ip或者hostname
也可以忽视这个参数,调用config files配置。
如果在listengraphics元素中都有配置,必须保持一致
network
以网络定义监听地址。网络需要存在于libvirt的网络列表。该网络会被解析,选择一个合适的地址写入XML文件中。
比如,IPV4地址段,会选择该段第一个地址作为监听地址写入XML文件。如果网络是网桥,网桥的IPV4地址会被使用。如果direct模式,第一个forward设备的第一个地址会被使用。
socket
监听在unix socket。支持vncspice
我觉得用不到,不研究 。

none
没有任何属性。
Libvirt支持APIs接口virDomainOpenGraphics()virDomainOpenGraphicsFD()
必须通过这个两个接口之一,发送FD到QEMU来连接图形设备。
支持vncspice

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • 虚拟化技术概览KVM简介KVM的管理操作 一、虚拟化技术概览 (一)虚拟化技术类型: 主机虚拟化:xen, kvm...
    哈喽别样阅读 1,801评论 0 5
  • 图形设备允许与来宾操作系统进行图形交互。访客通常会配置帧缓冲区或文本控制台,以允许与管理员进行交互。 graphi...
    王鸣南曲阅读 1,466评论 0 0
  • 一.虚拟化技术的介绍 (1)虚拟化技术类型: 1.主机虚拟化:xen,kvm.virtualbox.openv2....
    楠人帮阅读 1,955评论 0 5
  • 都是自己的学习笔记,仅供参考。 核心模块-Nova简介 管理instance生命周期生成,调度,终止实例作用:处理...
    廖马儿阅读 3,557评论 0 3
  • 范例文件:KVM hardware accelerated guest on i686 如下详细解析: 1) Ge...
    偷油考拉阅读 1,464评论 0 0