解压失败

解压失败

我正在处理将大文件从一台机器传输到另一台机器(600GB+),并且我正在使用它们来压缩它们

tar -cpvzf file.tar.gz -C PATH_TO_DIR DIR

完成焦化过程后,将完成以下操作:

split -d -b 2G file.tar.gz file_part_

这会创建一堆 file_part_00、file_part_01...直到整个文件被分割成 2GB 的块。在传输文件之前,我循环遍历 tar 分割的目录中的每个部分,并使用以下等效项收集它们的 md5 哈希值:

md5sum PART_NAME >> list_md5.start

对每个部分进行哈希处理后,我将执行以下操作:

sort -u list_md5.start

(这对它们进行排序并删除重复项,只是为了安全起见,你知道)

然后,这些部分将按照它们在 list_md5.start 中的顺序一一传输。一旦它们到达另一台计算机,就会使用相同的方法收集它们的 md5 哈希值,但在不同的列表中,我们将其称为 list_md5_2.start。传输后,在将部件重新组装在一起之前,我运行以下命令:

diff list_md5.start list_md5_2.start

如果没有发现差异,我将继续下一部分。否则,我会放弃并删除所有部分。当涉及到将它们重新组合在一起时,我会执行以下操作:

cat file_part_* > file.tar.gz.incomplete

(不完整的部分存在,因为我有一个看门狗等待解压它遇到的任何 .tar.gz)。一旦 cat 完成,该文件将使用以下命令重命名:

mv file.tar.gz.incomplete file.tar.gz

此时,看门狗会检测到它并使用以下命令解压它:

tar -C DEST -xzf file.tar.gz --totals --unlink-first --recursive-unlink

此时,我收到无法调试的错误:

Tar Failed 2
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
 /PATH/TO/DEST

解压后,无论是否失败,都会删除 tar(保留解压失败的大文件没有意义)。

值得注意的是,有时 md5sum 不匹配,这也会导致进程停止(这是在cat组装步骤之前检查的)。

我已尝试确保名称不是无效的。我尝试将零件尺寸更改为更小的尺寸。我尝试手动完成该过程,但仍然遇到 md5sum 不匹配或 EOF 错误的问题。

这一切都是在已更新的 Ubuntu 计算机上完成的(无待更新)。

有谁知道如何解决这个问题?

答案1

Rsync 是一款适用于类 Unix 和 Linux 系统的免费软件实用程序,可将文件和目录从一台主机复制到另一台主机。

使用 rsync 将文件从一个系统传输到另一个系统。您可以使用 screen 并启动 rsync 然后断开 screen

Rsync 被认为是一个轻量级应用程序,因为文件传输是增量的——在初始完整传输之后,仅传输文件中已更改的位。 Rsynch 通常用于通过将数据同步到防火墙之外的远程计算机来提供异地备份。它还用于镜像网站。

答案2

通过添加额外的存储空间解决了这个问题。具体来说,我添加了一个 2TB 硬盘,用于在分割焦油时保存焦油。最初,整个过程是在 6TB 硬盘上完成的,上面还有其他大文件,为我们提供了最多 3TB 的存储空间。当我们在后台下载大量内容时,我们注意到了这个问题,这些内容占用了大部分空间,重现了问题中损坏的焦油问题。

此解决方案可能不是最优雅的解决方案,但在压缩后删除原始文件将涉及大量开销,这比简单地添加额外的存储空间需要更多的时间。

如果有人偶然发现这个问题,并且将经历与我相同的路线,以下是我添加新硬盘所遵循的步骤: https://askubuntu.com/a/125277/

我想指出有人确实建议检查存储空间是否足够,我想给予他们信任。这是建议:

确保您的第一个 tar -cpvzf ... 运行时没有任何错误,返回代码 (echo $?) 为 0 并且磁盘空间足够。 –赛勒斯8 月 16 日 19:37

然而,这个建议并不完整,因为当时有足够的存储空间用于焦化,因此它从未返回任何错误。

相关内容