首页/云/云平台与虚拟化速查/virsh edit 直接编辑域 XML
虚拟化操作94 条

virsh edit 直接编辑域 XML

virsh edit 打开编辑器修改域的持久化 XML,退出时自动做格式与语义校验;校验不通过对本次修改整体回退,不会留下半套配置。

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

virsh edit 是什么

virsh edit 打开编辑器修改域的持久化 XML(inactive 定义),保存退出时 libvirt 会先做格式与语义校验;校验不通过则整体放弃本次修改,磁盘上的定义保持原样。它适合改命令行选项覆盖不到的细节,例如设备地址、CPU 拓扑与 PCI 直通;只是小改动用 virt-xml 更快。

基本信息

用法virsh edit vm1(使用 $EDITOR,默认 vi)
校验退出时自动验证,失败则放弃本次编辑
生效多数改动需重启域;部分设备支持热更新
替代工具virt-xml 适合脚本化的小改动
权限需要 root,或在 libvirtd 配置中授予对应权限
改前准备先 virsh dumpxml 备份一份定义,便于回滚

典型使用场景

  • 调整 vCPU 数量、拓扑与 NUMA 绑定关系
  • 给已有虚机加 PCI 直通设备或 USB 设备
  • 修改磁盘总线与缓存模式、网卡队列等性能相关参数
  • 修正热插拔失败后残留的设备地址冲突
  • 排查“命令行改不动的配置项”到底写在 XML 哪一段

编辑、备份与核对

编辑、备份与核对
sudo virsh dumpxml vm1 > /tmp/vm1.bak.xml      # 改前先备份定义
sudo virsh edit vm1                            # 用 $EDITOR 打开持久化 XML
sudo virsh define /tmp/vm1.bak.xml             # 改坏了用它回滚
sudo virsh dumpxml vm1 --inactive | head -30    # 核对改动是否已写入定义
sudo virsh start vm1                           # 关机状态下的改动需开机后生效
EDITOR=vi virsh edit vm1                       # 显式指定编辑器,避免落到不熟的编辑器

改动如何生效

改动对象生效方式说明
CPU 拓扑与 NUMA通常需要关机热插拔 CPU 受 guest 内核与 ACPI 限制
磁盘与网卡设备部分支持热插拔新增设备可用 attach-device 直接热挂
设备 address 字段需重启域地址冲突会让域启动失败
校验失败整体回退原定义保持不变,不会留下半套配置
编辑运行中域的 XML 只改定义,运行态不会跟着变:不重启域就会出现“配置里写了、实际没生效”的错觉。需要在线生效请用 virsh attach-device 或 update-device。
手工删改 <address> 与控制器层级容易让域起不来;不确定时交给 libvirt 分配地址,或改用 virt-xml,让工具按语义修改而不是直接编辑文本。

易错点

  • 在校验失败后反复强改不找根因:应按报错行修正 XML 结构
  • 编辑运行中域的 XML 后忘记重启域,运行态与定义长期不一致
  • 改动前没备份定义,校验通过但语义改错后无法快速回到原状
  • 手工改设备地址导致控制器与设备冲突,域启动直接失败

数据来源与参考

  • libvirt 文档:virsh edit
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