dumpxml 与 define 的用法
libvirt 里域的期望状态保存在 XML 中:dumpxml 把当前定义导出成文件,编辑后用 define 全量替换注册。关键在于分清运行态与持久态:不加参数导出的是含运行时信息的 XML,加 --inactive 导出的是下次启动使用的持久定义。修改结构性配置(内存、设备、CPU)通常要停机再生效。
基本信息
| 导出 | virsh dumpxml vm1 > vm1.xml,得到含运行态信息的定义 |
|---|---|
| 导出持久定义 | virsh dumpxml vm1 --inactive,得到下次启动使用的配置 |
| 重新注册 | virsh define vm1.xml,全量替换域定义 |
| 生效范围 | 结构性变更需关机后启动才生效;部分参数支持 --live 热改 |
| 修改前动作 | 先导出备份,命名带日期,改坏可立即回滚 |
典型使用场景
- 备份定义:变更前导出 XML 存档,出问题可快速恢复
- 批量调参:给一组虚机统一调整内存或网卡型号
- 比对差异:导出两份 XML 做 diff,查清谁改了配置
- 迁移与复制:导出定义后在新宿主上 define 并调整磁盘路径
- 审计追溯:把 XML 纳入版本管理,记录每次结构变更
导出、修改、重载
导出、修改、重载
sudo virsh dumpxml vm1 --inactive > /tmp/vm1.xml
# 编辑 /tmp/vm1.xml(内存、设备、CPU 等)
sudo virsh define /tmp/vm1.xml
sudo virsh dumpxml vm1 --inactive | diff /tmp/vm1.xml - # 核对落盘结果
# 结构性改动需要重新启动域才生效
sudo virsh shutdown vm1 && sudo virsh start vm1常改段落与生效方式
| XML 段落 | 内容 | 生效方式 |
|---|---|---|
| memory / vcpu | 内存与 CPU 数量 | 停机后启动生效 |
| devices/disk | 磁盘路径与总线类型 | 停机后启动生效 |
| interface | 网卡型号与连接的虚拟网络 | 停机后启动生效 |
| cpu | CPU 模型与特性 | 停机后启动生效 |
define 是全量替换而非增量合并:导出旧文件、只在上面改动、再 define 回去,是避免误删配置的稳妥流程。
把运行态 XML 直接 define 回去,会把临时状态(如热插拔出来的设备)固化进持久配置,之后重启行为与预期不符。
virsh edit 是导出、编辑、define 的封装,适合交互式小改动;批量修改与脚本场景仍建议显式走导出、编辑、define 三步,便于留档与回滚。
热改与持久改要分开考虑:只改当前运行状态的改动重启后会失效,只改定义的改动要等下次启动才生效;脚本里把作用范围写清楚,避免改动结果与预期不一致。