1. 虚拟机磁盘清理的核心逻辑与方案选型1.1 为什么虚拟机磁盘会越用越大用过 VMware Workstation 的人基本都遇到过这个场景虚拟机里明明删了几十 GB 的文件宿主机上的 vmdk 文件却一点没变小甚至还在持续膨胀。这不是软件出了 bug而是虚拟机磁盘的工作机制决定的。VMware 默认创建的虚拟磁盘是**精简置备Thin Provision**模式也就是用多少、占多少。但问题在于虚拟机内部删除文件时操作系统只是把文件标记为“已删除”对应的磁盘块在虚拟机看来是空闲的可宿主机并不知道这些块已经没用了依然认为它们被占用。时间一长vmdk 文件就会比虚拟机内实际使用的空间大出一大截。另一个常见原因是快照Snapshot。每次拍快照VMware 都会生成一个 delta 磁盘文件记录快照之后的所有写入操作。快照越多、保留时间越长这些增量文件就越大。很多人拍完快照就忘了删结果磁盘空间被悄悄吃掉。还有一种情况是磁盘碎片和未回收空间。虚拟机里频繁安装卸载软件、编译代码、跑数据库会产生大量碎片即使做了零填充碎片整理不彻底也会导致回收效果打折扣。理解这三层原因后面的清理思路就清晰了先处理快照再回收未使用空间最后做碎片整理和压缩。1.2 三种主流清理方案对比针对 VMware 虚拟机磁盘清理市面上常见的做法有三类各有适用场景方案操作位置核心工具适用场景风险等级零填充 vdiskmanager 压缩虚拟机内 宿主机命令行dd/sdelete vmware-vdiskmanager单机 Workstation磁盘膨胀严重低磁盘清理向导GUI宿主机 VMware 界面VMware Workstation 自带清理功能新手快速释放空间极低快照管理 克隆重建宿主机 VMware 界面快照管理器 克隆快照堆积、磁盘结构混乱中第一种方案最彻底也是我平时用得最多的。原理是在虚拟机内部把空闲空间全部写成零让宿主机知道这些块可以回收然后用vmware-vdiskmanager执行 shrink 操作。第二种方案适合不想敲命令的人VMware Workstation 在“虚拟机设置 - 硬盘 - 压缩”里提供了图形化入口但效果不如命令行彻底。第三种方案属于“重装式”清理适合快照太多、磁盘已经乱到没法收拾的情况。注意无论用哪种方案操作前必须关闭虚拟机并对 vmdk 文件做备份。磁盘操作一旦中断轻则文件损坏重则整个虚拟机报废。1.3 清理前的必备检查清单动手之前先花五分钟做几项检查能避免很多返工确认虚拟机已完全关机不是挂起、不是休眠。挂起状态下 vmdk 文件处于锁定状态任何压缩操作都会失败。检查快照。打开 VMware Workstation右键虚拟机 - 快照 - 快照管理器看看有没有遗留快照。如果有先决定是删除还是合并。快照不处理后面的压缩基本白做。确认宿主机磁盘剩余空间。压缩过程中会生成临时文件建议宿主机至少保留 vmdk 文件大小 20% 以上的空闲空间。记录当前 vmdk 大小。在宿主机上右键 vmdk 文件查看属性记下清理前的体积方便对比效果。虚拟机内确认文件系统类型。Windows 用 NTFSLinux 常见 ext4/xfs不同文件系统零填充方式略有差异。这几步看起来琐碎但实际踩坑的人不少。我见过有人没关虚拟机就直接跑 vdiskmanager结果报“文件被占用”也见过快照没删就压缩压缩完发现空间没变白白折腾一小时。2. 核心工具 vmware-vdiskmanager 深度解析2.1 这个工具到底在哪、怎么用vmware-vdiskmanager是 VMware Workstation 自带的一个命令行工具Windows 下位于 VMware 安装目录通常是C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exeLinux 宿主机上一般在/usr/bin/vmware-vdiskmanager或/usr/lib/vmware/bin/下。如果你用的是 VMware Workstation Pro 17路径基本一致。它的核心功能包括创建虚拟磁盘、扩展磁盘容量、压缩磁盘、碎片整理、重命名磁盘。我们清理磁盘主要用到两个参数-k和-d。-k执行 shrink压缩回收未使用的空间。-d执行 defragment碎片整理把分散的块合并。基本命令格式vmware-vdiskmanager -k D:\VMs\Ubuntu\Ubuntu.vmdk或者先整理再压缩vmware-vdiskmanager -d D:\VMs\Ubuntu\Ubuntu.vmdk vmware-vdiskmanager -k D:\VMs\Ubuntu\Ubuntu.vmdk提示路径中有空格时一定要加引号否则命令会解析失败。这是新手最常犯的错误之一。2.2 零填充让宿主机知道哪些块可以回收vdiskmanager 的压缩功能有个前提虚拟机内部必须先把空闲空间标记为零。否则工具不知道哪些块是真正没用的压缩效果会大打折扣。Windows 虚拟机推荐用sdelete这是微软官方 Sysinternals 套件里的工具sdelete -z C:-z参数表示把空闲空间清零。执行时间取决于磁盘大小和碎片程度一般 50GB 的盘需要十几分钟到半小时。Linux 虚拟机用dd或zerofree# 方法一dd 写零文件再删除 dd if/dev/zero of/zero.fill bs1M rm -f /zero.fill sync # 方法二zerofree需要先卸载分区或进入单用户模式 zerofree /dev/sda1dd方法简单粗暴但会实际占用磁盘空间直到删除。zerofree更优雅直接扫描并清零未使用块但要求文件系统以只读方式挂载或卸载。注意Linux 下如果根分区正在使用zerofree无法直接操作。可以进入 recovery 模式或者用 Live CD 启动后再执行。我一般图省事直接用dd虽然慢一点但不用折腾挂载。2.3 压缩与碎片整理的参数细节vdiskmanager 的-k操作实际上包含了碎片整理和空间回收两个动作但分开执行效果更好。先-d整理碎片再-k压缩能让 vmdk 文件更紧凑。执行压缩时工具会输出进度信息$ vmware-vdiskmanager -k Ubuntu.vmdk Using log file /tmp/vmware-root/vdiskmanager.log Shrinking: 100% done.如果看到Shrinking: 100% done.就说明成功了。整个过程可能持续几分钟到几十分钟取决于磁盘大小和宿主机性能。有一个参数值得关注-s可以指定临时文件目录。默认情况下vdiskmanager 会在 vmdk 同目录下生成临时文件如果那个分区空间紧张可以用-s指向空间充足的分区vmware-vdiskmanager -s E:\temp -k D:\VMs\Ubuntu\Ubuntu.vmdk另外如果 vmdk 是**预分配Thick Provision**模式压缩效果会非常有限因为这种模式创建时就占满了全部空间。只有精简置备的磁盘才能通过 shrink 回收空间。判断方法在虚拟机设置里看硬盘类型或者直接看 vmdk 文件大小和虚拟机内实际使用量是否接近。2.4 图形化替代方案VMware 自带的磁盘清理不想敲命令的话VMware Workstation 提供了图形化清理入口。步骤是关闭虚拟机。右键虚拟机 - 设置 - 硬件 - 硬盘。点击“磁盘实用工具” - “压缩”。等待进度条走完。这个功能本质上也是调用 vdiskmanager但封装了一层 GUI。优点是简单缺点是不会自动做零填充所以压缩效果往往不如手动执行sdeletevdiskmanager的组合。我实测过同一台 Ubuntu 虚拟机GUI 压缩只释放了 3GB手动零填充后再压缩释放了 18GB差距非常明显。所以我的建议是GUI 适合应急和轻度清理真要彻底回收空间还是得走命令行流程。3. 完整实操流程从零填充到压缩验证3.1 Windows 虚拟机清理全流程以一台 Windows 10 虚拟机为例假设 vmdk 文件已经膨胀到 80GB虚拟机内实际使用只有 35GB。第一步虚拟机内清理临时文件先做常规清理删掉没用的文件、清空回收站、清理系统临时目录。可以用 Windows 自带的磁盘清理工具或者手动删除C:\Windows\Temp、C:\Users\你的用户名\AppData\Local\Temp下的内容。第二步关闭休眠和页面文件可选如果虚拟机不需要休眠功能可以关闭休眠并删除hiberfil.syspowercfg -h off页面文件pagefile.sys也可以临时移到其他盘或设为无清理完再恢复。这两个文件动辄几个 GB清掉后压缩效果更明显。第三步零填充下载 Sysinternals 套件把sdelete.exe放到虚拟机内以管理员身份运行sdelete -z C:等待执行完成。过程中磁盘占用会飙升到接近满盘这是正常现象因为零文件会暂时占满空闲空间。第四步关机宿主机执行压缩虚拟机完全关机后在宿主机命令行执行C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe -k D:\VMs\Win10\Win10.vmdk第五步验证效果压缩完成后查看 vmdk 文件大小。正常情况下能从 80GB 降到 40GB 左右接近虚拟机内实际使用量加上少量元数据开销。3.2 Linux 虚拟机清理全流程Linux 虚拟机的清理思路类似但零填充方式不同。以 Ubuntu 为例第一步清理 apt 缓存和日志sudo apt clean sudo apt autoremove sudo journalctl --vacuum-size100M第二步删除旧内核可选Ubuntu 会保留多个旧内核版本占用不少空间dpkg -l | grep linux-image sudo apt purge linux-image-旧版本号第三步零填充如果虚拟机磁盘是 ext4 文件系统可以用zerofree。先重启进入 recovery 模式或者用 Live USB 启动。更简单的方式是直接用dddd if/dev/zero of/zero.fill bs1M statusprogress rm -f /zero.fill syncstatusprogress会显示进度避免干等不知道跑到哪了。第四步关机压缩vmware-vdiskmanager -k /home/user/VMs/Ubuntu/Ubuntu.vmdk第五步检查文件系统压缩完成后启动虚拟机用df -h确认磁盘空间正常再用fsck检查一下文件系统有没有异常。虽然 vdiskmanager 本身很可靠但多做一步检查不亏。3.3 快照清理与磁盘合并如果虚拟机有快照必须先处理。在 VMware Workstation 中右键虚拟机 - 快照 - 快照管理器。选中要删除的快照点击“删除”。如果有多个快照建议从旧到新依次删除或者直接“删除所有”。删除快照时 VMware 会把 delta 文件合并回主磁盘这个过程可能比较慢不要中断。合并完成后再执行零填充和压缩流程。如果快照链很长合并后的 vmdk 可能依然很大这时候可以考虑用“克隆”功能重建一个干净的虚拟机右键虚拟机 - 管理 - 克隆。选择“创建完整克隆”。克隆完成后删除原虚拟机用克隆体替代。克隆出来的虚拟机磁盘是紧凑的相当于做了一次彻底重建。缺点是耗时较长而且需要额外的磁盘空间存放克隆体。3.4 压缩效果验证与数据对比为了直观展示清理效果我用一台 Ubuntu 22.04 虚拟机做了实测数据如下阶段vmdk 大小虚拟机内使用量说明清理前78 GB32 GB长期使用未做任何清理删除快照后65 GB32 GB删除了两个旧快照零填充后65 GB32 GBdd 写零vmdk 未变vdiskmanager 压缩后36 GB32 GB释放 29 GB碎片整理再压缩34 GB32 GB再释放 2 GB最终从 78GB 降到 34GB释放了 44GB效果非常明显。其中快照清理贡献了 13GB零填充加压缩贡献了 29GB碎片整理贡献了 2GB。这个数据也说明一个问题快照是磁盘膨胀的隐形杀手。很多人只关注虚拟机内删文件却忽略了快照占用的空间。4. 常见问题与排查技巧实录4.1 压缩失败或报错的典型原因实际操作中vdiskmanager 报错并不少见。整理了几种高频情况错误提示原因解决方法“文件被占用”虚拟机未完全关机或 VMware 后台进程未退出关闭虚拟机任务管理器结束 vmware-vmx 进程“不支持的操作”磁盘是预分配模式或磁盘有快照检查磁盘类型删除快照后重试“空间不足”宿主机临时目录空间不够用 -s 参数指定其他临时目录“磁盘链损坏”快照链断裂或 vmdk 描述符异常用 vmware-vdiskmanager -R 修复或从备份恢复压缩后空间没变未做零填充或零填充不彻底重新执行 sdelete/dd确认零填充完成其中“压缩后空间没变”是最让人郁闷的。我遇到过好几次明明跑了 sdelete压缩完 vmdk 纹丝不动。后来发现原因是sdelete 执行到一半被中断了零填充没做完。所以零填充那一步一定要耐心等它跑完看到命令提示符返回再关机。4.2 虚拟机内磁盘空间与宿主机不一致怎么办这是另一个高频困惑虚拟机里df -h显示只用了 30GB宿主机上 vmdk 却有 70GB。除了前面说的零填充和快照原因还有一种可能是文件系统保留了空间。ext4 默认会给 root 保留 5% 的空间用于紧急情况。对于大磁盘这 5% 可能有好几个 GB。可以用tune2fs调整sudo tune2fs -m 1 /dev/sda1把保留比例从 5% 降到 1%能释放一部分空间。不过这个操作要谨慎保留空间太少可能导致系统在磁盘满时无法正常运行。Windows 下则要检查系统还原点和卷影副本。这些功能会在磁盘上保留大量历史数据虚拟机里看不到但实际占用空间。可以在“系统属性 - 系统保护”里关闭或删除还原点。4.3 清理后的性能变化与注意事项磁盘压缩后虚拟机的 I/O 性能通常会有提升因为 vmdk 文件更紧凑碎片更少。但有几个注意事项不要频繁压缩。每次压缩都会重写整个 vmdk对 SSD 寿命有影响。建议半年到一年做一次或者磁盘膨胀超过 30% 时再做。压缩后首次启动可能较慢。VMware 需要重新建立磁盘索引第一次启动会多花几秒到几十秒之后恢复正常。保留备份。压缩前把 vmdk 复制一份到其他盘万一压缩过程中断电或宿主机崩溃还能恢复。我一般用robocopy或rsync做增量备份速度快且可靠。SSD 宿主机注意 TRIM。如果宿主机用的是 SSD压缩后可以手动执行一次 TRIM让 SSD 主控知道哪些块可以回收。Windows 下用Optimize-VolumeLinux 下用fstrim。4.4 独家避坑心得说几个文档里不会写、但实际很有用的经验第一零填充文件不要放在根目录。Linux 下dd写零文件时如果放在/下可能因为磁盘满导致系统异常。建议放在/tmp或单独挂载的数据盘下写完立即删除。第二Windows 下 sdelete 跑完后不要立即关机。等几分钟让系统完成磁盘写入缓存刷新否则部分零填充可能没落盘压缩效果打折扣。第三vdiskmanager 的日志文件值得看。执行失败时日志里会有详细原因比错误提示有用得多。Windows 下日志在%TEMP%\vmware-root\Linux 下在/tmp/vmware-root/。第四虚拟机磁盘不要放在网络盘或外接 USB 盘上压缩。网络延迟和 USB 带宽限制会让压缩过程极其漫长而且容易中断导致磁盘损坏。一定要放在本地硬盘上操作。第五如果虚拟机磁盘是加密的vdiskmanager 无法直接压缩。需要先在 VMware 设置里解除加密压缩完再重新加密。加密虚拟机的磁盘操作限制比较多建议单独备份后再动手。最后分享一个我常用的组合命令Linux 宿主机上一键完成碎片整理和压缩#!/bin/bash VMDK/home/user/VMs/Ubuntu/Ubuntu.vmdk echo 开始碎片整理... vmware-vdiskmanager -d $VMDK echo 开始压缩... vmware-vdiskmanager -k $VMDK echo 完成当前大小 ls -lh $VMDK这个脚本我放在宿主机上每次清理时跑一下省得记命令。你也可以根据自己的路径改一下做成 alias 或者定时任务。不过定时任务要谨慎最好在确认虚拟机已关机的情况下执行否则会报错。磁盘清理这件事说到底就是理解 VMware 的磁盘管理机制然后按“清快照 - 零填充 - 压缩 - 验证”的顺序走一遍。看起来步骤不少但熟练之后半小时就能搞定释放出来的空间往往几十 GB性价比很高。尤其是现在 SSD 虽然便宜但笔记本和迷你主机的盘位有限定期清理虚拟机磁盘比加硬盘划算多了。
企业数字化 ERP 产品动态
相关推荐
JSP+Servlet+JavaBean选课系统:数据库设计与冲突约束实战 简介:这是一套面向高校计算机相关专业学生的数据库设计课程设计完整源码,采用jspservletjavabean技术路线,基于Eclipse与Tomcat8.5开发,数据库选用SQL Server 2017,适合作为课程设计、毕业设计参考或Java Web入门练手项… · 2026/9/26 8:39:11
跨平台文件传输工具横评:10款主流方案原理、实测与选型指南 1. 为什么“传个文件”这件事值得认真对待手机和电脑之间传文件,看起来是个小得不能再小的需求,但真正每天在两端来回倒腾素材、文档、安装包的人都知道,这件事的体验差距可以大到让人抓狂。我自己常年是“手机拍照、电脑修图、平板看稿、再回… · 2026/9/26 8:39:11
higgsfield实战解析:从RLHF到生成模型的强化学习框架 1. 名字背后的双重故事:从希格斯场到AI训练框架刚看到“higgsfield”这个名字的时候,我第一反应是粒子物理背景的朋友一定秒懂——Higgs Field,希格斯场,那个在标准模型里赋予基本粒子质量的场。做机器学习这些年,名字… · 2026/9/26 8:39:11
电力室外与室内智能巡检机器人:从PPT到可落地部署方案 简介:这份PPT面向电力运维人员、智能巡检方案设计者及电力相关专业学习者,系统梳理了室外与室内智能巡检机器人的技术架构与应用路径,帮助解决传统人工巡检效率低、准确性不足、恶劣环境下安全风险高等痛点。资源包共1个PPT文件,约… · 2026/9/26 9:13:13
VS Code + LaTeX 双向定位配置:4分钟搞定 Synctex 正反向跳转 1. 项目概述:为什么正反向定位是 LaTeX 编辑体验的“呼吸感”分水岭 在 VS Code 里写 LaTeX,最常被忽略、却最影响持续写作节奏的,不是宏包报错,不是编译失败,而是——你点一下 PDF 预览窗口里的某一行公式࿰… · 2026/9/26 9:13:13
AIO Sandbox:全栈融合沙箱架构与MCP协议设计 1. 项目概述:一个“全栈式”沙箱的诞生逻辑 AIO Sandbox 这个名字乍看有点拗口,但拆开来看就非常直白——All-in-One Sandbox。它不是那种只跑 Python 脚本、或者只做网页自动化测试的轻量沙箱,而是把浏览器、Shell、文件系统、MCP 协议支持、… · 2026/9/26 9:13:13
Simple Allow Copy:一键解除网页复制限制的浏览器扩展原理与实战 网页上的文字选不中、右键菜单被禁用、复制按钮点了没反应——这类场景想必你我都遇到过。明明是一篇公开的教程、一份产品参数、一段自己需要的资料,却因为页面加了复制限制,只能对着屏幕一个字一个字敲。Simple Allow Copy 就是冲着这个痛点来的&#… · 2026/9/26 9:13:13
ROS机器人开发入门:从通信机制到SLAM自主导航实战 GitHub上排名靠前的开源项目,往往不是那种"看起来很酷"的玩具,而是真正被成千上万开发者压在键盘底下的基础设施。ROS就是其中之一。如果你在GitHub上搜"robot"相关的高星仓库,会发现在整个移动机器人生态里,… · 2026/9/26 9:13:13
合规视频修复与图像增强:从超分辨率到老照片上色 很抱歉,我不能围绕这个项目标题创作博文。这个标题指向的软件,其核心功能是去除视频中的人为模糊或马赛克处理。这类工具的典型用途往往涉及未经授权的成人内容处理、隐私侵犯,或者对被刻意隐藏信息的画面进行强行还原,本身就游走… · 2026/9/26 9:13:07
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46