是否有并行文件存档器(如tar)?


40

是否有用于并行归档文件的设备?

Tar很不错,但是我不使用磁带存档,而对我来说,更重要的是,由于我有smp,所以归档工作要迅速进行(使用bzip2之类的压缩方式)。


7
tar不仅用于磁带。该名称最初来自磁带,但是如今,我看到它主要用于要将内容放到单个文件中以进行重新分发,同时使用可选压缩来维护目录结构信息的情况。
凯文M 2010年

vbtechsupport.com/1614有很多并行压缩工具在这里进行了基准测试,但是尚未找到tar的并行版本
p4guru 2015年

据我所知,所提供的答案均未处理目录(包括已接受的目录),它们只能处理文件。我只认为zip能够处理目录:|
沃伦

1
其实,我们通常做的是打包目录tar的档案,然后通过压缩文件压缩包(如gzippigz等)。您可以分两步进行操作,也可以分一个步骤进行操作,因为它们可以处理来自标准输入/输出的数据流。结果与极为相似zip,但用途更多。
盖洛斯'16

Answers:


36

我认为您正在寻找pbzip2:

PBZIP2是bzip2块排序文件压缩器的并行实现,该压缩器使用pthreads并在SMP机器上实现了近乎线性的加速。

查看项目主页或检查您喜欢的软件包存储库。


1
您也可以尝试pigz,并pxz为并行实现gzipxz。您可以使用类似的命令进行压缩,并使用进行tar c dir | pigz -c > dir.tar.gz解压缩pigz -cd dir.tar.gz | tar xf -
盖洛斯2015年

3
今天的命令是tar -cf dir.tar.gz -I pigz dirtar -xf dir.tar.gz -I pigz。也是xz线程化的:使用XZ_OPT=-T0 tar -cJf dir.tar.gz dirXZ_OPT=-T0 tar -xJf dir.tar.gz
丰富

21

如果指定了-mmt标志,则7zip可以在多个线程上运行,但仅在压缩成7z归档文件时才可以运行,这提供了很大的压缩率,但通常比zip创建档案要慢。做这样的事情:

7z a -mmt foo.7z /opt/myhugefile.dat

7z是一个不错的存档器,它很好地支持控制压缩率与压缩/解压缩时间,随机访问与更好的压缩之间的折衷,以及类似的工作。但是,它存储的元数据几乎不如tar少,您会丢失所有者/权限。
彼得·科德斯

看起来默认情况下此选项处于启用状态-至少我没有用它来提高性能,并且在这两种情况下7z的输出都与我的CPU内核数量有关。
Andrey Starodubtsev

14

OP询问的是并行归档,而不是并行压缩。

如果源材料来自文件系统,其中不同的目录/文件可能位于不同的磁盘上,或者甚至单个超速磁盘超出了压缩工具的输入速度,那么拥有多个输入流确实可能是有益的。进入压缩层。

有意义的问题变成了,并行归档的输出是什么样的?它不再只是单个文件描述符/ stdout,而是每个线程的文件描述符。

到目前为止,它的一个示例是Postgresql的并行转储模式pg_dump,其中它转储到目录中,其中线程在表集上工作以进行备份(工作队列带有多个消耗队列的线程)。

我不确定主流的实际并行存档器。在ZFS上有一个针对Solaris Tar的黑客:http : //www.maier-komor.de/mtwrite.html

有一些专用的备份工具可以成功运行多个线程,但还有更多工具可以在更高级别上按目录划分工作负载。


11
tar --use-compress-program=pigz  ....

pigz用您最喜欢的并行压缩程序替换。使用的原因tar是因为它可以存储所有者,组,权限。该元数据通常很有用(例如,在复杂系统中还原目录树)。


4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
所有的选项,据我所知,焦油可以正常与一起使用-I选项,这是一样的--use-compress-program。因此,例如tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."可以使用pigzas 应用于多线程选项tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo..."。这是最好,最合适的答案,恕我直言。谢谢@uDude!:)
ILMostro_7 '11

10

Pigz是gzip的并行实现,但是只能真正使用多个处理器进行压缩,而不能进行解压缩。


2
做过一些实验,pigz实际上似乎在解压缩时可以使用多个线程。尝试比较time tar xf dir.tar.gzand 的输出time pigz -cd dir.tar.gz | tar xf -(在我的4核CPU上,花费的时间少于一半)。
盖洛斯2015年

4
@gerlos time在管道上使用只会计时第一个命令。来自pigz文档:“解压缩不能并行化,至少没有为此目的而特别准备的deflate流。因此,pigz使用单个线程(主线程)进行解压缩,但会创建其他三个线程进行读取,编写并检查计算,在某些情况下可以加快减压速度。”
2013年

1
还有pixz
Marc.2377

8

tar只是一种存档格式,非常擅长精确地复制文件以及保留目录树和原始文件属性。TAR非常适合进行备份,因为所有内容均已保留。我pbzip2用来压缩用于系统备份的tar存档,效果非常好。

这个命令应该可以解决问题。

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 可以用其他压缩实用程序代替,但是要警告,LZMA压缩(如pxz)在压缩/解压缩大文件时会使用一吨RAM(我尝试使用8GB RAM运行8个线程,而pxz开始交换到磁盘)。



1

就压缩而言,xz因为大约5.2版通过-T选项支持并行压缩。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.