frippery.org 上的 zerofree 和 pdpmake 分别是什么工具?
更新时间
zerofree 是一个用于清除 ext2/3/4 文件系统中已删除数据的工具,pdpmake 则是 POSIX make 的公有领域实现。两者都来自 frippery.org,被站点列为“最流行且较新”的页面,分别面向文件系统清理和构建自动化两类需求。
zerofree:让已删除数据真正归零
它解决什么问题
在 ext2/3/4 文件系统中,删除文件通常只释放元数据引用,数据块本身可能仍保留旧内容。这带来两个实际影响:
- 磁盘镜像(尤其是虚拟机镜像)中残留已删除数据,压缩率低、体积偏大;
- 需要彻底清理的空间无法通过普通删除完成。
zerofree 的做法是扫描文件系统中未被分配的数据块,把其中非零的内容写为零。这样处理后,镜像更容易被压缩工具识别出大段连续零块,体积明显下降。
使用前提与步骤
适用条件是文件系统为 ext2/3/4,且操作时该文件系统不能处于挂载可写状态,否则扫描期间数据可能变化。典型流程:
- 卸载目标文件系统,或将其以只读方式挂载;
- 对对应块设备运行 zerofree,例如
zerofree /dev/sdXN; - 等待扫描完成,工具会报告处理结果;
- 重新挂载或对镜像执行压缩。
验证与常见卡点
验证方式是观察处理前后镜像压缩后的体积变化,或确认工具正常退出。常见卡点包括:文件系统仍处于可写挂载导致工具拒绝运行;对非 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 都属于小而专注的命令行工具:一个处理文件系统层面的残留数据,一个处理构建层面的标准兼容,共同点是解决具体问题而非提供大而全的平台。