6 linux tar cluster parallelism
我在 Linux 集群上运行许多任务。每个任务都会创建许多输出文件。完成所有任务后,我会运行类似tar cf foo.tar output_files/创建tar存档的操作。这是一个非常缓慢的过程,因为有成千上万的文件和目录。
在创建输出文件时,有没有办法并行执行此操作?
是否可以有多个tar进程,分布在多台机器上,同时将它们的文件添加到同一个存档中?
集群有一个共享文件系统。
我对压缩不感兴趣,因为它会减慢速度,而且因为所有输入文件本身都已经压缩过。理想情况下,输出将是一个tar文件,但我也会考虑其他存档格式。
您不能将多个进程添加到同一个 tar 存档(或任何其他常用存档格式,无论是否压缩)。每个文件都是连续存储的,无法在文件中插入数据,只能追加或覆盖,因此继续写入不是最后一个文件的文件会覆盖后续文件。
如果您事先知道文件大小,您可以在 tar 存档中保留该大小并让程序继续写入。这将需要大量编码:这是一件非常不寻常的事情。
Unix 有一个特性,旨在容纳一组独立写入的文件。它被称为目录。
在极少数情况下,您可以从目录上的未压缩存档中获得任何东西。在某些情况下,阅读速度可能会稍快一些;这是目录格式(其中每个文件条目是指向其内容的指针)与存档格式(其中每个文件条目直接是其内容)的内在结果,这正是使分段构建目录成为可能的原因. 将目录树转换为存档是需要按顺序完成的后处理。