参考源地址:http://libvirt.org/formatdomain.html

      http://blog.csdn.net/qq250941970/article/details/6022094

libvirt是管理KVM的工具,通过libvirt可以管理配置虚拟机。而虚拟机的配置主要都是通过libvirt的xml文件来实现的,因此xml是十分重要的。

Domain XML format

从官网文档中,我们可以发现xml文件具有一定的格式。

1、Element and attribute overview(元素和属性概述

根元素是所有虚拟机的域。它有两个属性,第一个属性是指定Hypervisor的类型,如”Xen”,“KVM”,“qemu”,“lxc”和“kqemu”。第二个属性是id,运行的guest Domain 的ID,已停用的guest Domain有没有ID值。

  1. <domain type='xen' id=''>
  2. <name>xp</name>
  3. <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
  4. <description>Some human readable description</description>

2、Operating system booting(操作系统的启动

BIOS bootloader

  1. <os>
  2. <type>hvm</type>
  3. <loader readonly='yes' type='rom'>/usr/lib/xen/boot/hvmloader</loader>
  4. <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/nvram/guest_VARS.fd</nvram>
  5. <boot dev='hd'/>
  6. <boot dev='cdrom'/>
  7. <bootmenu enable='yes' timeout=''/>
  8. <smbios mode='sysinfo'/>
  9. <bios useserial='yes' rebootTimeout=''/>
  10. </os>

type 表示全虚拟化还是半虚拟化,hvm表示全虚拟化

loader 全虚拟化才需要的,表示全虚拟化的守护进程所在位置

boot 启动设备列表,如"fd"表示从文件启动, "hd"从硬盘启动, "cdrom"从光驱启动 和 "network"从网络启动,同时启动次序也可以由此顺序决定。

bootmenu 当虚拟机启动时是否启用引导菜单,默认时表示使用引导菜单

Host bootloader

半虚拟化的虚拟机启动一般使用这个,在主机使用一个伪引导来为guest Domain提供一个界面选择启动的内核。下面是个xen下半虚拟化的启动范例

  1. <bootloader>/usr/bin/pygrub</bootloader>
  2. <bootloader_args>--append single</bootloader_args>

Bootloader给出主机操作系统引导程序的完整路径,运行这个引导程序,选择启动的内核,这个会因使用的Hypervisor不同而不同。

bootloader_args该元素的可选bootloader_args允许命令行参数传递到bootloader

Direct kernel boot(内核直接启动)

  1. <os>
  2. <type>hvm</type>
  3. <loader>/usr/lib/xen/boot/hvmloader</loader>
  4. <kernel>/root/f8-i386-vmlinuz</kernel>
  5. <initrd>/root/f8-i386-initrd</initrd>
  6. <cmdline>console=ttyS0 ks=http://example.com/f8-i386/os/</cmdline>
  7. </os>

3、CPU Allocation(cpu资源)

  1. <domain>
  2. ...
  3. <vcpu placement='static' cpuset="1-4,^3,6" current=""></vcpu>
  4. ...
  5. </domain>

所谓cpuset,就是在用户空间中操作cgroup文件系统来执行进程与cpu和进程与内存结点之间的绑定,在cpu调优中一般会用到(稍后再写)

4、基本资源

  1. <memory></memory>
  2. <currentMemory></currentMemory>
  3. <memoryBacking>
  4. <hugepages/>
  5. </memoryBacking>
  6. <memtune>
  7. <hard_limit></hard_limit>
  8. <soft_limit></soft_limit>
  9. <swap_hard_limit></swap_hard_limit>
  10. <min_guarantee></min_guarantee>
  11. </memtune>
  12. <vcpu cpuset="1-4,^3,6" current=""></vcpu>
  1. <cpu match='exact'>
  2. <model>core2duo</model>
  3. <vendor>Intel</vendor>
  4. <topology sockets='' cores='' threads=''/>
  5. <feature policy='disable' name='lahf_lm'/>
  6. </cpu>

这里可以看到各种资源的配置。内存大小、页面大小、memtune内存设定。cpu的model等等

5、 Lifecycle control(操作控制)

  1. <on_poweroff>destroy</on_poweroff>
  2. <on_reboot>restart</on_reboot>
  3. <on_crash>restart</on_crash>

用户请求不同动作时,对domain的执行也不同。

6、 Devices(外设)

  1. <devices>
  2. <disk type='file' snapshot='external'>
  3. <driver name="tap" type="aio" cache="default"/>
  4. <source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
  5. <seclabel relabel='no'/>
  6. </source>
  7. <target dev='hda' bus='ide'/>
  8. <iotune>
  9. <total_bytes_sec></total_bytes_sec>
  10. <read_iops_sec></read_iops_sec>
  11. <write_iops_sec></write_iops_sec>
  12. </iotune>
  13. <boot order=''/>
  14. <encryption type='...'>
  15. ...
  16. </encryption>
  17. <shareable/>
  18. <serial>
  19. ...
  20. </serial>
  21. </disk>
  22. ...
  23. <disk type='network'>
  24. <driver name="qemu" type="raw" io="threads" ioeventfd="on" event_idx="off"/>
  25. <source protocol="sheepdog" name="image_name">
  26. <host name="hostname" port=""/>
  27. </source>
  28. <target dev="hdb" bus="ide"/>
  29. <boot order=''/>
  30. <transient/>
  31. <address type='drive' controller='' bus='' unit=''/>
  32. </disk>
  33. <disk type='network'>
  34. <driver name="qemu" type="raw"/>
  35. <source protocol="rbd" name="image_name2">
  36. <host name="hostname" port=""/>
  37. <snapshot name="snapname"/>
  38. <config file="/path/to/file"/>
  39. </source>
  40. <target dev="hdc" bus="ide"/>
  41. <auth username='myuser'>
  42. <secret type='ceph' usage='mypassid'/>
  43. </auth>
  44. </disk>
  45. <disk type='block' device='cdrom'>
  46. <driver name='qemu' type='raw'/>
  47. <target dev='hdd' bus='ide' tray='open'/>
  48. <readonly/>
  49. </disk>
  50. <disk type='network' device='cdrom'>
  51. <driver name='qemu' type='raw'/>
  52. <source protocol="http" name="url_path">
  53. <host name="hostname" port=""/>
  54. </source>
  55. <target dev='hde' bus='ide' tray='open'/>
  56. <readonly/>
  57. </disk>
  58. <disk type='network' device='cdrom'>
  59. <driver name='qemu' type='raw'/>
  60. <source protocol="https" name="url_path">
  61. <host name="hostname" port=""/>
  62. </source>
  63. <target dev='hdf' bus='ide' tray='open'/>
  64. <readonly/>
  65. </disk>
  66. <disk type='network' device='cdrom'>
  67. <driver name='qemu' type='raw'/>
  68. <source protocol="ftp" name="url_path">
  69. <host name="hostname" port=""/>
  70. </source>
  71. <target dev='hdg' bus='ide' tray='open'/>
  72. <readonly/>
  73. </disk>
  74. <disk type='network' device='cdrom'>
  75. <driver name='qemu' type='raw'/>
  76. <source protocol="ftps" name="url_path">
  77. <host name="hostname" port=""/>
  78. </source>
  79. <target dev='hdh' bus='ide' tray='open'/>
  80. <readonly/>
  81. </disk>
  82. <disk type='network' device='cdrom'>
  83. <driver name='qemu' type='raw'/>
  84. <source protocol="tftp" name="url_path">
  85. <host name="hostname" port=""/>
  86. </source>
  87. <target dev='hdi' bus='ide' tray='open'/>
  88. <readonly/>
  89. </disk>
  90. <disk type='block' device='lun'>
  91. <driver name='qemu' type='raw'/>
  92. <source dev='/dev/sda'/>
  93. <target dev='sda' bus='scsi'/>
  94. <address type='drive' controller='' bus='' target='' unit=''/>
  95. </disk>
  96. <disk type='block' device='disk'>
  97. <driver name='qemu' type='raw'/>
  98. <source dev='/dev/sda'/>
  99. <geometry cyls='' heads='' secs='' trans='lba'/>
  100. <blockio logical_block_size='' physical_block_size=''/>
  101. <target dev='hdj' bus='ide'/>
  102. </disk>
  103. <disk type='volume' device='disk'>
  104. <driver name='qemu' type='raw'/>
  105. <source pool='blk-pool0' volume='blk-pool0-vol0'/>
  106. <target dev='hdk' bus='ide'/>
  107. </disk>
  108. <disk type='network' device='disk'>
  109. <driver name='qemu' type='raw'/>
  110. <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/2'>
  111. <host name='example.com' port=''/>
  112. </source>
  113. <auth username='myuser'>
  114. <secret type='iscsi' usage='libvirtiscsi'/>
  115. </auth>
  116. <target dev='vda' bus='virtio'/>
  117. </disk>
  118. <disk type='network' device='lun'>
  119. <driver name='qemu' type='raw'/>
  120. <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/1'>
  121. <host name='example.com' port=''/>
  122. </source>
  123. <auth username='myuser'>
  124. <secret type='iscsi' usage='libvirtiscsi'/>
  125. </auth>
  126. <target dev='sdb' bus='scsi'/>
  127. </disk>
  128. <disk type='volume' device='disk'>
  129. <driver name='qemu' type='raw'/>
  130. <source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/>
  131. <auth username='myuser'>
  132. <secret type='iscsi' usage='libvirtiscsi'/>
  133. </auth>
  134. <target dev='vdb' bus='virtio'/>
  135. </disk>
  136. <disk type='volume' device='disk'>
  137. <driver name='qemu' type='raw'/>
  138. <source pool='iscsi-pool' volume='unit:0:0:2' mode='direct'/>
  139. <auth username='myuser'>
  140. <secret type='iscsi' usage='libvirtiscsi'/>
  141. </auth>
  142. <target dev='vdc' bus='virtio'/>
  143. </disk>
  144. <disk type='file' device='disk'>
  145. <driver name='qemu' type='qcow2'/>
  146. <source file='/var/lib/libvirt/images/domain.qcow'/>
  147. <backingStore type='file'>
  148. <format type='qcow2'/>
  149. <source file='/var/lib/libvirt/images/snapshot.qcow'/>
  150. <backingStore type='block'>
  151. <format type='raw'/>
  152. <source dev='/dev/mapper/base'/>
  153. <backingStore/>
  154. </backingStore>
  155. </backingStore>
  156. <target dev='vdd' bus='virtio'/>
  157. </disk>
  158. </devices>

Encryption如果存在,指定如何给存储卷加密,查看存储加密页面更多信息

Serial  这个在全虚拟化中比较重要,如果用文件存储,不加下面一段代码,虚拟机无法运行,下面代码是指出硬盘为串口

<serial type='pty'>

<source path='/dev/pts/3'/>

<target port='0'/>

</serial>

  1. <devices>
  2. <controller type='usb' index='' model='ich9-ehci1'>
  3. <address type='pci' domain='' bus='' slot='' function=''/>
  4. </controller>
  5. <controller type='usb' index='' model='ich9-uhci1'>
  6. <master startport=''/>
  7. <address type='pci' domain='' bus='' slot='' function='' multifunction='on'/>
  8. </controller>
  9. ...
  10. </devices>

USB设备的xml描述格式如上所示。

官网关于USB重定向的描述:

Redirected devices

USB device redirection through a character device is supported since after 0.9.5 (KVM only):

  1. <devices>
  2. <redirdev bus='usb' type='tcp'>
  3. <source mode='connect' host='localhost' service=''/>
  4. <boot order=''/>
  5. </redirdev>
  6. <redirfilter>
  7. <usbdev class='0x08' vendor='0x1234' product='0xbeef' version='2.56' allow='yes'/> //0x08指大容量存储设备,文件系统。此处指只有大容量存储设备才能访问虚拟机
  8. <usbdev allow='no'/> //其他USB设备不行
  9. </redirfilter>
  10. </devices>

USB常用设备类别和ID:

http://wenku.baidu.com/link?url=66ymV2VeFOTlFCAEVG2iU0yZ3TM5zzWOzs2ICDUNdfK_ZIbg0CKNxgVCS1j-UMfoWSzQ954WsPPx8tfl9vbJz-Tm8nbizgdLNvaEKoteItS

除此之外,还有网络设备,视频声卡

libvirt笔记(未完待续)的更多相关文章

  1. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  2. jQuery 学习笔记(未完待续)

    一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById()函数        2.使 ...

  3. linux学习笔记---未完待续,缓慢更新

    做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...

  4. oracle-绑定变量学习笔记(未完待续)

    --定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...

  5. Java学习笔记(未完待续)

    变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...

  6. Greys学习笔记(未完待续)

    Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...

  7. Java并发笔记-未完待续待详解

    为什么需要并行? – 业务要求 – 性能 并行计算还出于业务模型的需要 – 并不是为了提高系统性能,而是确实在业务上需要多个执行单元. – 比如HTTP服务器,为每一个Socket连接新建一个处理线程 ...

  8. Java开发中的23+2种设计模式学习个人笔记(未完待续)

    注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...

  9. 堆学习笔记(未完待续)(洛谷p1090合并果子)

    上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...

  10. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

随机推荐

  1. hash冲突解决和javahash冲突解决

    其实就是四种方法的演变 1.开放定址法 具体就是把数据的标志等的对长度取模 有三种不同的取模 线性探测再散列 给数据的标志加增量,取模 平方探测再散列 给数据的标志平方,取模 随机探测再散列 把数据的 ...

  2. [转] Java集合类详解

    集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...

  3. python面试题——网络编程和并发

    1.简述 OSI 七层协议. 物理层(电信号.比特流) 基于电器特性发送高低电压(电信号) RJ45.IEEE802.3 数据链路层(数据帧) 定义了电信号的分组方式,分组方式后来形成了统一的标准,即 ...

  4. Flask文件目录----- db文件

    import sqlite3 import click from flask import current_app, g from flask.cli import with_appcontext d ...

  5. css3 走马灯效果

    纯css3实现了一个正六边形的走马灯效果,记录一下css3动画的学习情况,效果如下: 主要用到的css3技术有:keyframes.perspective.perspective-origin.tra ...

  6. html中如何使用python屏蔽一些基本功能

    进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有“合适的”工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这项工作的合适工具迟早 ...

  7. 笨办法学Python(十八)

    习题 18: 命名.变量.代码.函数 标题包含的内容够多的吧?接下来我要教你“函数(function)”了!咚咚锵!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单 ...

  8. 基于FPGA的VGA显示设计(一)

    前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...

  9. 365. Water and Jug Problem (GCD or BFS) TBC

    https://leetcode.com/problems/water-and-jug-problem/description/ -- 365 There are two methods to sol ...

  10. Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程

    刚刚装Deepin15.7 和 MySQL5.7 发现没有提示用户输入密码的过程(近日发现Linux Mint 和 Ubuntu18 也适用) 百度了一大堆如何修改root密码 也没什么卵用,终于这篇 ...