看似最朴素、实则最影响性能体验的技术领域——压缩与归档。从经典 DEFLATE 到现代 Zstandard,从系统级 swap 压缩到归档管理器 GUI,从备份工具到天文/基因组的科学数据格式,麒麟系统中的相关包构成了一条完整的"压缩技术栈"。本文将按"通用压缩算法 → 高性能场景库 → 归档管理工具 → 系统级内存压缩 → 备份与数据格式"五层架构进行分析。
压缩是 Linux 系统的"隐形基础设施"——你几乎感觉不到它,但它无处不在:HTTP 响应体、内核模块、源码包 tarball、数据库备份、内存 swap、固件更新包……选择哪种压缩算法,本质上是在压缩率、速度、CPU 开销、内存占用之间做权衡。麒麟V11将这一权衡的"答案集"完整预置,覆盖了从 1992 年诞生的 gzip,到 2016 年由 Facebook 开源的 zstd,再到面向科学计算 HDF5、生物信息学 CRAM 的专用格式。
一、通用压缩算法核心
这一层是整个压缩生态的"地基",所有上层应用最终都会调用到底层压缩库。
gzip— DEFLATE 算法的经典实现
GNU 项目的旗舰压缩工具,基于 DEFLATE(LZ77 + Huffman 编码)算法,1992 年由 Jean-loup Gailly 与 Mark Adler 创建,遵循 RFC 1952 规范。.gz 与 tar.gz 已成为开源软件分发的"事实标准"。gzip 内部使用 32KB 滑动窗口进行 LZ77 搜索,再对输出做 Huffman 熵编码,支持 1-9 级压缩(-1 最快,-6 默认,-9 最佳)。
调用关系:gzip → 内部使用 zlib;HDF5、htslib、git 等都依赖 zlib 实现透明压缩;RPM 包元数据默认使用 gzip 压缩存储。
bzip2— 高压缩比的 BWT 算法
Julian Seward 于 1996 年发布的高质量无损压缩工具,基于 Burrows-Wheeler 变换(BWT)+ Move-to-Front + Huffman 编码三段式管道。bzip2 的压缩比比 gzip/DEFLATE 高出 10-20%,代价是速度慢 2-3 倍且内存占用更高(按 100KB-900KB 分块)。在麒麟V11中,.tar.bz2 仍广泛用于 Linux 内核源码等大型源码分发,git-archive 也支持该格式。
调用关系:git-archive → bzip2;tar → bzip2;某些日志归档工具将 bzip2 作为高压缩比后端。
brotli— Google 的 Web 优化压缩
2013 年由 Google 开源的通用无损压缩算法,专为 Web 内容压缩优化。它结合 LZ77 现代变体 + Huffman + 二阶上下文建模,文本压缩率比 gzip 高 20-26%,仅次于 zstd。Brotli 最大的杀手锏是内置 13,504 个常见 Web 字符串(HTML/CSS/JS 关键词)的静态字典,显著提升小文件压缩率;同时支持高达 16MB 的滑动窗口(gzip 仅 32KB)。所有主流浏览器和 Nginx/Apache 都将其作为 HTTP Content-Encoding 的标准选项。
调用关系:httpd / nginx(可选模块)→ libbrotli;浏览器 → libbrotli 解压;麒麟V11的 brotli 包包含 4 个子包:brotli 命令行工具、libbrotli 核心库、libbrotli-devel 开发文件。
compress-lzf— Java 极速 LZF 算法
Tatu Saloranta 开发的 Java 版 LZF 压缩库,基于 Marc A. Lehmann 的原始 LZF 算法。设计哲学是"以压缩率换速度":不使用 Huffman 等计算密集型步骤,压缩速度达到 Deflate 的 5-6 倍,解压速度快 2 倍。提供 LZFInputStream/LZFOutputStream 流式 API 和块压缩两种模式,零外部依赖,纯 Java 实现,适合 Java 应用内嵌做会话缓存或网络传输压缩。
调用关系:Java 业务应用 → compress-lzf;常用于 Tomcat session 序列化、消息中间件、Redis Java 客户端。
dain-snappy— Snappy 压缩的 Java/JNI 实现
Google Snappy 算法的 Java 实现。Snappy 的目标是"极速",压缩/解压速度达 200-400 MB/s,压缩率约 50-70%,内存占用仅 32KB+。dain-snappy 提供 JNI 绑定调用原生 C++ 库以获得接近原生的性能,并兼容 Google Snappy C++ 的帧格式,可与 Hadoop、Cassandra、LevelDB 等使用 Snappy 的系统互操作,是大数据生态的关键压缩后端。
调用关系:Cassandra/Hadoop/Avro/Parquet → Snappy;Java 应用通过 dain-snappy 调用原生 libsnappy。
blosc— 二进制数据专用超高速压缩
专为二进制数据优化的高性能无损压缩库,核心设计理念惊人:"压缩比内存拷贝还快"。blosc 通过分块(Blocking)+ 字节重排(Shuffle)+ SIMD 加速(SSE2/AVX2/NEON),解压速度可超过传统 memcpy()——因为现代 CPU 速度远快于内存带宽,将数据压缩后再传输到缓存反而能减少实际数据搬运量。blosc 内部支持 BloscLZ/LZ4/LZ4HC/Snappy/Zlib/Zstd 等多种编解码器,并自动选择最优策略,是 NumPy/pandas/PyTables 等科学计算栈的默认压缩后端。
调用关系:PyTables / h5py / bcolz → blosc;blosc 内部可调用 LZ4/Zstd 等后端算法。
二、高性能场景压缩库层
这一层面向特殊场景优化:一个是面向大型机硬件加速,另一个面向 32KB 内嵌空间的极致内存压缩。
genwqe-tools— IBM zSystems 硬件压缩加速
IBM 为大型机(zSystems / Linux on IBM Z)提供的硬件压缩加速工具集,配合 GenWQE(Generic Work Queue Engine)PCIe FPGA 加速卡(如 zEDC Express)使用。该工具通过硬件加速 DEFLATE 算法,将 CPU 密集型的 zlib 压缩卸载到专用 FPGA,大文件压缩可提速 5-10 倍(80 MB/s → 500 MB/s),高并发场景下 CPU 占用从 100% 降至 10%。提供 genwqe_gzip、genwqe_gunzip 命令行替代品,以及 libzADC zlib 兼容库(可通过 LD_PRELOAD 透明加速)。
调用关系:应用通过 LD_PRELOAD=libzADC.so → 透明替换 zlib → 调用 GenWQE FPGA 卡;IBM Java 7.1+ 内置 GenWQE 加速支持。
etmem— openEuler 内存分级扩展
openEuler 社区开发的内存分级扩展(Memory Vertical Expansion)技术,将内存中的"冷数据"自动迁移到压缩内存(zram)或 NVMe SSD,扩展可用内存容量、降低内存成本。etmem 将内存分为热/温/冷三级,基于页面访问频率自动识别冷热数据,利用内核 page migration 机制实现透明搬迁,对应用零侵入。
调用关系:etmem 用户态守护进程 → 内核 page migration 接口 → zram(压缩内存后端)/ NVMe SSD(冷数据后端)。
三、归档管理工具层(3 个包)
这一层提供"用户可见"的归档/压缩管理能力:图形化归档管理器、Windows 兼容的 CAB 处理、自动化归档框架。
engrampa— MATE 桌面归档管理器
MATE 桌面环境的官方归档管理器(Archive Manager),源自 GNOME 2 时代的 File-Roller 分支。提供 GTK 图形界面支持创建、查看、修改、提取 tar/tar.gz/tar.bz2/tar.xz/ZIP/7z/rar/AR/CPIO 等主流格式。底层通过调用外部命令行工具(tar、gzip、bzip2、xz、zip、7z)执行实际压缩/解压操作,是 MATE 桌面"开箱即用"体验的关键组件。
调用关系:用户点击 engrampa GUI → engrampa → 外部调用 tar/gzip/zip/7z → 调用底层 zlib/lzma 等库;Caja 文件管理器通过 dbusmenu-qt 集成右键菜单。
gcab— GNOME Cabinet 文件工具
GNOME 项目开发的 Microsoft Cabinet(.cab)归档文件处理工具,支持创建(gcab -c)、提取(gcab -x)、列出(gcab -t)CAB 文件。CAB 是 Microsoft 开发的归档压缩格式,广泛用于 Windows 安装程序(.msi 内部)、Windows 更新包、设备驱动包、固件更新包。gcab 通过 libgcab-1.0 GObject 库暴露 CAB 处理能力,支持 MSZIP(Deflate)和 LZX 压缩算法。
调用关系:fwupd(固件更新)→ libgcab → 解析 LVFS 分发的 CAB 固件包;GNOME Files → libgcab 预览 CAB 内容。
gnome-autoar— GNOME 自动归档框架
GNOME 桌面的自动归档压缩/解压框架,封装 libarchive 的复杂 API,提供基于 GObject 的高级接口。设计目标四个关键词:简单(几行代码实现归档)、安全(自动处理路径穿越攻击)、自动(自动检测格式)、异步(GLib 异步模式不阻塞 UI)。自动识别 tar/tar.gz/tar.bz2/tar.xz/zip/7z/rar/cpio/ar 等格式,并提供路径遍历防护、符号链接安全控制等企业级安全特性。
调用关系:GNOME Files / Nautilus / GNOME 文本编辑器 → gnome-autoar → libarchive → 调用 zlib/bzip2/lzma 等底层库。
四、备份与文件恢复工具层(2 个包)
这一层聚焦"数据保护":传统 Unix 增量备份,以及 Linux 经典文件搜索工具集(文件查找是备份/归档流程的前置操作)。
dump— ext2/3/4 文件系统备份
Linux/Unix 系统中用于备份 ext2/ext3/ext4 文件系统的经典命令行工具,通过直接读取文件系统底层数据结构(inode、块位图)确定需备份的文件,支持 0-9 级别的完整/增量备份,是 Unix 传统备份体系的核心组件。配合 restore 工具可从 dump 备份中恢复数据。dump 的 0-9 级别配合 Tower of Hanoi 轮转策略可实现极低存储成本的长期备份方案。
调用关系:dump → 直接读取 ext2/3/4 inode 表(绕过 VFS);可通过管道与 gzip/bzip2 组合实现备份数据压缩;cronie 定时调度 dump 实现自动化备份。
findutils— GNU 文件搜索工具集
GNU 操作系统的基本文件搜索工具集,包含四个核心工具:find(实时递归搜索,支持名称/类型/大小/时间/权限/所有者等多维条件,-exec/-delete 灵活操作)、locate(基于预建索引数据库的极速查找)、updatedb(构建 locate 索引)、xargs(从标准输入构建命令行执行)。findutils 是 Linux From Scratch 和几乎所有 Linux 发行版的基础软件包。在备份/压缩流程中,find ... -exec tar czf 是最常见的"先筛选后打包压缩"模式。
调用关系:find → 直接调用 getdents() 系统调用;locate/updatedb 共享 mlocate 数据库;xargs 从 stdin 读取并执行外部命令(常配合 tar/gzip 做归档)。
五、科学与领域专用格式层
这一层服务"垂直领域":天文学、生物信息学、杀毒引擎这些对压缩有特殊需求的场景。
cfitsio— FITS 天文数据格式库
由 NASA/GSFC HEASARC 开发的 C/Fortran 子程序库,专门用于读写 FITS(Flexible Image Transport System)格式数据文件。FITS 是天文学领域的国际标准数据格式,CFITSIO 由 FITS 标准的主要作者 William Pence 编写,提供高层便捷 API 和底层 HDU 精细控制,支持透明读写 .fits.gz 压缩文件,是天文图像处理、星表查询、光谱分析的事实标准底层库。
调用关系:ds9 / IRAF / Astropy 等天文工具 → cfitsio → 透明调用 zlib 实现 .fits.gz 解压。
hdf— HDF4 科学数据格式
HDF(Hierarchical Data Format v4)由美国国家超级计算应用中心(NCSA)开发,是最早的"自描述"科学数据文件格式之一,支持多维数组(最多 32 维)、栅格图像、表格数据、元数据标注,广泛用于 NASA 遥感、气象、地球科学等领域,是 HDF5 的前身。HDF4 文件内嵌数据类型、维度、物理单位等元信息,读取数据时无需外部 schema 文件。
调用关系:NASA 遥感数据处理工具链 → libdf → 读取 HDF4 文件;与 HDF5 通过转换工具互操作。
hdf5— HDF5 科学数据格式(行业标准)
全球科学计算领域最广泛使用的大规模数据存储格式和软件库,由 The HDF Group 维护,支持 TB/EB 级多维数组、分块压缩、并行 I/O、元数据管理,是 NASA、CERN、气象、基因组学等领域的数据存储标准。HDF5 数据模型采用"类文件系统"层次结构(File → Group → Dataset/Attribute),支持 GZIP(deflate)、SZIP 等压缩过滤器,以及 MPI-IO 集成实现超级计算机上的多进程并行读写。HDF5 默认自带 GZIP 压缩,是麒麟V11在科学计算场景的"重武器"。
调用关系:h5py / PyTables / netCDF / MATLAB / IDL → libhdf5 → 内部使用 zlib 实现 GZIP 压缩;MPI 应用 → libhdf5 + MPI-IO 并行后端。
htslib— 高通量测序数据格式 C 语言库
由 Samtools 团队开发和维护的统一 C 语言库,用于访问高通量测序(HTS)数据的主流文件格式(SAM/BAM/CRAM/VCF/BCF),是 samtools 和 bcftools 的核心依赖,也是生物信息学领域的基础设施级软件。htslib 最巧妙的设计是BGZF(Blocked GZIP)压缩——块级 gzip 压缩,既保持 gzip 兼容性,又支持随机访问和并行解压,让 TB 级基因数据的区域查询成为可能。CRAM 格式比 BAM 小 30-60%,是基因数据存储的"压缩奇迹"。
调用关系:samtools / bcftools / GATK / Picard → htslib → 调用 zlib 实现 BGZF/CRAM 压缩;htslib 内置线程池支持并行 I/O 和解压。
clamav— 开源防病毒引擎
ClamAV(Clam AntiVirus)由 Cisco Talos 团队维护的开源防病毒引擎,专为检测木马、病毒、恶意软件等设计,是 Linux 系统上最广泛使用的开源防病毒解决方案。它天然就是压缩/归档格式的"重度消费者"——必须能解析 ZIP、RAR、Tar、Gzip、Bzip2、OLE2、PDF、HTML 等数十种格式才能扫描到嵌套压缩包内的恶意载荷。提供 clamscan(命令行)、clamd(守护进程)、freshclam(自动更新病毒库)等核心工具。
调用关系:邮件网关(Postfix/Sendmail/Exim)→ clamd → 调用 libclamav → 递归解压 ZIP/RAR/Tar/Gzip/Bzip2 扫描;freshclam → 定时拉取病毒特征库。
git-tools— Git 辅助工具集合
Debian/Ubuntu 发行版提供的 Git 辅助工具集合,扩展 Git 在归档、CVS/SVN 桥接、Gerrit 审查等场景的功能。其中 git-archive-all 能创建包含子模块完整内容的 tar.gz/zip 归档(标准 git archive 不包含子模块),git-cvs 实现 Git 与 CVS 双向桥接,git-review 简化 Gerrit 代码审查工作流。git-tools 的核心价值是"把 Git 嵌入到传统软件分发流程",git archive 内部正是调用 gzip/bzip2 等压缩器生成可分发的归档包。
调用关系:开发者 → git-archive-all → 递归打包子模块 → tar → gzip/bzip2/xz 压缩;git-cvs → cvs 双向桥接。
六、压缩与归档体系汇总表
| 层级 | 包数量 | 代表包 | 核心定位 |
|---|
| 通用压缩算法核心 | 6 | gzip、bzip2、brotli、blosc、compress-lzf、dain-snappy | DEFLATE/BWT/Web优化/超高速/Java生态压缩后端 |
| 高性能场景库 | 2 | genwqe-tools、etmem | IBM zSystems 硬件加速、openEuler 内存分级扩展 |
| 归档管理工具 | 3 | engrampa、gcab、gnome-autoar | MATE/GNOME 桌面归档 GUI、CAB 格式处理、自动归档框架 |
| 备份与文件恢复 | 2 | dump、findutils | ext 文件系统增量备份、GNU find/locate/xargs 工具集 |
| 科学与领域专用格式 | 6 | cfitsio、hdf、hdf5、htslib、clamav、git-tools | 天文/遥感/基因组数据格式、杀毒引擎、Git 归档辅助 |
从这张汇总表可以清晰看到麒麟V11对"压缩"的理解:不是单一算法,而是覆盖通用、性能、桌面、备份、科学五大场景的完整栈。
压缩与归档技术看似"老掉牙",实际却是 Linux 系统吞吐量和用户体验的隐形决定因素。一个 1MB 的 JS 文件用 gzip 压缩到 300KB,浏览器加载时间从 800ms 降到 240ms;一个 TB 级基因数据用 CRAM 替代 BAM 节省 60% 存储,硬件成本直降 6 位数;一个 Web 服务启用 etmem 内存分级,可用内存从 256GB 扩展到 1TB 而无需购置新内存。