VMware Workstation Pro 磁盘瘦身实战:彻底释放Ubuntu虚拟机被吞噬的空间
你是不是也遇到过这种情况:明明在Ubuntu虚拟机里删除了好几个G的文件,但宿主机上那个.vmdk磁盘文件的大小却纹丝不动,甚至还在不断膨胀?我的开发机就曾因此陷入窘境——一个原本30GB的Ubuntu系统,经过几个月的使用,.vmdk文件竟然膨胀到了200GB,几乎吃掉了整个固态硬盘的剩余空间。
这种“只增不减”的特性是VMware虚拟磁盘设计的默认行为,但并不意味着我们只能坐视不管。今天,我就结合自己多次踩坑和实战优化的经验,为你梳理一套完整、高效的Ubuntu虚拟机磁盘瘦身方案。这套方法不仅能帮你回收被无效占用的空间,还能让你深入理解VMware磁盘管理的工作原理,未来遇到类似问题时可以举一反三。
1. 理解虚拟机磁盘膨胀的根源与瘦身原理
在深入操作之前,我们有必要先搞清楚为什么虚拟磁盘文件会不断膨胀,以及瘦身操作到底在做什么。
VMware虚拟磁盘(通常是.vmdk文件)在设计上采用了“稀疏文件”的概念。简单来说,当你为虚拟机分配100GB磁盘空间时,宿主机上并不会立即创建一个100GB的实际文件,而是创建一个很小的“占位符”。随着虚拟机内部写入数据,这个文件才会逐渐增长。但问题在于,VMware的默认行为是只增长不收缩——即使你在虚拟机内部删除了文件,对应的磁盘空间在宿主机上也不会自动释放。
这背后的技术原因是文件系统层面的“标记删除”。当你在Ubuntu中删除文件时,系统只是在文件系统的元数据中标记这些空间为“可用”,并没有真正向磁盘写入零值来覆盖原有数据。VMware无法区分这些“逻辑上可用但物理上仍有数据”的空间,因此不敢贸然缩小.vmdk文件。
真正的瘦身需要两个关键步骤:
- 在虚拟机内部用零填充已删除的空间,让VMware能够识别出哪些区域是真正“空白”的
- 使用专用工具通知VMware压缩磁盘文件,物理释放这些被零填充的空间
重要提示:在进行任何磁盘操作前,请务必备份重要数据。虽然以下方法经过多次验证相对安全,但任何磁盘操作都存在理论上的风险。
1.1 检查当前磁盘使用状况
首先,我们需要从两个层面了解磁盘使用情况:虚拟机内部的实际使用量和宿主机上.vmdk文件的大小。
在Ubuntu虚拟机中,打开终端执行:
# 查看虚拟机内部各分区使用情况
df -h
# 查看详细的磁盘使用分析(需要安装ncdu)
sudo apt install ncdu -y
ncdu /
在宿主机(Windows)上,找到你的虚拟机存储目录,右键查看.vmdk文件的属性。你会惊讶地发现,这个文件的大小往往远大于虚拟机内部显示的实际使用量。
为了更直观地对比,我整理了一个典型场景下的数据对比表:
| 检查项 | 虚拟机内部显示 | 宿主机.vmdk文件 |
说明 |
|---|---|---|---|
| 根分区使用量 | 24GB | - | df -h显示的结果 |
| 总分配空间 | 100GB | - | 创建虚拟机时设定的磁盘大小 |
| 实际物理占用 | - | 68GB | 文件资源管理器查看的属性 |
| “膨胀”空间 | - | 44GB | 可回收的潜在空间 |
这种差异就是我们要回收的目标。在我的案例中,一个分配了100GB的Ubuntu 22.04虚拟机,内部只用了24GB,但.vmdk文件却占了68GB,有44GB的空间被无效占用。
2. 虚拟机内部预处理:为瘦身做好准备
在进行真正的压缩之前,我们需要在Ubuntu内部做一些清理和准备工作。这一步的目标是最大化可回收空间,并确保压缩过程顺利进行。
2.1 清理系统垃圾与缓存
Ubuntu系统在运行过程中会产生各种缓存和临时文件,这些文件虽然不占太多空间,但清理它们是一个好习惯:
# 清理APT缓存
sudo apt clean
# 清理旧内核(保留当前正在使用的)
sudo apt autoremove --purge
# 清理日志文件(可选,保留最近7天的)
sudo journalctl --vacuum-time=7d
# 清理临时文件
sudo rm -rf /tmp/*

&spm=1001.2101.3001.5002&articleId=155114636&d=1&t=3&u=2753b035914346c4a97f9b46acaa7ec8)
330

被折叠的 条评论
为什么被折叠?



