vmware workstation清理虚拟机磁盘空间需先关机、确认非预分配磁盘,再通过“compact”工具回收空闲块;若含快照须先删除,客户机内还需清空回收站和临时文件。

先确认虚拟机类型和运行状态
直接删文件夹或关机后删 .vmdk 文件,大概率会留残余:/etc/fstab 里的挂载项、/dev/sdb 分区残留、systemd 服务、udev 规则、甚至内核模块。必须先明确是 KVM/QEMU、VMware Workstation 还是 VirtualBox —— 不同平台清理路径完全不同。
关键动作:
- 运行
virsh list --all(KVM)或vmrun list(VMware)确认是否还在管理器中注册 - 查进程:
ps aux | grep -E "(qemu|vmware|vbox)",有就kill -9掉再继续 - 检查是否挂载了虚拟磁盘:
lsblk看有没有sdb/sdc这类未卸载的块设备
删除虚拟机实例并销毁磁盘文件
不能只删 GUI 界面里“删除虚拟机”——它默认可能只删配置不删磁盘。必须手动确认并销毁底层存储文件。
按平台操作:
-
KVM/QEMU:用
virsh destroy <name></name>停机,再virsh undefine <name></name>卸载定义,最后rm -f /var/lib/libvirt/images/<name>.qcow2</name> -
VMware Workstation:在 GUI 中右键 → “管理” → “从磁盘中删除”,然后进目录手动检查
.vmdk、.vmx、.nvram是否全无;若用命令行,vmrun -T ws deleteVM "<path>/<vm>.vmx"</vm></path> -
VirtualBox:GUI 中右键 → “删除” → 勾选“删除所有文件”,再进
~/VirtualBox VMs/<name>/</name>目录确认.vdi、.vbox等全空
注意:.vmdk 或 .qcow2 文件即使删了,宿主机上仍可能残留快照链或稀疏分配未回收的空间,后续需压缩(见下一条)。
清理宿主机上的磁盘残留与系统配置
删完虚拟机不等于干净。常见残留点包括:自动挂载项、udev 设备规则、libvirt 存储池、内核模块、日志和临时文件。
必须执行的清理项:
- 检查并注释 /etc/fstab 中对应
/dev/sdb1或 UUID 的挂载行(否则重启可能卡在Failed to mount) - 运行
ls /etc/udev/rules.d/ | grep -i "vm\|virt",删掉疑似虚拟机生成的规则(如 99-vm-disk.rules) - 若用过 libvirt 存储池:
virsh pool-list --all,对残留池执行virsh pool-destroy <pool></pool>+virsh pool-undefine <pool></pool> - 卸载相关内核模块:
sudo modprobe -r kvm_intel kvm(仅当确定不再用 KVM) - 清空日志:
journalctl --vacuum-time=1d或直接rm -rf /var/log/libvirt/ /var/log/vmware/
彻底擦除虚拟磁盘数据(防恢复)
如果磁盘文件曾含敏感数据(比如开发测试环境跑过数据库),仅 rm -f 不安全 —— 数据仍可被工具恢复。必须覆写。
推荐做法(针对已删但担心残留的块设备,如 /dev/sdb):
- 确认设备未挂载且无进程占用:
lsof /dev/sdb和fuser -v /dev/sdb都应无输出 - 用
shred -v -n 1 -z /dev/sdb(一次随机写 + 一次零写,比默认三次快,安全性足够) - 若设备已不存在但担心旧镜像残留,对原
.vmdk所在路径执行:shred -v -u /path/to/disk.vmdk(-u删文件本身) - 不要用
dd if=/dev/zero填充 —— 它只覆盖已分配空间,稀疏文件或快照链里未写区域仍裸露
真正难清理的,其实是那些没被显式挂载、但被 udev 自动识别为“新硬盘”的设备节点,它们可能悄悄出现在 /dev/disk/by-id/ 下,下次插入 USB 或重启时又冒出来 —— 必须结合 udevadm info --name=/dev/sdb 查来源,再删对应规则。











