核心问题是虚拟磁盘不自动回收空间,需三步闭环:一、关机(非挂起/休眠);二、guest内填零清空空闲扇区;三、宿主机执行对应命令压缩镜像,并清理快照、孤立文件及apfs快照残留。
mac 上虚拟机占用空间过大,核心问题不是“删不掉”,而是虚拟磁盘文件(如 .pvm、.vmdk、.vdi)在 guest 系统里删了文件,宿主机却没回收——它像一块不会自动缩水的海绵。真正释放空间,得走“内部清空 + 外部压缩 + 残留清理”三步闭环。
一、先关机,别挂起或暂停
挂起(Suspend)会保留内存快照(.mem 或 .sav),休眠(Sleep)会生成大体积 sleepimage,这些都会锁住数 GB 甚至数十 GB 空间。务必通过虚拟机内正常关机,或在 Parallels/VMware/VirtualBox 界面选择「关机」而非「挂起」。
- Parallels:菜单栏 → 操作 → 关机;或控制中心右键虚拟机 → 关机
- VMware Fusion:虚拟机菜单 → 电源 → 关机
- VirtualBox:窗口顶部「机器」→「关闭」→ 选「关闭电源」
二、在虚拟机内部填零(关键前置动作)
这一步让虚拟硬盘知道哪些扇区是“真空闲”。不执行,后续压缩几乎无效。
-
Windows 虚拟机:下载微软官方
sdelete.exe(x64 版),以管理员身份运行命令提示符,执行:sdelete -z C:\ -
Linux/macOS 虚拟机:终端中执行(需 root):
sudo dd if=/dev/zero of=/EMPTY bs=1M && sudo rm -f /EMPTY - 完成后等待输出“Successfully zeroed free space”或命令自然退出,再关机
三、在 Mac 上压缩虚拟硬盘文件
关机并完成填零后,回到宿主机终端执行对应命令,真正缩小物理文件体积:
-
Parallels Desktop:直接用内置功能最稳妥
菜单栏 → Parallels Desktop → 文件 → 释放磁盘空间 → 勾选快照、缓存、内存转储等 → 点击「恢复」 -
VMware Fusion:
终端执行(替换为你的实际路径):vmware-vdiskmanager -d "/Users/xxx/Virtual Machines/Win11.vmwarevm/Win11.vmdk" -
VirtualBox:
终端执行:VBoxManage modifymedium disk "/Users/xxx/VirtualBox VMs/Ubuntu/Ubuntu.vdi" --compact
四、顺手清理残留和孤立文件
压缩完不代表万事大吉——快照链、未关联的 .vdi、挂载点残留、APFS 快照都可能继续占位:
- 打开访达 → 前往 → 前往文件夹,依次进入:
~/Documents/Parallels/、
~/Virtual Machines/、
~/.VirtualBox/
删除已停用虚拟机的整个文件夹(如Test-Win10.pvm) - VirtualBox 用户:菜单栏 → 管理 → 全局设定 → 存储 → 查看每个 .vdi 对应路径,确认其所在文件夹内无同名
.vbox配置文件后再删除该 .vdi - 终端检查挂载残留:
diskutil list找含 “VirtualBox” 或 “VMware” 的设备,对异常挂载点执行:diskutil unmount force diskXsY,再sudo rmdir /Volumes/XXX - 磁盘工具 → 选取启动盘 → 「急救」→ 「修复宗卷快照」,可清除虚拟机操作遗留的 APFS 快照











