frippery.org 上的 zerofree 和 pdpmake 分别是什么工具?

更新时间

zerofree 是一个用于清除 ext2/3/4 文件系统中已删除数据的工具,pdpmake 则是 POSIX make 的公有领域实现。两者都来自 frippery.org,被站点列为“最流行且较新”的页面,分别面向文件系统清理和构建自动化两类需求。

zerofree:让已删除数据真正归零

它解决什么问题

在 ext2/3/4 文件系统中,删除文件通常只释放元数据引用,数据块本身可能仍保留旧内容。这带来两个实际影响:

  • 磁盘镜像(尤其是虚拟机镜像)中残留已删除数据,压缩率低、体积偏大;
  • 需要彻底清理的空间无法通过普通删除完成。

zerofree 的做法是扫描文件系统中未被分配的数据块,把其中非零的内容写为零。这样处理后,镜像更容易被压缩工具识别出大段连续零块,体积明显下降。

使用前提与步骤

适用条件是文件系统为 ext2/3/4,且操作时该文件系统不能处于挂载可写状态,否则扫描期间数据可能变化。典型流程:

  1. 卸载目标文件系统,或将其以只读方式挂载;
  2. 对对应块设备运行 zerofree,例如 zerofree /dev/sdXN;
  3. 等待扫描完成,工具会报告处理结果;
  4. 重新挂载或对镜像执行压缩。

验证与常见卡点

验证方式是观察处理前后镜像压缩后的体积变化,或确认工具正常退出。常见卡点包括:文件系统仍处于可写挂载导致工具拒绝运行;对非 ext 系列文件系统使用;以及在运行中的系统盘上直接操作。它清理的是“已删除但未归零”的数据块,不是安全擦除工具,不应把它当作满足特定数据销毁标准的方案。

pdpmake:一个公有领域的 POSIX make

它是什么

pdpmake 是 POSIX make 的一个实现,以公有领域方式发布。它的定位不是替代 GNU make 的全部扩展功能,而是提供一个遵循 POSIX make 规范、授权限制极少的构建工具。对于需要可自由复制、修改、再分发的环境,或希望构建脚本只依赖标准 make 行为的项目,这类实现有实际价值。

适合谁、怎么判断

维度 pdpmake 常见 GNU make
规范依据 POSIX make POSIX make 加大量 GNU 扩展
授权 公有领域 GPL
适合场景 强调可移植性、授权宽松、只用标准特性 依赖 GNU 扩展语法、模式规则等

选择时先检查项目 Makefile 是否使用了 GNU 专有语法(如某些函数、.PHONY 之外的扩展指令)。如果构建脚本严格限定在 POSIX 范围内,pdpmake 可以作为构建入口;如果脚本大量依赖 GNU 扩展,直接替换会失败,需要先改造脚本。

使用与验证

基本用法与 make 一致:在含 Makefile 的目录中执行 pdpmake 及目标名。验证方式是先跑一次完整构建,确认所有规则被正确解析和执行;再对比与原有 make 的构建产物是否一致。常见卡点是 Makefile 中隐含的 GNU 扩展在 pdpmake 下不被识别,表现为规则未触发或变量展开结果不同。

两者的共同背景

frippery.org 由 Ron Yorston 维护,站点自述大部分内容年代久远,并把 busybox-w32、GNOME Shell Frippery、zerofree、pdpmake 等列为最流行且更新较及时的页面。zerofree 和 pdpmake 都属于小而专注的命令行工具:一个处理文件系统层面的残留数据,一个处理构建层面的标准兼容,共同点是解决具体问题而非提供大而全的平台。