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,让工具按语义修改而不是直接编辑文本。