Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.17. Devices

这一组 XML 元素都用于描述提供给客户机虚拟机域的设备。以下所有设备都声明为主设备元素的子项。<>
支持以下虚拟设备:
  • virtio-scsi-pci - PCI 总线存储设备
  • virtio-blk-pci - PCI 总线存储设备
  • virtio-net-pci - PCI 总线网络设备也称为 virtio-net
  • virtio-serial-pci - PCI 总线输入设备
  • virtio-balloon-pci - PCI 总线内存 balloon 设备
  • virtio-rng-pci - PCI 总线虚拟随机数生成器设备
重要
如果创建 virtio 设备,其中将向量数设定为高于 32 的值,则设备的行为就像在 Red Hat Enterprise Linux 6 中被设置为零值而在 Enterprise Linux 7 中一样。如果平台中的任何 virtio 设备中的向量数设置为 33 或更高版本,则生成的向量设置不匹配会导致迁移错误。因此,建议您不要将向量值设置为大于 32。除 virtio-balloon-pcivirtio-rng-pci 以外的所有 virtio 设备都接受 向量 参数。

图 23.26. 设备 - 子元素


  ...
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
  </devices>
  ...

仿真器元素的内容指定到设备模型 <模拟器> 二进制文件的完全限定路径。capabilities XML 指定要用于每个特定域类型或架构组合的推荐默认模拟器。

23.17.1. 硬盘驱动器、软盘和 CD-ROMs

域 XML 的这一部分指定了类似磁盘的任何设备,包括 <磁盘> 元素中指定的任何软盘、硬盘、CD-ROM 或泛虚拟化驱动程序。

图 23.27. devices - 硬盘、软盘、CD-ROM 示例


    <disk type='network'>
      <driver name="qemu" type="raw" io="threads" ioeventfd="on" event_idx="off"/>
      <source protocol="sheepdog" name="image_name">
        <host name="hostname" port="7000"/>
      </source>
      <target dev="hdb" bus="ide"/>
      <boot order='1'/>
      <transient/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>

图 23.28. devices - 硬盘、软盘、CD-ROM 示例 2


    <disk type='network'>
      <driver name="qemu" type="raw"/>
      <source protocol="rbd" name="image_name2">
        <host name="hostname" port="7000"/>
      </source>
      <target dev="hdd" bus="ide"/>
      <auth username='myuser'>
        <secret type='ceph' usage='mypassid'/>
      </auth>
    </disk>

图 23.29. 设备 - 硬盘、软盘、CD-ROM 示例 3


    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="http" name="url_path">
        <host name="hostname" port="80"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>

图 23.30. 设备 - 硬盘、软盘、CD-ROM 示例 4


    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="https" name="url_path">
        <host name="hostname" port="443"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="ftp" name="url_path">
        <host name="hostname" port="21"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>

图 23.31. 设备 - 硬盘、软盘、CD-ROM 示例 5


    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="ftps" name="url_path">
        <host name="hostname" port="990"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="tftp" name="url_path">
        <host name="hostname" port="69"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='block' device='lun'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/sda'/>
      <target dev='sda' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='3' unit='0'/>
    </disk>

图 23.32. devices - 硬盘、软盘、CD-ROM 示例 6


    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/sda'/>
      <geometry cyls='16383' heads='16' secs='63' trans='lba'/>
      <blockio logical_block_size='512' physical_block_size='4096'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='blk-pool0' volume='blk-pool0-vol0'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/2'>
        <host name='example.com' port='3260'/>
      </source>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>

图 23.33. devices - 硬盘、软盘、CD-ROM 示例 7


    <disk type='network' device='lun'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/1'>
       iqn.2013-07.com.example:iscsi-pool
        <host name='example.com' port='3260'/>
      </source>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='sda' bus='scsi'/>
    </disk>
    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>

图 23.34. devices - 硬盘、软盘、CD-ROM 示例 8


    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-pool' volume='unit:0:0:2' mode='direct'/>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>
     <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/tmp/test.img' startupPolicy='optional'/>
      <target dev='sdb' bus='scsi'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' discard='unmap'/>
      <source file='/var/lib/libvirt/images/discard1.img'/>
      <target dev='vdb' bus='virtio'/>
      <alias name='virtio-disk1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </disk>
  </devices>
  ...

23.17.1.1. 磁盘元素

<disk> 元素是描述磁盘的主容器。属性 类型 可与 <disk> 元素一起使用。允许以下类型:
  • file
  • block
  • dir
  • network
如需更多信息,请参阅 libvirt 上游页面

23.17.1.2. 源元素

