虚拟机磁盘满了,核心解法只有两条路:清理无用文件回收空间,或者直接扩容虚拟机磁盘;具体选哪条,取决于你的Mac剩余空间和虚拟机用途。
很多Mac用户遇到虚拟机提示“磁盘已满”时,第一反应是删软件、清缓存,折腾半天发现只是杯水车薪,真正的问题往往出在虚拟机磁盘镜像文件本身,它像一个膨胀的气球,删掉里面的文件并不会让气球自动缩小,下面我把清理和扩容两条路都拆开讲透,让你一次性解决问题。
为什么虚拟机磁盘越用越大,删了文件也不见瘦身?
搞清楚原理,你才能判断自己该清理还是该扩容,虚拟机硬盘不是一个物理分区,而是一个文件,常见格式有.vmdk(VMware)、.qcow2(QEMU/KVM)、.vdi(VirtualBox),这些文件默认是动态分配的,也就是用多少占多少,但删掉文件后,释放的空间不会自动归还给Mac。
打个比方,虚拟机像一间堆满杂物的房子,你往里扔了大衣柜(50GB),后来觉得不合适想扔掉,柜子确实不在了,但房子本身没变形,Mac看到的还是那个50GB的“大个头”,这就是为什么你删了二三十GB文件,虚拟机文件纹丝不动。
另外一个隐藏大户是快照,不少用户开了时间机器备份或者虚拟机快照,快照会锁定磁盘状态,导致空间无法释放,行业共识认为,快照是虚拟机空间异常增长的最大元凶之一。
还有Mac特有的一层坑:APFS快照,如果你的虚拟机文件放在APFS格式的外置硬盘或Mac自带硬盘上,Rapid Security Response或Time Machine可能悄悄创建了APFS本地快照,导致磁盘明明显示有空间,却无法分配更多给虚拟机,这类问题在Apple Silicon Mac上更常见。
先做减法:清理虚拟机内部空间
清理的目标不是“看起来干净”,而是让被删除的文件产生的空洞可以被Mac回收,具体分三步走。
第一步:先清理访达和系统垃圾
进入虚拟机系统,打开“关于本机”查看存储空间,先删掉以下内容:
- 废纸篓里的文件(很多人忽略)
- 浏览器缓存、下载文件夹里的安装包
~/Library/Caches下的缓存文件- 旧版iOS备份、无效的Xcode DerivedData
- 已经不需要的Docker镜像和容器
在Windows虚拟机里,可以用系统自带的“磁盘清理”工具,勾选所有项目,包括Windows更新清理,在Linux虚拟机里,用sudo apt clean和sudo journalctl --vacuum-size=100M清理包缓存和日志。
第二步:用系统的清理工具把空洞“折叠”起来
这一步是关键,清理完内部文件后,你需要告诉虚拟机“把磁盘上还没用的空间标记为零”,不同虚拟机有不同做法。
VMware Fusion用户,直接去“虚拟机设置”-“硬盘”-“整理磁盘”,Apple Silicon Mac上这一操作可能会禁用某些特性,实测下来M系列芯片上建议用下面的命令行替代。
Parallels Desktop用户,菜单栏选“操作”-“优化”-“释放空间”,软件会自动压缩镜像。
对于QEMU/KVM或者UTM用户,命令行格式如下(在Mac的终端里操作,不是虚拟机里):
qemu-img convert -O qcow2 -c 原始镜像.qcow2 压缩后镜像.qcow2
这条命令会重写整个磁盘镜像,把所有被标记为零的块真正清掉,压缩效果显著,一个80GB的qcow2文件,通常能压回40GB。
第三步:用零填充把剩余空间变成“可压缩区域”
如果你用的是VirtualBox或VMware,想要极致瘦身,可以让虚拟机用工具把剩余空间写满零。
- Windows虚拟机:下载SDelete(微软官方工具),管理员权限运行
c:\sdelete64.exe -z c: - macOS虚拟机(如果装的是macOS):用磁盘工具抹掉空闲空间,选“零数据”
- Linux虚拟机:执行
dd if=/dev/zero of=~/zero.fill bs=1M; rm ~/zero.fill
注意:零填充会很耗时,一个50GB的磁盘可能要跑一两个小时,建议睡前挂着跑。
跑完零填充后,回到Mac宿主机,对VMware虚拟机执行vmware-vdiskmanager -k,对VirtualBox执行VBoxManage modifymedium disk --compact。
扩容方案一:直接加大虚拟机原始磁盘
如果清理完仍然不够用,或者你的需求就是需要更多空间,扩容是对的路。
调整虚拟机设置里面的硬件虚拟磁盘
在VMware Fusion中依次点击“虚拟机”-“设置”-“硬盘”,在这里把磁盘容量调大,VirtualBox用户依次点击“设置”-“存储”,选中虚拟磁盘文件,调整大小,Parallels Desktop则在“硬件”-“硬盘”里直接拖动滑块。
这里有几个常见坑要提醒你:
- 扩容需要关闭虚拟机,不能在运行中操作
- 如果创建虚拟机时选择了“拆分磁盘”,扩容可能失败,建议用单文件
- 给虚拟机扩容是向上调整,可以加大但无法缩小
在虚拟机里面对系统分区进行扩展
只是改了硬件虚拟磁盘大小,虚拟机系统内部不会自动识别,Windows虚拟机和Mac虚拟机需要到“磁盘管理”或“磁盘工具”里扩展分区,Windows系统用Win+X键打开磁盘管理,右键点击C盘,选择“扩展卷”,按向导走完。
macOS虚拟机则打开“磁盘工具”,选择对应卷宗,点击“分区”,拖动图形化滑块调整大小。
Linux虚拟机用GParted工具调整分区,动作比较精细,操作前一定先备份重要数据。
扩容后的空间仍一直不够用?检查这三个隐藏问题
如果扩了容还是被提示磁盘满,检查以下三点:
- 虚拟机的交换文件或休眠文件是否占用了大量空间(Windows的
pagefile.sys和hiberfil.sys常见) - 是否有一个快照在持续膨胀,它锁定了旧数据(可在VMware的“快照”面板中删除无用快照)
- 虚拟机所在物理卷剩余空间是否充足,如果Mac硬盘本身只剩不到10GB,虚拟机再大也无济于事
修复方法也很直接:把虚拟机的内存交换文件手动移动到外置硬盘,或者干脆关闭系统还原。Windows虚拟机建议把系统还原空间限制在总磁盘的5%以内。
扩容时容不得半点马虎的两个原则
业内专家指出,扩容虚拟机磁盘是所有虚拟机操作中风险最高的操作之一,主要风险点是分区表损坏或引导失败,两点务必遵守:第一,操作前务必备份,最简单的做法是复制一份.vmdk或.qcow2文件到外置硬盘(注意关闭虚拟机的状态再做);第二,不要尝试缩小系统分区,很容易导致数据不可逆损坏。
扩容方案二:换一块新硬盘,把旧数据迁移过去
如果你的虚拟机采用了UEFI启动模式,或者动态磁盘文件已经混乱不堪,直接在原盘上扩容可能失败,这时候,更稳妥的方式是新建一块独立虚拟硬盘,把旧盘数据迁移过去。
具体实现方式如下:
在虚拟机设置里添加一块新硬盘,容量给到原盘的两倍或你需要的最终容量,启动虚拟机后,用rsync或在Windows下用镜像工具分区克隆,最后把旧盘从设置中移除,好处是完整保留了系统文件、文件权限以及引导记录,坏处是需要多一步操作。
会稍微复杂一些,但结果非常干净,而且新盘没有碎片,性能通常优于扩出来的旧盘。
终极技巧:对虚拟机文件本身做“深度瘦身”
这一步连接到Mac宿主机层面的优化,即使你在虚拟机内部做了清理和压缩,Mac上依然会留存一些不必要的备份文件、日志文件等,在Finder中,前往~/Library/Containers/目录下,找到相应虚拟机应用对应的文件夹删除缓存,可以多释放不小空间。
具体的对应关系如下:
- VMware Fusion:
~/Library/Application Support/VMware Fusion/ - Parallels Desktop:
~/Library/Parallels/ - VirtualBox:
~/Library/VirtualBox/
Parallels Desktop会在上面目录中存放备份和快照文件,VirtualBox则存放扩展包和日志,常年不清理的话,三五个GB的额外占用很常见。
如果你的虚拟机运行在APFS卷上,可以在终端中执行tmutil listlocalsnapshots /查看APFS本地快照,如果有快照残留,执行tmutil deletelocalsnapshots 时间戳删除,避免快照占住空间导致虚拟机无法扩展。
如果经常遇到磁盘空间吃紧,建议在Mac上常备一个磁盘占用分析工具,比如OmniDiskSweeper或GrandPerspective,用图形化方式一眼找出大文件,比在访达里一个个找要高效得多。
清理和扩容的最佳实践频率
优先清理还是扩容,取决于你的使用场景,如果你的Mac剩余空间充足(剩余超过总容量的20%),建议直接扩容,省时省心,一步到位,如果Mac自身存储空间所剩无几,那就以清理为主,压缩镜像体积后,再做扩容。
养成两个习惯能极大减少后续麻烦:
- 每月跑一次虚拟机内部的磁盘清理和镜像压缩
- 创建虚拟机时,按未来两年预期的数据量的1.5倍来设置磁盘大小
- 重要数据勤备份、及时删除过期快照
不要等到磁盘满了再临时抱佛脚,虚拟机运行中突然写入失败,极有可能损坏文件系统,届时解决问题的难度比扩容或清理更大。
Q&A:关于Mac虚拟机空间问题的高频疑问
清理工具和扩容工具哪个效果更明显?
完全不同维度的操作。清理工具(如VMware的“整理磁盘”、VirtualBox的compact命令)只能回收虚拟机内部的可用空洞,无法改变总容量上限,扩容工具是真正改变磁盘分配的上限值,如果你的总容量只有60GB,即使清理得再彻底,最多也只有60GB可用;而扩容后,容量上限提升,内部空间重新宽裕,简单说,清理解决“明明没用满却提示不足”的后续问题,扩容解决“总容量不够”的根本问题。
如果日常文件增长较快,优先扩容,如果只是临时需要一些空间存放文件,先清理,压缩后观察三五天再决定。
为什么虚拟机扩容后总容量变了,但可用空间没有增多?
这种情况大多出现在Windows虚拟机和部分Linux虚拟机中,原因在于,你修改的只是虚拟磁盘的“外壳”大小,系统内的分区表仍然保持原样,没有识别出新增的容量,解决方法是到操作系统的磁盘管理工具里执行“扩展卷”或“调整分区大小”的操作,把新空间消化进现有分区。
还有另一种常见原因是,系统内开启了BitLocker或LUKS加密,磁盘管理工具无法在加密卷上直接扩展分区,你需要在加密工具里解锁卷之后重新执行扩展操作,或者关闭加密后再调整。
Mac虚拟机空间不足可以直接删除哪些大文件?
优先检查三个目录:~/资源库/Containers/内对应虚拟机应用目录中的缓存和日志、~/资源库/Application Support/下的虚拟机快照和备份文件、~/资源库/Logs/下的虚拟机运行日志,这些是虚拟机本体在Mac侧占用的额外空间,与虚拟机内部磁盘无关,如果虚拟机的安装镜像(如Windows的ISO)依然存在某个文件夹中,找到并移动到外置硬盘或删除,往往能释放出数十GB空间。