备份 2.3 GB 视频:压了 11 分钟,只省下 4 MB

经验 2026-11-03 20:28 · 11 次阅读 ·压缩,备份,实测

同一批文件,两种东西:视频压不动,文本能省七成

背景

我手上有个素材文件夹,2.3 GB、43 个视频,想备份。动手第一件事就是打包压缩,体积小一点好存。

试完发现,视频怎么压都几乎不变。最狠的那一档跑了 11 分钟,只换来 4 MB。

为了对照,我又拿一堆纯文本跑了一遍同样的流程。同一台机器、同样的命令,两边省下的比例差了 400 倍。

这台机器的盘本来就快满了,只剩 5 GB 空。2.3 GB 的包写一份就占掉一半,所以每种方式我都是跑完立刻删,一个个来。

实测

机器两核,每种方式只跑一次,时间用 time 命令记。反复跑会让系统缓存起作用,数字反而不可比,所以一次算一次。

每一步都分两段:先用 tar(打包工具,把一堆文件装进一个箱子),再交给压缩程序(把箱子抽真空)。压缩程序试了 gzip、zstd、xz 三种。zstd 和 xz 都能调档位,档越高压得越狠,也越费时间。

视频那条实际敲的是这个(在素材目录里执行):

tar -cf - 老皮视频 \
  | zstd -19 -T0 -q -o v.tar.zst19

视频:2.38 GB,43 个文件

做法 用时 打包后大小 省下
不压缩,只打包 101 秒 2,380,851,200 字节 —
gzip 81 秒 2,378,099,376 字节 2.7 MB(0.12%)
zstd 普通档 14 秒 2,377,921,641 字节 2.9 MB(0.12%)
zstd 最高档 661 秒 2,377,527,617 字节 3.3 MB(0.14%)
xz 647 秒 2,376,874,076 字节 4.0 MB(0.17%)

最省的是 xz:2.38 GB 变 2.376 GB,千分之二都不到,代价是 10 分 47 秒。

gzip 跑了 81 秒,省下 2.7 MB。zstd 普通档只用 14 秒,省得还比 gzip 多一点,这一档反而最划算。

不压缩那行最慢,101 秒。因为它要往盘里实打实写 2.3 GB,时间全耗在写盘上。

文本:2.2 MB,307 个 Markdown 文档

Markdown 就是写文章用的纯文本,没有排版文件那么大。

做法 用时 打包后大小 占原来
不压缩,只打包 0.01 秒 2,457,600 字节 —
gzip 0.12 秒 971,087 字节 39.5%
zstd 普通档 0.09 秒 927,914 字节 37.8%
zstd 最高档 1.03 秒 740,700 字节 30.1%
xz -6 1.02 秒 722,524 字节 29.4%

2.2 MB 变 722 KB,1 秒完事。

还有个反直觉的地方:xz -9 和 xz -6 出来的包一模一样大,都是 722,524 字节,-9 还多花 0.1 秒。这个体量上加档没意义。

为什么差这么多?视频里存的画面本来就压过一遍,我再压,等于把抽过真空的袋子再抽一次,抽不动。文本不一样,字和字之间重复多,压缩程序找得到。

结论与踩坑

  1. 已经压过的别再压:mp4、jpg、png、zip 都属于这类。省不到 0.2%,白等 11 分钟。
  2. 文本、代码、日志、CSV 值得压,用 xz -6,1 秒省三分之二。别上 -9。
  3. 打包完要解一次验指纹。我把那个 722,524 字节的包解开,跟原目录逐个算 md5(文件指纹),整棵树的指纹都是 e7aa188e3344a20a27489a0cb89915d6,一个字节没差。没验过的备份,我不敢当备份用。
  4. 视频要备份就用 rsync(只复制改动部分的工具)加硬链接(同一个文件起第二个名字,不另占地方)。我拿 59 MB、609 个文件试:第一次全量 0.27 秒,第二次只改了一个文件、加了一个新文件,0.06 秒跑完,第二份快照在盘上只多占 1.1 MB,可每个快照看过去都是完整的 59 MB。
  5. 别把备份放在同一块盘上。我这些包全写在原文件所在的那块盘里,盘一坏,两份一起没。

下次我就按这个走:视频目录直接 rsync 增量,不压缩;文档目录 tar 加 xz -6,解一次对 md5,然后挪到另一块盘。

继续看

全部 →