将多个文件合二为一的最快方法(tar czf 太慢了)

Naj*_*hin 32 tar backup archive

目前我正在运行tar czf以合并备份文件。这些文件位于特定目录中。

但是文件的数量正在增长。使用tzr czf需要太多时间(超过 20 分钟和计数)。

我需要以可扩展的方式更快地组合文件。

我发现genisoimage,readommkisofs. 但我不知道哪个最快,每个人的限制是什么。

小智 33

您应该检查您的大部分时间是花在 CPU 还是 I/O 上。无论哪种方式,都有一些方法可以改进它:

答:不要压缩

你没有在你的要求,所以尽量从参数列表去掉了“Z”中再次提到“压缩”: tar cf。这可能会加快速度。

还有其他技术可以加快该过程,例如使用“-N”跳过您之前已备份的文件。

B:用dd备份整个分区

或者,如果您要备份整个分区,请复制整个磁盘映像。这将节省处理和大量磁盘磁头寻道时间。tar和任何其他在更高级别工作的程序都有一个开销,必须读取和处理目录条目和 inode 以找到文件内容的位置并执行更多的磁头磁盘搜索,从磁盘的不同位置读取每个文件。

要更快地备份基础数据,请使用:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(这假设您没有使用 RAID,这可能会有所改变)

  • _不压缩_:如果系统中存在多个处理器,则使用`pigz`。 (2认同)

Bar*_*own 8

重复其他人所说的话:我们需要更多地了解正在备份的文件。我会在这里做一些假设。

附加到 tar 文件

如果文件只是被添加到目录中(即没有文件被删除),请确保您附加到现有的 tar 文件而不是每次都重新创建它。您可以通过在tar命令中指定现有存档文件名而不是新文件名(或删除旧文件名)来实现此目的。

写入不同的磁盘

从您正在写入的同一磁盘读取可能会降低性能。尝试写入不同的磁盘以分散 I/O 负载。如果存档文件需要与原始文件位于同一磁盘上,请在之后移动它。

不要压缩

只是重复@Yves 所说的话。如果您的备份文件已被压缩,则无需再次压缩。你只会浪费 CPU 周期。


小智 8

在 lz4 压缩中使用 tar

tar cvf - myFolder | lz4 > myFolder.tar.lz4
Run Code Online (Sandbox Code Playgroud)

为您提供两全其美(相当好的压缩和速度)。即使您的数据包含二进制文件,也期望压缩率约为 3。

进一步阅读: 压缩算法比较 How to tar with lz4

  • StefanQ 坚持的是,您需要根据瓶颈所在来选择压缩机。另外:请记住,您可以将输出保存到不同的物理存储设备,甚至是远程机器! (2认同)