Linux 下壓縮工具鏈豐富,選型直接影響備份速度、壓縮比、兼容性與符號鏈接保真度。本文建立決策矩陣,覆蓋主流格式核心參數、符號鏈接陷阱、分卷壓縮與現代工具 zstd。
| 格式 | 副檔名 | 算法 | 壓縮比 | 速度 | 內存 | 適用場景 | 普及度 |
|---|---|---|---|---|---|---|---|
| gzip | .gz / .tgz | DEFLATE | 中 | 快 | 低 | 日誌輪轉、網絡傳輸、通用兼容 | ★★★★★ |
| bzip2 | .bz2 / .tbz2 | Burrows-Wheeler | 高 | 慢 | 中 | 源碼分發、靜態資產備份 | ★★★★☆ |
| xz | .xz / .txz | LZMA2 | 極高 | 極慢 | 高 | 軟件包發布 (内核、Docker image)、長期歸檔 | ★★★★☆ |
| zstd | .zst / .tzst | Zstandard | 可調 (極快~極高) | 極快~中 | 可調 | 現代備份、CI/CD 產物、內核編譯輸出 (Linux 5.1+) | ★★★★★ (新標準) |
| tar (無壓縮) | .tar | — | 無 | 極快 | 極低 | 小文件聚合、磁帶流式寫入 | ★★★★★ |
# 1. 僅打包 (無壓縮) - 磁帶/小文件聚合首選
tar -cvf backup.tar /etc /home
# 2. gzip 壓縮 - 通用兼容
tar -czvf backup.tar.gz /etc /home # -z = gzip
tar -xzvf backup.tar.gz -C /restore
# 3. bzip2 壓縮 - 高壓縮比
tar -cjvf backup.tar.bz2 /etc /home # -j = bzip2
tar -xjvf backup.tar.bz2
# 4. xz 壓縮 - 最高壓縮比 (內核/發布包)
tar -cJvf backup.tar.xz /etc /home # -J = xz (大寫)
tar -xJvf backup.tar.xz
# 5. zstd 壓縮 - 現代最佳平衡 (需 tar 1.31+ / zstd 已安裝)
tar --zstd -cvf backup.tar.zst /etc /home
tar --zstd -xvf backup.tar.zst
# 等價長參數:--zstd / --use-compress-program=zstd
# 6. 自動識別解壓 (tar 1.27+)
tar -xvf backup.tar.* # 自動根據副檔名/魔數選擇解壓程序
現象: GUI 壓縮工具 (file-roller, ark) 預設跟隨符號鏈接,導致壓縮包膨脹、解壓後丟失鏈接關係、甚至陷入循環鏈接無限遞歸。
鐵律: 生產備份務必使用命令行 tar + -h (--dereference) 參數。
# -h: 打包時將符號鏈接解析為目標文件 (跟隨鏈接)
# --no-recursion: 不遞歸目錄 (配合 find 使用)
# 推薦組合:保留鏈接結構 (不跟隨)
tar -cvhf backup.tar /path # 打包時解析鏈接,解壓還原為普通文件
# 如需完整保留鏈接關係 (需目標系統路徑一致):
tar -cvf backup.tar /path # 無 -h,保留鏈接屬性
# 解壓時自動還原符號鏈接
驗證: tar -tvf backup.tar | grep '^l' 應顯示 linkname -> target。
# 分卷打包 (每卷 1GB)
tar -cvf - /data | split -b 1G - backup.tar.
# 合並解壓
cat backup.tar.* | tar -xvf -
# 或使用 tar 內建多卷 (舊版磁帶專用,現少用)
tar -c -M -L 1024000 -f backup.tar /data # -L 以 KB 為單位
| 操作 | gzip | bzip2 | xz | zstd |
|---|---|---|---|---|
| 壓縮文件 | gzip file | bzip2 file | xz file | zstd file |
| 保留原文件 | gzip -k file | bzip2 -k file | xz -k file | zstd --keep file |
| 解壓 | gunzip file.gz | bunzip2 file.bz2 | unxz file.xz | unzstd file.zst |
| 查看壓縮比 | gzip -l file.gz | bzip2 -l file.bz2 | xz -l file.xz | zstd -l file.zst |
| 調整等級 | gzip -1~9 | bzip2 -1~9 | xz -0~9 / -e | zstd -1~19 / --ultra -20~22 |
# RPM 提取不安裝
rpm2cpio package.rpm | cpio -idmv
# DEB 提取
dpkg-deb -x package.deb /target
ar x package.deb data.tar.xz && tar -xJf data.tar.xz
tar --zstd -cvf,等級 -3 (默認) 平衡速度與比率;長期歸檔用 -19。.tar.zst,構建機預裝 zstd,下游解壓通用。compresscmd /usr/bin/zstd compressext .zst。tar -cvf - /data | zstd -3 | aws s3 cp - s3://bucket/backup.tar.zst。壓縮不再是 tar.gz 單一選擇,zstd 以極快速度、可調壓縮比、極低內存重新定義了備份效能基線。