创建包含校验和的tar文件

Modified on: Wed, 18 Sep 2019 05:00:02 +0800

这是我的问题:我需要将大量文件(最多60 TB)存档到tar文件(通常每个30到40 GB)。我想在归档之前制作这些文件的校验和(md5,sha1,等等);但两次读取每个文件(一次用于校验和,两次用于tar')或多或少是实现非常高的归档性能的必要条件(LTO-4需要120 MB / s持续,并且备份窗口有限。)

所以我需要一些方法来读取文件,在一侧提供校验和工具,并在另一侧构建tar到磁带,以及:

tar cf - files | tee tarfile.tar | md5sum -

除了我不想要整个存档的校验和(这个示例shell代码只是这样),但是存档中每个单独文件的校验和。

我研究过GNU tar,Pax,Star选项。我查看了来自Archive ::焦油。我认为没有明显的方法来实现这一目标。看起来我将不得不用C或类似的东西手工构建一些东西来实现我的需要。 Perl / Python / etc不会在性能方面削减它,并且各种tar程序错过了必要的“插件架构”。在开始代码搅动之前,有没有人知道任何现有的解决方案?

作者:wazoox

最佳答案

在继续并重写tar之前,您可能想要分析两次读取数据的快速简便方法,因为它可能不会比一次通过时慢得多。

这里实现了两个传递方法:

http://www.g-loaded.eu/2007/12/01/veritar-verify-checksums-of-files-within-a-tar-archive/

单线:

  tar -cvpf mybackup.tar myfiles/| xargs -I '{}' sh -c "test -f '{}' && 
  md5sum '{}'" | tee mybackup.md5

虽然md5sum正在从tar并行读取磁盘中的每个文件,而不是通过管道传输数据,但是Linux磁盘缓存应该使第二次读取从内存缓冲区中读取一个简单的内存缓冲区,这应该不是真的比stdin读取慢。您只需要确保磁盘缓存中有足够的空间来存储第二个读取器始终从缓存中读取的每个文件,并且远远不足以从磁盘检索

作者:bk.

相关问答

添加新评论