zstd 压缩格式
27 Apr 2020zstd (Zstandard) 是 Facebook 开发的一种无损压缩算法,最大的优势就是具有极快的压缩和解压速度,同时还有着不错的压缩率。目前 zstd 已经有了越来越多的应用,Arch Linux 也已经开始转用 zstd 作为安装包压缩格式了。
安装 zstd
因为 Arch Linux
的安装包已经使用了 zstd
格式,所以只要更新过系统,就默认已经安装过了
zstd。其它
Linux 发行版可以使用各自的包管理工具安装。
验证安装:
$ zstd -V
*** zstd command line interface 64-bits v1.4.4, by Yann Collet ***
使用 tar 压缩解压 *.tar.zst 文件
比较新的 tar
已经内置了对 zstd
的支持:
$ tar --help
...
--zstd filter the archive through zstd
...
解压
$ tar --zstd -xf data.tar.zst
也可以让 tar
根据扩展名 .zst
来自动推断压缩格式:
$ tar -xf data.tar.zst
压缩
$ tar --zstd -cf data.tar.zst data_to_compress
通过 -a
选项可以让 tar
根据扩展名来自动推断压缩格式:
$ tar -caf data.tar.zst data_to_compress
如果需要改变压缩率,可以设置 ZSTD_CLEVEL
环境变量,范围 1-19
,
默认值是 3
。值越大,压缩率越高,当然压缩时间也越长。
$ ZSTD_CLEVEL=10 tar -caf data.tar.zst data_to_compress
比较各种压缩命令
这里通过 tar 来进行压缩速度和压缩率的比较。 测试数据使用 Go Linux 安装包 解压后的目录,解压后大小为 326 MB。此数据并不代表所有情况,具体性能还依赖于数据本身。
压缩使用以下命令:
$ tar -caf test.tar.gz go
$ tar -caf test.tar.bz2 go
$ tar -caf test.tar.xz go
$ tar -caf test.tar.zst go
$ ZSTD_CLEVEL=10 tar -caf test_10.tar.zst go
$ ZSTD_CLEVEL=19 tar -caf test_19.tar.zst go
解压使用命令:
$ tar -xf test.tar.zst
...
结果如下:
压缩工具 | 压缩后大小 | 压缩时间 | 解压时间 |
---|---|---|---|
gzip | 118 MB | 20.96 s | 3.77 s |
bzip2 | 109 MB | 46.46 s | 26.25 s |
xz | 87 MB | 208.85 s | 7.97 s |
zstd | 115 MB | 4.45 s | 2.05 s |
zstd -10 | 105 MB | 31.84 s | 2.16 s |
zstd -19 | 93 MB | 233.41 s | 2.21 s |
大致可以看出 zstd
在解压速度上是最快的,相比 gzip
还有更好的压缩率。xz
是压缩率最高的,不过压缩非常慢,解压也比较慢。而解压最慢的是
bzip2
。
所以在性价比上 zstd
还是有很大优势的,尤其是在追求解压速度的时候。