虚拟机删除命令因虚拟化平台不同而差异明显,Linux系统多用virsh undefine与virsh destroy组合,VMware ESXi使用vim-cmd vmsvc/destroy,Hyper-V则依赖PowerShell的Remove-VM,每一步操作都需要先关机再删除,否则会残留配置文件占用存储。
删除虚拟机前必须确认的三件事
动手删除虚拟机前,先想清楚这三件事,能省下后续大量麻烦。
第一,确认虚拟机状态。 绝大多数平台不允许直接删除运行中的虚拟机,必须先执行关机操作,强制删除运行中的实例,轻则提示失败,重则损坏共享存储上的其他文件。
第二,区分“删除”和“注销”。 很多平台会把两个概念混在一起,注销(Unregister)只是把虚拟机从管理列表里移除,磁盘文件还留在存储里;删除(Delete)则连磁盘文件一并清理,实际运维场景中,有人只要注销,有人要彻底删干净,命令完全不同。
第三,确认磁盘文件是否被其他虚拟机引用。 特别是使用链接克隆或共享虚拟磁盘的架构,删除父虚拟机会导致所有子虚拟机全部瘫痪,执行删除前,检查磁盘的链接关系是必须动作。
主流平台虚拟机删除命令对比
不同系统环境下,删除命令和操作路径差异很大,业界各平台并没有统一标准,以下按平台拆开讲。
KVM虚拟化环境下的删除命令
KVM是Linux内核自带的虚拟化方案,日常管理工具是virsh,删除虚拟机分为两步:销毁运行实例和删除配置文件。
第一步:关机并销毁运行中的虚拟机
virsh shutdown vm-name
virsh destroy vm-name
shutdown发送ACPI关机信号给虚拟机,等它正常退出,如果等了一两分钟仍然没停,再执行destroy强制终止。
第二步:删除虚拟机配置文件
virsh undefine vm-name
这一步把/etc/libvirt/qemu/下的XML配置文件移除,虚拟机从管理列表消失。
第三步:手动删除磁盘文件
virsh undefine不会自动清理磁盘镜像,需要先查看磁盘路径:
virsh dumpxml vm-name | grep 'source file'
得到磁盘文件的绝对路径后,用rm或rm -rf删除,如果用了LVM逻辑卷或ZFS数据集,还需要通过对应命令回收存储空间。
补充操作:删除nvram或快照文件
virsh undefine vm-name --nvram --remove-all-storage
--nvram删除UEFI启动变量文件,--remove-all-storage指定后会自动删除与虚拟机关联的所有存储卷,少数版本的libvirt支持这一组合参数,通过virsh undefine --help可以确认当前版本支持哪些选项。
VMware ESXi的删除命令与操作路径
VMware ESXi有三条路径可以删除虚拟机,命令行、图形界面和vSphere Client,日常运维中,命令行效率最高。
ESXi命令行删除方式
通过SSH登录ESXi主机,先列出所有虚拟机:
vim-cmd vmsvc/getallvms
输出结果会显示每个虚拟机的VMID和名称,然后执行删除:
vim-cmd vmsvc/power.off <VMID>
vim-cmd vmsvc/destroy <VMID>
power.off强制关机,destroy真正删除虚拟机,包括它的所有磁盘文件,这属于不可恢复操作,确认VMID写对再执行。
vSphere Client图形界面方式
在vCenter或ESXi的Web管理界面中,右键点击虚拟机,选择“从磁盘中删除”,此操作会弹出确认窗口,显示即将删除的虚拟机名称和关联磁盘文件,防止误删,如果想保留磁盘文件只移除管理记录,则选择“从清单中移除”。
两种删除方式的核心区别: destroy命令和“从磁盘中删除”都会彻底清理数据文件,而“从清单中移除”只解除关联,存储上的虚拟磁盘文件仍然存在,后续可以重新注册使用。
Hyper-V环境下PowerShell删除命令
Windows Server的Hyper-V平台使用PowerShell管理虚拟机,核心命令是Remove-VM。
删除前先检查虚拟机运行状态:
Get-VM -Name "vm-name" | Select-Object Name, State
关闭虚拟机并删除:
Stop-VM -Name "vm-name" -Force Remove-VM -Name "vm-name"
命令只删除虚拟机配置,默认不删除虚拟硬盘文件,要连同VHDX或VHD文件一起删,需要指定-Delete参数:
Remove-VM -Name "vm-name" -Delete
批量清理不再使用的虚拟机:
Get-VM | Where-Object { $_.State -eq 'Off' -and $_.Name -like 'old-' } | Remove-VM -Delete
执行前可以先去掉Remove-VM部分,单独运行Get-VM与Where-Object确认筛选结果是否正确,防止误删除。
VirtualBox的删除命令
VirtualBox多用于个人开发环境,命令相对简单:
VBoxManage list vms
VBoxManage controlvm "vm-name" poweroff
VBoxManage unregistervm "vm-name" --delete
unregistervm是取消注册,加--delete参数后连同磁盘文件一起删除,不加该参数只移除虚拟机记录,磁盘拖回其他目录后可以重新导入使用。
删除虚拟机后必须做的存储清理
很多人在删除命令执行完后就结束操作,留下一堆孤儿文件占着存储空间,所谓孤儿文件,指的是虚拟机已从管理平台移除,但磁盘镜像、快照、日志等数据文件仍残留在存储目录中,这在KVM和VMware场景中尤为常见。
KVM环境手动检查残留:
ls -lh /var/lib/libvirt/images/
删除虚拟机后,检查该目录下是否还有对应的.qcow2或.img文件,有则按需删除。
VMware环境检查存储:
vim-cmd vmsvc/getallvms执行后,与ls /vmfs/volumes/datastore1/输出进行比对,如果数据存储中有虚拟机名对应的文件夹,但getallvms列表里没有,说明管理记录已移除、数据残留,确认无用后手动删除文件夹。
Hyper-V环境检查默认磁盘目录:
默认路径为C:ProgramDataMicrosoftWindowsHyper-VVirtual Hard Disks,部署时修改过路径的按实际路径检查。
给已删除虚拟机备份文件的管理建议: 删除前将备份文件转移至独立目录或备份存储,避免删除虚拟机时数据被一并清理,确认业务不再需要该备份后,再手动删除备份文件。
虚拟化平台默认存储位置参考
不同分布版本的Linux和Windows系统对虚拟机文件的默认存放路径有所不同,实践操作时先查询当前平台的实际配置再删除,避免对不上路径而误操作。
| 虚拟化平台 | 默认虚拟机配置目录 | 默认磁盘镜像目录 |
|---|---|---|
| KVM(Ubuntu/Debian) | /etc/libvirt/qemu/ |
/var/lib/libvirt/images/ |
| KVM(CentOS/RHEL) | /etc/libvirt/qemu/ |
/var/lib/libvirt/images/ |
| VMware ESXi | /vmfs/volumes/datastore1/ |
/vmfs/volumes/datastore1/ |
| Hyper-V | C:ProgramDataMicrosoftWindowsHyper-V |
C:ProgramDataMicrosoftWindowsHyper-VVirtual Hard Disks |
| VirtualBox(Linux) | ~/.config/VirtualBox/ |
~/VirtualBox VMs/ |
| VirtualBox(Windows) | C:Users用户名.VirtualBox |
C:Users用户名VirtualBox VMs |
不同系统删除虚拟机步骤中,最复杂的部分往往不是命令本身,而是确认磁盘文件与虚拟机配置文件的关联关系,掌握各自平台的基本逻辑后,命令只是单纯的操作动作。
删除虚拟机的维护窗口选择与安全降级方案
执行任何删除命令前,优先检查当前时间是否处于业务高峰时段。经验丰富的运维人员通常在业务低峰期执行删除任务,并提前细化回退方案。
行业共识认为:生产环境中的虚拟机删除应当遵循变更管理流程,即使虚拟化平台的删除命令已经执行成功,也要在删除前确认该虚拟机不承担关键业务,并在删除后持续观察关联服务状态,近年来,因忽视变更流程而在删除虚拟机后数小时才发现业务中断的案例不在少数。
对于暂时无法确认是否完全无用的虚拟机,不建议直接执行删除命令,可以将虚拟机执行“注销”或“取消注册”,保留磁盘文件,确认业务无任何异常后,再删除磁盘文件,相当于给删除操作加一道保险。
常见问题
误删虚拟机后还能恢复吗?
取决于删除方式,KVM的virsh undefine只删配置不删磁盘,用virsh define /path/to/old.xml恢复即可;VMware的“从清单中移除”也可以再注册恢复,但如果执行了virsh undefine --remove-all-storage或VMware的“从磁盘中删除”,磁盘文件已被清理,普通手段无法恢复,只能依赖备份。
虚拟机删除命令卡住不动是什么原因?
多数情况下是存储系统I/O繁忙或NFS连接中断,先检查存储健康状态,确认没有其他虚拟机正在执行快照合并任务,虚拟机存在大量快照时,删除操作会触发快照合并,耗时较长属正常现象,如果确认存储正常但命令长时间无响应,可在另一终端执行ps aux | grep qemu确认进程状态,必要时重启libvirtd服务。
命令行删除和图形界面删除有什么区别?
命令行删除适合批量操作和脚本定时执行,图形界面适合单台虚拟机精细操作,两者在虚拟机文件层面的处理逻辑基本一致,差异主要体现在附加参数的灵活性上,命令行可以精确指定是否保留磁盘、是否删除nvram,而图形界面通常只有“保留磁盘”和“删除磁盘”两个选项。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/765050.html





