Tape → Tarball → Cloud

Tarball 简史

从磁带时代的归档工具,到云原生时代的基石
01名字的起源:磁带归档

tar 的全称是 Tape ARchive(磁带归档)。

上世纪 70 年代末,硬盘空间极其昂贵且容量极小。为了备份数据,工程师们使用磁带机作为存储介质。

tar 最初的设计目标不是为了"压缩"文件,而是为了"打包"。它将文件系统中的多个文件、目录及其权限信息按顺序连接起来,形成一个连续的比特流,直接写入磁带。

它最早出现在 1979 年发布的 Version 7 Unix 中,取代了更早期的 tp 实用程序。

02为什么叫 "Ball" (球)?

"Tarball" 这个昵称大约在 90 年代随着 GNU/Linux 的流行而走红。

当工程师把一堆零散的文件通过 tar 命令整合成一个巨大的、单一的文件时,就像是把一堆乱七八糟的毛线缠绕成了一个毛线球

在开源软件早期,源码分发几乎全靠 Tarball。开发者们常说:"我把 Tarball 发给你。" 这个称呼就一直用到了今天。

03技术的演进:从打包到压缩

早期的 tar 只是单纯的堆叠文件,并不减小体积。随着算法的发展,tar 开始与其他压缩工具"联姻":

年代组合后缀特点
80 年代 tar + compress .tar.Z 最早的压缩尝试,现已少见
90 年代 tar + gzip .tar.gz / .tgz 经典 平衡了速度与压缩比
2000s tar + bzip2 .tar.bz2 压缩率更高,但速度较慢
现代 tar + xz .tar.xz 极高压缩率 常用于 Linux 内核分发
# 不同时代的打包命令对比
# 80s — compress
tar cf - sources | compress > archive.tar.Z

# 90s — gzip(经典组合)
tar czf archive.tar.gz sources/

# 2000s — bzip2
tar cjf archive.tar.bz2 sources/

# Modern — xz
tar cJf archive.tar.xz sources/

# GNU tar 自动识别(-a 参数,90s 引入)
tar caf archive.tar.xz sources/
04关键里程碑
1979
Version 7 Unix 首次发布 tar,取代 tp
1988
POSIX.1-1988 统一 tar 头部格式,标准化跨系统兼容
~1992
GNU tar (gtar) 发布,自识别压缩、增量备份
2000+
Docker/OCI 镜像用 tar layer 打包;Tarball 仍是工业标准
📦 POSIX 标准化(1988)

早期不同 Unix 厂商的 tar 格式略有差异。POSIX.1-1988 定义了统一的 tar 头部格式,确保了跨系统的兼容性。这份标准至今仍是 tar 格式的基石。

🐧 GNU tar 的统治(1990s)

GNU 项目重新编写了 tar(即 gtar)。它引入了自动识别压缩格式(-a 参数)和增量备份等功能,至今仍是 Linux 发行版默认预装的版本。

🐳 被 ZIP 和容器挑战(2000s)

Windows 世界 ZIP/RAR 更流行;云原生时代 Docker Image 用分层 tar 打包。但 Tarball 依然是 Linux 源码分发和服务器备份的工业标准,从未被真正取代。

05Tarball 为什么能长生不老?
🔐

保留元数据

完美保留 Unix/Linux 的文件权限、所有者、符号链接等关键信息,这是早期 ZIP 做不到的。

🌊

流式处理

最初为磁带设计,天然支持"流"。一边打包一边传输,一边解压一边安装。

极其稳定

40 年前的 tar 包,今天的计算机依然能打开。这种向前兼容性是技术界的奇迹。

💡 冷知识

tar 文件的结尾通常有两个连续的 512 字节全零数据块。这在早期是用来告诉磁带机:
"嘿,到头了,别再转了。"