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

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

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

但文件的数量正在增长。使用tzr czf时间太长(超过 20 分钟并且还在增加)。

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

我发现了genisoimage,readommkisofs.但我不知道哪个最快以及它们各自的限制是什么。

答案1

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

答:不要压缩

您在要求列表中没有提到“压缩”,因此请尝试从参数列表中删除“z”:tar cf。这可能会加快速度一点。

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

B:用dd备份整个分区

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

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

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

(这假设您没有使用 RAID,这可能会稍微改变一些情况)

答案2

将 tar 与 lz4 压缩一起使用,如下所示

tar cvf - myFolder | lz4 > myFolder.tar.lz4

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

进一步阅读: 压缩算法比较 如何使用 lz4 压缩

答案3

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

附加到 tar 文件

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

写入不同的磁盘

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

不要压缩

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

答案4

我很惊讶没有人提到转储和恢复。它会比DD如果文件系统中有可用空间。

请注意,根据相关文件系统,您可能需要不同的工具:

  • 外部2/3/4 -倾倒恢复(包裹倾倒在 RH/Debian 中)
  • XFS-xfs转储恢复文件系统(包裹xfs转储在 RH/Debian 中)
  • ZFS-zfs 发送zfs 接收
  • BTRFS-Btrfs 发送Btrfs 接收

请注意,某些程序没有内置压缩(除了转储之外) - 通过管道传输到 stdout 并根据需要使用 Pigz。 ;-)

相关内容