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


23

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

但是文件数量正在增长。使用tzr czf会花费太多时间(超过20分钟并且还在计数)。

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

我发现genisoimagereadommkisofs。但是我不知道哪一个最快,以及每个限制有哪些。


我怀疑会带来tar任何重大开销,在这里读取文件是昂贵的操作。您应该修改文件的存储方式,或者使用完全不同的方法(将文件系统整体复制)。如果您不知道文件的组织方式,我们将为您提供很多帮助。
吉尔(Gilles)'所以

5
使用“ noatime”选项挂载FS,也许可以加快IO操作的速度。
Rufo El Magufo 2011年

2
+1代表noatime,确实的确有很大的不同。特别是对于常规硬盘驱动器,也仅用于减少不必要的写入。
JM Becker

Answers:


25

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

A:不要压缩

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

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

B:用dd备份整个分区

或者,如果您要备份整个分区,请改为复制整个磁盘映像。这将节省处理时间,并节省大量磁盘头查找时间。tar以及其他任何在更高级别上运行的程序都具有读取和处理目录项和索引节点以查找文件内容在何处以及进行更多磁头磁盘查找的开销,这需要从磁盘的不同位置读取每个文件。

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

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

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


2
不要压缩pigz如果系统中存在多个处理器,请使用。
Rufo El Magufo 2011年

LZ4 / zstd和类似的快速压缩算法可能仍然值得检查它们是否可以通过仅写入较少的数据(如果数据完全可压缩)来加快处理速度,同时压缩速度快一个数量级,但效率较低,具体取决于级别和算法,man gzip也说“默认压缩级别是-6”,因此还有改进的空间。
LiveWireBT

8

重复别人说的话:我们需要更多地了解正在备份的文件。我将在这里进行一些假设。

附加到tar文件

如果仅将文件添加到目录(即未删除任何文件),请确保要追加到现有的tar文件,而不是每次都重新创建它。您可以通过在tar命令中指定现有归档文件名而不是新文件名(或删除旧文件名)来实现。

写入其他磁盘

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

不要压缩

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


4

将tar与lz4压缩一起使用,例如

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

为您提供两全其美的体验(压缩和速度都不错)。即使您的数据包含二进制文件,压缩率也应约为3。

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


1
StefanQ所留下的是,您需要根据瓶颈所在位置选择压缩机。另外:记住,您可以将输出保存到其他物理存储设备,甚至是远程计算机!
张国荣

2

我很惊讶没有人提及转储和还原。如果文件系统中有可用空间,它将比dd快很多。

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

  • ext2 / 3/4- 转储还原(RH / Debian中的软件包转储
  • XFS- xfsdumpxfsrestore(RH / Debian中的xfsdump软件包)
  • ZFS-ZFS 发送和ZFS 接收
  • BTRFS- btrfs发送btrfs接收

请注意,某些程序没有内置的压缩​​功能(除了dump以外的所有功能)-管道连接到stdout并根据需要使用Pigz。;-)

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.