目前我正在运行tar czf
合并备份文件。这些文件位于特定目录中。
但文件的数量正在增长。使用tzr czf
时间太长(超过 20 分钟并且还在增加)。
我需要以可扩展的方式更快地合并文件。
我发现了genisoimage
,readom
和mkisofs
.但我不知道哪个最快以及它们各自的限制是什么。
答案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。 ;-)