代表磁盘源。磁盘源取决于磁盘类型属性,如下所示:
  • <file> - file 属性指定到磁盘所在的文件的完全限定路径。
  • <block> - dev 属性指定充当磁盘的主机设备的完全限定路径。
  • <dir> - dir 属性指定用作磁盘的目录的完全限定路径。
  • <network> - protocol 属性指定用于访问所请求镜像的协议。可能的值有: nbdiscirbdsheepdoggluster
    • 如果 协议 属性是 rbdsheepdoggluster,则 其他属性 是必须的。此属性指定将使用哪些卷和镜像。
    • 如果 协议 属性是 nbd,则 name 属性是可选的。
    • 如果 protocol 属性 ,则 name 属性可以包含逻辑单元号,用斜杠将其与目标的名称分开。例如:iqn.2013-07.com.example:iscsi-pool/1。如果未指定,则默认 LUN 为零。
  • <卷> - 底层磁盘源由 池和 属性表示。
    • <pool> - 磁盘源所在的存储池(由 libvirt管理)的名称。
    • <卷> - 用作磁盘源的存储卷(由 libvirt管理)的名称。
      volume 属性的值是 virsh vol-list [pool-name]的 Name 列的输出。
当磁盘类型是 网络 时, 可能具有零个或更多 主机 子元素,用于指定要连接的主机物理计算机,包括: type='dir'type='network'。对于代表 CD-ROM 或软盘( device 属性)的文件磁盘类型,可以在无法访问源文件时为磁盘定义操作的策略。这可以通过将 startupPolicy 属性设置为以下值之一来实现:
  • 如果因任何原因而丢失,强制 会导致失败。这是默认的设置。
  • 如果在引导时缺少,则必需会导致失败,如果迁移、恢复或恢复缺少,则会导致失败。
  • 如果开始尝试中缺少 可选 操作,则可选 drops。

23.17.1.3. mirror 元素

如果虚拟机监控程序已启动了一个 BlockCopy 操作,其中属性文件中的镜像位置最终具有与源相同的内容,并且采用属性格式的文件格式(这可能与源的格式不同)。<>如果属性就绪,则代表磁盘已已知为 pivot;否则,磁盘可能仍会复制。现在,这个元素只在输出中有效,在输入时会忽略它。

23.17.1.4. target 元素

<target> 元素控制磁盘被公开给客户端虚拟机操作系统的总线或设备。dev 属性指示逻辑设备名称。指定的实际设备名称不能保证映射到客户端虚拟机操作系统中的设备名称。可选的 bus 属性指定要模拟的磁盘设备类型;可能的值特定于驱动程序,典型的值是 ide、scsi、virtio kvmusbsata。如果省略,总线类型会从设备名称的样式中推断出来。例如:名为 "sda" 的设备通常使用 SCSI 总线导出。可选的属性 tray 表示可移动磁盘(如 CD-ROM 或 Floppy 磁盘)的托盘状态,其中值可以是 打开或关闭默认设置 关闭

23.17.1.5. iotune 元素

