vmware的Ubuntu虚拟机怎么缩小磁盘空间?

Andy 2026年04月29日 3次浏览

在 VMware 中,虚拟机的磁盘(通常是精简置备/Thin Provision)会随着内部数据的增加而变大,但删除内部文件后,物理宿主机上的 .vmdk 磁盘文件并不会自动缩小。这是因为宿主机不知道 Ubuntu 内部哪些数据块已经被标记为“已删除”。

要缩小物理磁盘占用,你需要执行两个核心步骤:1. 将虚拟机的可用空间用“零”填充;2. 让 VMware 压缩并回收这些全零的区块。

以下是具体的操作指南(请注意:在执行收缩操作前,必须删除该虚拟机的所有“快照”,否则无法压缩磁盘!)。


方法一:最简单的方法(使用自带的 Open VM Tools)

这是最推荐的方法,如果你安装了带桌面的 Ubuntu,通常已经内置了这个工具。它会自动完成“填零”和“压缩”两个步骤。

  1. 启动并登录你的 Ubuntu 虚拟机
  2. 确保安装了 open-vm-tools(通常已默认安装):
    sudo apt update
    sudo apt install open-vm-tools
    
  3. 执行以下命令开始自动缩小根目录(/)所在的磁盘:
    sudo vmware-toolbox-cmd disk shrink /
    

    注意:如果你的日志在其他挂载点(比如 /var 是独立分区的),请把 / 换成对应的路径,或者直接使用 sudo vmware-toolbox-cmd disk shrinkonly

  4. 等待完成。屏幕上会显示一个进度条,它会先在客户机内填充零,然后触发宿主机的 VMware 软件自动回收空间。

方法二:手动填零 + 宿主机压缩(如果方法一报错或失效)

如果 vmware-toolbox-cmd 因为某些权限设置无法直接压缩宿主机磁盘,你可以采用传统的手动两步法:

第一步:在 Ubuntu 虚拟机内部“填零”

这步的目的是创建一个全都是0的文件,把剩余空间全部占满,然后再把它删掉。

  1. 在 Ubuntu 终端中运行以下命令(请确保在执行期间不要进行其他写操作):
    sudo dd if=/dev/zero of=/zero_file bs=1M
    
  2. 注意: 这个命令会一直运行,直到提示“No space left on device(设备上没有空间)”为止。这是正常的预期现象! 意味着所有空闲空间都被填满零了。
  3. 填满后,删除这个全零文件:
    sudo rm -f /zero_file
    
  4. 关闭(Shut Down)虚拟机。 (必须关机才能进行第二步)。

第二步:在 VMware 宿主机上压缩磁盘

关闭虚拟机后,在你的物理机(Windows/Mac)上操作:

如果你用的是 VMware Workstation (Windows/Linux):

  1. 在虚拟机列表中右键点击该虚拟机 -> 设置 (Settings)
  2. 选择 硬件 (Hardware) 选项卡下的 硬盘 (Hard Disk)
  3. 在右侧面板中,点击 碎片整理 (Defragment)(可选,但推荐先点一下)。
  4. 完成后,点击 压缩 (Compact)。VMware 会开始扫描全零区块并真正减小 .vmdk 文件的体积。

如果你用的是 VMware Fusion (Mac):

  1. 点击菜单栏的 虚拟机 (Virtual Machine) -> 设置 (Settings)
  2. 选择 硬盘 (Hard Disk)
  3. 展开“高级选项”,点击 清理磁盘 (Clean up disk) 或使用主界面提示的“可回收空间”功能。

⚠️ 重要注意事项:

  1. 快照拦截: 如果你的虚拟机有快照(Snapshots),磁盘是绝对无法缩小的!因为快照锁定了之前的磁盘状态。请务必在 VMware 菜单栏中打开“快照管理器”,删除所有快照后再进行上述操作。
  2. 宿主机可用空间: 在进行压缩时,宿主机物理硬盘上最好留有足够的空余空间,因为 VMware 可能会在合并数据时产生临时文件。
  3. 耗时较长: 无论哪种方法,由于涉及到大量的磁盘 I/O 读写,可能会花费十几分钟到数小时不等,请耐心等待。