Skip to content

KVM 虚拟机清理记录

操作时间

2026-07-13 16:53 - 17:00 (CST)

操作目的

回收并释放所有状态为 shut off 的 KVM 虚拟机所占用的磁盘空间。

环境信息

  • 主机:本地 libvirt/KVM 环境
  • 主要存储路径:
    • /kvm/lib/libvirt/images/
    • /mnt/xfs/kvm/

清理前状态

运行中的 VM:

IdNameState
1ks-vm2-n2running
2ks-vm1running
3jumpserverrunning
4ks-vm2-n3running
5rocky-reporunning
14rocky9-vm-01running

状态为 shut off 的 VM 共 51 台

text
ceph-vm1, ks-vm2, ks-vm3, ks-vm3-n1, ks-vm3-n2, ks-vm3-n3, ks-vm4, ks-vm5,
rancher-vm1, rancher-vm2, rancher-vm2-w1, rancher-vm2-w2,
redhat-vm1, redhat-vm2, redhat-vm3, redhat-vm4,
redhat9-template, rhel-9.6-template,
rke1, rke2, rke2-vm1 ~ rke2-vm6, rke3,
rocky-vm1, rocky-vm2, rocky-vm3,
szc-vm1, szc-vm2, tanqi-repo, template,
uat-rhel9-vm1 ~ uat-rhel9-vm10,
uat2-rhel-vm1 ~ uat2-rhel-vm3,
ubuntu-vm1, ubuntu-vm2

注:清单中包含 redhat9-templaterhel-9.6-templatetemplate 等模板类 VM,已按用户要求一并清理。

操作步骤

1. 查看所有 VM

bash
virsh list --all

2. 确认待清理 VM 及其磁盘

bash
virsh list --all | awk '/shut off/{print $2}' | while read vm; do
  echo "=== $vm ==="
  virsh domblklist "$vm"
done

3. 清理普通 VM

使用 --remove-all-storage 同时删除虚拟机定义及其关联磁盘:

bash
virsh list --all | awk '/shut off/{print $2}' | while read vm; do
  virsh undefine --remove-all-storage "$vm"
done

4. 处理异常情况

4.1 非 libvirt 管理卷

部分 VM 的磁盘文件不由 libvirt 存储池管理,需要在 undefine 后手动删除:

bash
rm -f /mnt/xfs/kvm/redhat9-template.qcow2
rm -f /mnt/xfs/kvm/rhel-9.6-template-cidata.iso

4.2 带 NVRAM 的 VM

以下 UEFI 启动的 VM 因带有 NVRAM,普通 undefine 会报错 cannot undefine domain with nvram,需加 --nvram 参数:

bash
for vm in uat-rhel9-vm1 uat-rhel9-vm2 uat-rhel9-vm3 \
          uat2-rhel-vm1 uat2-rhel-vm2 uat2-rhel-vm3; do
  virsh undefine --nvram --remove-all-storage "$vm"
done

清理后状态

剩余 VM 全部为 running 状态:

IdNameState
1ks-vm2-n2running
2ks-vm1running
3jumpserverrunning
4ks-vm2-n3running
5rocky-reporunning
14rocky9-vm-01running
15rocky9-vm-02running
16rocky9-vm-03running

磁盘空间

清理后:

挂载点容量已用可用使用率
/916G288G582G34%
/mnt/xfs2.8T227G2.6T9%

可复用脚本

见同目录下的 cleanup-inactive-vms.sh

注意事项

  • 此操作会 永久删除 虚拟机及其磁盘,执行前请务必确认。
  • 建议先备份重要数据或快照。
  • 模板类 VM 在清理前需要特别确认是否仍需要保留。