可选的 <iotune> 元素提供额外的每个设备 I/O 调优功能,但每个设备的值可能会有所不同(这与 blkiotune 元素不同(将全局应用到域)。此元素具有以下可选子元素(请注意,任何未指定或所有子元素的任何子元素,值为 0, 代表没有限制):
  • <total_bytes_sec> - 每秒的吞吐量总量(以字节/秒为单位)。这个元素不能与 <read_bytes_sec><write_bytes_sec> 一同使用。
  • <read_bytes_sec> - 每秒读取吞吐量限制(以字节/秒为单位)。
  • <write_bytes_sec> - 写入吞吐量限制(以字节/秒为单位)。
  • <total_iops_sec> - 每秒 I/O 操作总数。这个元素不能与 <read_iops_sec><write_iops_sec> 一起使用。
  • <read_iops_sec> - 每秒读取 I/O 操作。
  • <write_iops_sec> - 每秒写入 I/O 操作。

23.17.1.6. Driver 元素

可选的 <driver> 元素允许您指定与用于提供磁盘的虚拟机监控程序驱动程序相关的更多详情。可以使用以下选项:
  • 如果虚拟机监控程序支持多个后端驱动程序,则 name 属性选择主后端驱动程序名称,而可选类型属性则提供子类型。
  • 可选的 cache 属性控制缓存机制。可能的值有: default,none,writethrough,writeback,directsync (与 writethrough 类似,但它会绕过主机物理机器页面缓存)和 不安全 (主机物理机器可能会缓存所有磁盘 I/O,并忽略来自客户机虚拟机同步请求)。
  • 可选的 error_policy 属性控制管理程序在磁盘读取或写入错误上的行为方式。可能的值有 停止报告忽略,以及 enospaceerror_policy 的默认设置是 report。还有一个可选的 rerror_policy,用于控制仅读取错误的行为。如果没有给出 rerror_policy,则 error_policy 同时用于读取和写入错误。如果给出 rerror_policy,它将覆盖 error_policy 的 read 错误。另请注意,enospace 不是读取错误的有效策略,因此如果 error_policy 设为 enospace,并且没有给出 rerror_policy,则将使用读取错误设置 报告
  • 可选的 io 属性控制 I/O 上的特定策略; kvm 客户机虚拟机支持 线程原生。可选的 ioeventfd 属性允许用户为 virtio 磁盘设备设置域 I/O 异步处理。默认值由虚拟机监控程序决定。接受的值为 onoff。启用此项可允许客户机虚拟机在单独线程处理 I/O 时执行。通常,在 I/O 期间,遇到高系统 CPU 利用率的客户机虚拟机将从此中受益。另一方面,过载主机物理计算机可能会增加客户机虚拟机 I/O 延迟。但是,建议您不要更改默认设置,并允许虚拟机监控程序确定设置。
    注意
    ioeventfd 属性包含 在磁盘 XML 部分的 < <driver> > 元素中,以及 设备 XML 部分的驱动程序元素。在以前的情形中,它会影响 virtIO 磁盘,后者则影响 SCSI 磁盘。
  • 可选的 event_idx 属性控制设备事件处理的各个方面,并可设置为 onoff。如果设为 上的,它将减少中断数量,并退出客户机虚拟机。默认值由虚拟机监控程序决定,默认设置在 。如果不需要此行为,则 设置会 强制关闭该功能。但是,强烈建议您不要更改默认设置,并允许虚拟机监控程序指示设置。
  • 可选的 copy_on_read 属性控制是否将读取后备文件复制到镜像文件中。接受的值可以是 on<off>copy-on-read 避免重复访问同一后备文件扇区,并在后备文件超过较慢时很有用。默认情况下,copy-on-read 会为 off
  • 可以设置 discard='unmap' 来启用丢弃支持。可以使用 discard='ignore' 来替换同一行,以禁用。discard='ignore' 是默认设置。

23.17.1.7. 其他设备元素

device 元素中可能会使用以下属性:
  • <boot> - 指定磁盘可引导。

    其他引导值

    • <order> - 确定在引导序列中尝试设备的顺序。
    • <per-device> Boot 元素不能与 BIOS 引导装载程序中的一般引导元素一起使用。
  • <encryption> - 指定卷加密方式。
  • <ReadOnly> - 表示 guest 虚拟机无法修改该设备。此设置是带有 属性 <device='cdrom'> 的磁盘的默认设置。
  • <应> 共享该设备在域间共享(只要虚拟机监控程序和操作系统支持)。如果使用 可共享,则 cache='no' 应该为该设备使用。
  • <瞬态> - 表示当客户机虚拟机退出时,应自动恢复对设备内容的更改。对于某些虚拟机监控程序,标记磁盘 临时 可防止域参与迁移或快照。
  • <serial> - 指定客户机虚拟机的硬盘的序列号。例如,<串行>WD-WMAP9A966149</串行>
  • <WWN> - 指定虚拟硬盘或 CD-ROM 驱动器的 World Wide Name(WWN)。它必须由 16 位十六进制组成。
  • <vendor> - 指定虚拟硬盘或 CD-ROM 设备的供应商。它不能超过 8 个可打印字符。
  • <product> - 指定虚拟硬盘或 CD-ROM 设备的产品。它不能超过 16 个可打印字符
  • <主机> - 支持以下属性:
    • name - 指定主机名
    • port - 指定端口号
    • transport - 指定传输类型
    • socket - 指定套接字的路径
    此元素的含义和元素的数量取决于 协议 属性,如中所示 基于协议的其他主机属性

    基于协议的其他主机属性

    • nbd - 指定运行 nbd-server 的服务器,且只能用于一台主机物理机器。此 protcol 的默认端口为 10809
    • RBD - 监控 RBD 类型的服务器,并可用于一个或多个主机物理计算机。
    • sheepdog - 指定 sheepdog 服务器之一(默认为 localhost:7000)),并可与任何主机物理机器一起使用。
    • Gluster - 指定运行 glusterd 守护进程的服务器,只能用于一台主机物理计算机。transport 属性的有效值是 tcp、rdma unix。如果未指定任何内容,则假定 tcp。如果传输是 unix,则 socket 属性指定 unix 套接字的路径。
  • <address> - 将磁盘放在控制器的给定插槽中。实际的 <控制器> 设备通常被推断 ,但也可以明确指定它。type 属性是强制的,通常为 pci驱动器。对于 pci 控制器,必须存在适用于 总线插槽 和功能的附加属性,以及可选的 域和 多功能多功能 默认为 off对于 驱动器 控制器,提供了更多属性 控制器总线目标单元,每个属性的默认设置为 0。
  • auth - 提供访问源所需的身份验证凭据。它包括一个强制属性 username,用于标识要在身份验证期间使用的用户名,以及含有强制属性 type 的子元素 机密
  • geometry - 提供覆盖 geometry 设置的功能。这对 S390 DASD-disks 或旧的 DOS-disks 非常有用。它可以有以下参数:
    • cyls - 指定柱面的数量。
    • heads - 指定头数。
    • secs - 指定每个跟踪的扇区数。
    • trans - 指定 BIOS-Translation-Modes,并具有以下值: nonelbaauto
  • blockio - 允许使用下面列出的任何块设备属性覆盖块设备:

    blockio 选项

    • logical_block_size - 报告客户机虚拟机操作系统,并描述磁盘 I/O 的最小单位。
    • physical_block_size - 报告客户端虚拟机操作系统,并描述磁盘硬件扇区大小(与磁盘数据对齐相关)。