首页/云/云平台与虚拟化速查/virtio 设备家族与 XML 示例
虚拟化基础63 条

virtio 设备家族与 XML 示例

virtio 按设备类型分为多个前端:virtio-net 网卡、virtio-blk/virtio-scsi 存储、virtio-balloon 内存气球、virtio-random、virtio-serial 与 virtio-fs 共享目录,云主机里逐项对应。

云平台与虚拟化速查云更新于 2026-10-13

virtio 设备家族

virtio 是一套半虚拟化驱动框架:guest 侧使用专门优化过的驱动,通过共享队列与宿主协作,避免模拟真实硬件的开销。按设备类型分成多个前端:virtio-net 网卡、virtio-blk 与 virtio-scsi 存储、virtio-balloon 内存气球、virtio-serial 串口通道、virtio-fs 目录共享等。云主机上几乎每一项虚拟硬件都对应其中一个。

基本信息

本质半虚拟化:guest 内需装对应驱动,性能优于模拟的兼容设备
常见类型virtio-net、virtio-blk、virtio-scsi、virtio-balloon、virtio-serial、virtio-fs
配置落点libvirt 域 XML 的设备段落,网卡与磁盘的 model 或 bus 属性
性能要点多队列、校验和卸载等特性可按需开启
兼容前提guest 内核与镜像内要有对应驱动,缺驱动会导致设备识别不到

常用 virtio 设备

设备guest 侧驱动用途
virtio-netvirtio_net虚拟网卡(多队列/校验和卸载)
virtio-blkvirtio_blk块设备直接给 guest
virtio-scsivirtio_scsiSCSI 模型,支持热插拔与多盘
virtio-balloonvirtio_balloon宿主回收 guest 未用内存
virtio-fsvirtiofs宿主目录共享给 guest
virtio-serialvirtio_serial串口通道(如 guest agent)

典型使用场景

  • 虚机网络优化:把兼容网卡换成 virtio-net 提升吞吐
  • 磁盘多盘管理:用 virtio-scsi 支持多盘与热插拔
  • 内存动态调整:依赖 virtio-balloon 做回收与降配
  • guest agent 通信:通过 virtio-serial 与宿主交换信息
  • 开发环境共享目录:用 virtio-fs 把宿主目录挂进虚机

在 libvirt XML 中使用 virtio-scsi

在 libvirt XML 中使用 virtio-scsi
<controller type='scsi' index='0' model='virtio-scsi'/>

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/disk.qcow2'/>
  <target dev='sda' bus='scsi'/>
</disk>
从兼容设备换成 virtio 设备会改变 guest 内看到的设备名(如从 sda 变成 vda),已经用设备名写死挂载配置的系统要先改回 UUID。
balloon 回收内存依赖 guest 内驱动与配合:驱动缺失时动态调整不生效,回收过猛则可能触发 guest 内内存不足。
多队列与卸载特性需要两端配合:宿主侧设置队列数量,guest 侧驱动与内核参数也要相应开启,只配一边往往看不到性能变化,容易误判为 virtio 没有收益。
更换网卡或磁盘的设备类型属于结构性变更:先停虚机、改定义、确认 guest 内设备名与网络配置,改完按「能起、能连、能挂载」三步验证。

易错点

  • 加盘时总线混用 IDE 与 virtio-scsi,盘符漂移导致 fstab 挂载失败
  • balloon 回收过猛引发 guest 内内存紧张;内存策略要结合驱动与业务峰值
  • guest 内缺少对应驱动就切换设备类型,虚机启动后识别不到网卡或磁盘
  • 把兼容网卡长期留在生产虚机上,网络吞吐被限制却误以为是业务问题

数据来源与参考

  • Linux 内核文档 virtio 驱动
  • libvirt 文档:设备 XML
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