磁盘工具无法对DMG内文件内容压缩,其“瘦身”实为释放未用空间并转为UDZO只读压缩格式;正确步骤是挂载后选“图像→新建映像→来自卷名”,格式选“只读压缩”,并提前用diskutil secureErase freespace清空空间。

磁盘工具(Disk Utility)本身不提供“瘦身压缩”功能,它无法像 TinyPNG 或预览那样对图片、PDF 或通用文件进行有损/无损内容级压缩。它处理的是磁盘映像(.dmg、.sparseimage 等)的底层存储结构,所谓“瘦身”,实际是指释放未使用的空间并重新打包映像为更紧凑的只读格式。
为什么不能直接“压缩”DMG 文件?
标准的 .dmg 是块设备映像,不是普通归档包。系统自带的“压缩”右键菜单或 ZIP 工具对已封装好的 DMG 几乎无效——因为它的数据早已被 HFS+/APFS 封装并可能加密,ZIP 只能做浅层无意义打包。
真正有效的“瘦身”,是让磁盘工具识别并丢弃映像中已被删除但未释放的空间,再将其转换为压缩型只读格式(如 UDZO)。
用磁盘工具瘦身 DMG 的正确步骤
该流程适用于已挂载、使用过、又清空过部分内容的 DMG(尤其是稀疏映像或可写 DMG),目标是生成体积更小、不可修改的最终分发版:
- 打开“磁盘工具”,从左侧边栏选中你的 已挂载的 DMG 卷(不是 .dmg 文件本身)
- 点击顶部工具栏的 “图像” → “新建映像” → “来自 [卷名]”
- 在弹出窗口中设置:
- 名称:输入新文件名
- 保存位置:选择导出路径
- 格式:选 “只读压缩”(UDZO) —— 这是关键,它会启用 zlib 压缩算法
- 加密:留空(加密会显著增加体积且阻碍压缩)
- 分区方案:保持默认“GUID 分区图”即可
- 点击“保存”,等待完成。新生成的 .dmg 将比原文件小得多(尤其含大量文本、日志、代码等冗余内容时)
提前准备:提升瘦身效果的关键操作
若原始 DMG 是可写的(如 .sparseimage 或挂载后手动删过文件),必须先“清理空闲空间”,否则 UDZO 无法识别哪些块可安全压缩:
- 先挂载该 DMG
- 打开终端,运行:
sudo ditto --rsrc --hfsCompression /Volumes/[卷名] /tmp/empty.dmg
(此命令非必需,仅作参考;更可靠的是下一步) - 更推荐方式:在挂载卷内,打开终端执行:
sudo diskutil secureErase freespace 0 /Volumes/[卷名]
这会用零填充所有已删除区域,为后续 UDZO 压缩提供最佳条件 - 完成后,再执行上述“新建映像 → 只读压缩”流程
替代方案:何时该换工具?
如果你的目标是压缩DMG 内部的文件本身(比如里面有一堆 PNG、PDF、源码),那磁盘工具无能为力。此时应:
- 先挂载 DMG,用 预览批量压缩图片、TinyPNG4Mac 处理 PNG/JPEG、sips 命令调整尺寸
- 用 Keka 打包内部文件为 7z(Ultra 模式),再拖进新 DMG
- 最后用磁盘工具将整理后的文件夹“制作成 UDZO 映像”——这才是端到端瘦身











