问题现象
打开虚拟机 Windows 11 x64 时报错:
目录非空
打不开磁盘 '/Users/<用户名>/Virtual Machines.localized/Windows 11 x64.vmwarevm/虚拟磁盘.vmdk' 或它所依赖的某一快照磁盘。
模块 "Disk" 启动失败。
无法启动虚拟机。
排查过程
1. 检查虚拟机目录文件完整性
ls -la "/Users/<用户名>/Virtual Machines.localized/Windows 11 x64.vmwarevm/"
结果确认:
- 磁盘描述符文件
虚拟磁盘.vmdk(1211 字节)存在 - 数据分片文件
虚拟磁盘-s001.vmdk至虚拟磁盘-s017.vmdk全部存在,编号连续、无缺失 - 磁盘文件本身完整,排除了"分片丢失/快照链断裂"的可能
2. 定位可疑项:锁目录残留
发现异常项:
drwxrwxrwx 3 <user> <group> 96 7月 6 13:42 虚拟磁盘.vmdk.lck
.lck是 VMware 用于防止同一虚拟机被多进程同时打开的保护锁- 该锁目录的修改时间(13:42)与
.vmx、.scoreboard、vmware.log等文件的最后修改时间一致 - 判断为上一次异常关闭/强制退出 VMware 后残留的锁文件,是本次报错的直接原因
根因分析
VMware 正常关机时会自动释放并删除 .lck 锁目录。若之前发生过:
- 强制退出 VMware Fusion
- 系统崩溃
- 断电或异常关机
锁目录就可能残留下来,导致下次打开时 VMware 误判"磁盘正被占用",从而报"目录非空"错误。
解决方案
步骤 1:确认没有相关进程残留
ps aux | grep vmware-vmx
若无相关进程输出,说明可以安全操作。
步骤 2:备份(可选但建议)
操作前建议先复制一份完整的 .vmwarevm 目录,防止意外。
步骤 3:删除残留锁目录
rm -rf "/Users/<用户名>/Virtual Machines.localized/Windows 11 x64.vmwarevm/虚拟磁盘.vmdk.lck"
步骤 4(可选):校验磁盘描述符文件
cat "/Users/<用户名>/Virtual Machines.localized/Windows 11 x64.vmwarevm/虚拟磁盘.vmdk"
确认其中列出的 extent(分片)文件名与实际存在的 s001~s017 完全对应,例如:
RW 8386560 SPARSE "虚拟磁盘-s001.vmdk"
RW 8386560 SPARSE "虚拟磁盘-s002.vmdk"
...
若描述符中列出的文件名与实际磁盘分片不一致,则说明描述符本身损坏,需要另行修复。
步骤 5:重新打开虚拟机
删除锁目录后重新启动,验证问题是否解决。
结论
- 磁盘数据文件本身完整,无损坏或缺失
- 报错根因为异常关闭遗留的
虚拟磁盘.vmdk.lck锁目录 - 删除锁目录后应可正常打开虚拟机
备用修复手段(若上述方法无效)
使用 VMware 自带工具尝试修复磁盘:
/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -R "/Users/<用户名>/Virtual Machines.localized/Windows 11 x64.vmwarevm/虚拟磁盘.vmdk"
-R 参数用于尝试修复磁盘索引问题。