virsh undefine 注销虚机
undefine 把域定义从 libvirt 注销,默认只删配置、保留磁盘文件。它常被视为「删除虚机」的动作,但实际上分两层:注册关系与存储数据。UEFI 虚机还需要带 --nvram 清理固件变量文件,否则会报错或残留;带 --remove-all-storage 时才会连磁盘一起删除,这一步是不可逆的。
基本信息
| 基本用法 | virsh undefine vm1,注销定义,磁盘文件保留 |
|---|---|
| UEFI 虚机 | virsh undefine vm1 --nvram,同时清理固件变量文件 |
| 连盘删除 | virsh undefine vm1 --remove-all-storage,谨慎使用 |
| 默认行为 | 磁盘文件保留在存储上,可另行归档或清理 |
| 前置建议 | 先导出定义 XML 存档,域处于运行状态时先安全关机 |
典型使用场景
- 下线废弃虚机:确认无需恢复后注销定义并清理磁盘
- 重建虚机:保留磁盘数据,只重注册一份新的域定义
- 环境清理:测试完成后批量注销,释放宿主侧的配置条目
- 迁移前整理:宿主退役前把所有域定义导出归档再注销
- 事故善后:定义损坏无法修复时注销后重新 define 一份干净的定义
注销前先备份定义
注销前先备份定义
sudo virsh dumpxml vm1 --inactive > /root/vm1-$(date +%F).xml
sudo virsh destroy vm1 2>/dev/null || true # 停机(必要时)
sudo virsh undefine vm1 --nvram
# 确认定义已消失、磁盘文件仍在:
virsh list --all
ls -lh /var/lib/libvirt/images/参数对比
| 参数 | 作用 | 风险 |
|---|---|---|
| 默认 | 只注销定义 | 磁盘变成无人认领的文件 |
| --nvram | 清理固件变量文件 | UEFI 虚机不加会报错或留残留 |
| --remove-all-storage | 连同磁盘一起删除 | 数据不可恢复,执行前必须确认 |
| --keep-nvram | 保留固件变量 | 重建同名虚机时可复用 |
注销前先把定义导出存档:磁盘还在,但域的具体参数(设备型号、CPU 模型、网络连接)失传后重建很难完全复现。
--remove-all-storage 会真实删除磁盘数据,执行前要确认磁盘归属,尤其是共享存储上文件名与虚机名不一致的情况。
批量注销前先列一份清单,写清域名、磁盘路径、用途与负责人,逐条确认后再执行,避免在共享存储上误删他人正在使用的镜像;注销完成后核对存储剩余空间,确认释放容量与清单对得上。