【问题标题】:Tar error: Unexpected EOF in archive焦油错误:存档中出现意外的 EOF
【发布时间】:2009-08-25 03:18:56
【问题描述】:

我 tar 了一个全是 JPEG 图像的目录:

tar cvfz myarchive.tar.gz mydirectory

当我解压存档时:

tar xvfz myarchive.tar.gz

我收到一个错误:

tar: Unexpected EOF in archive

查看输出,它在一张特定 JPEG 图像的中间失败。

我做错了什么?

【问题讨论】:

  • 创建存档时是否空间不足?
  • 刚刚损坏了。发生。再次焦油

标签: linux sysadmin


【解决方案1】:

有趣。我有几个问题可能会指出问题所在。

1/ 您是否在同一个平台上解压?它们可能是 tar 的不同版本(例如 GNU 和 old-unix)?如果它们不同,你能在你加了焦油的同一个盒子上解压吗?

2/ 当您简单地对 myarchive.tar.gz 进行压缩时会发生什么?那样有用吗?也许您的文件已损坏/截断。我假设您会注意到压缩是否产生错误,是吗?

基于 GNU tar 源,它只会在 find_next_block() 过早返回 0 时打印该消息,这通常是由截断的存档引起的。

【讨论】:

  • 感谢您的快速回答 1/同一台机器(用于测试目的):Ubuntu。最终,我想在 Mac OS X 上解压(那里的错误是一样的......) 2/ gunzip 工作正常创建存档时没有错误......
  • 好的,暂时删除有问题的 JPEG,看看会发生什么。这会让您知道它是特定的 JPEG 还是 tar 本身。也可以尝试不使用 zip 选项。
  • 啊,你让我走在了正确的轨道上:tar 存档被截断了。我没有在我的系统日志中看到任何错误(存档是由 cron 作业创建的),但肯定有问题。磁盘上有足够的空间(当我“手动”创建存档时,它不会被截断)......我现在会更深入地挖掘,感谢您的回复。
  • tar 文件有多大?您可能达到了 ulimit 文件大小限制。此外,您的 cron 作业应始终将 stdout/stderr 发送到 /tmp/some-file-or-other(用另一个 cron 作业清理)以帮助调试。也许更改您的脚本以将 ulimit 作为其第一个命令运行,然后更改 cron 作业以捕获输出(例如,在您的 crontab 中,将“/mypath/myprog”更改为“/mypath/myprog >/tmp/myprog.out 2>&1 "。
  • @Cyrille, ulimit -n (#files) 应该没关系,因为无论如何 tar 不太可能同时保持它们全部打开。我在想更多的 ulimit(ulimit -f 是默认值),它显示了最大允许文件 size。我也会对 Heisenbug 感到不舒服,所以我愿意进一步工作以解决它(很难想象在脚本中添加日志记录会影响 tar 命令!)但是,如果你愿意放手,也不错。让我知道。干杯。
【解决方案2】:

你可能是用 ascii 模式而不是二进制模式 ftped 文件? 如果没有,这可能会有所帮助。

$ gunzip myarchive.tar.gz

然后使用解压生成的 tar 文件

$ tar xvf myarchive.tar

希望这会有所帮助。

【讨论】:

  • tar xf myarchive.tar 给了我这个意外的 EOF 错误。您对使用 tar xvf 的建议很有帮助 - 截断的文件仍然遇到错误并停止,但此命令取消归档到那时为止的所有其他内容。
【解决方案3】:

我遇到了类似的问题,即 cron 作业生成截断的 tar 文件并将标准输出重定向到一个文件解决了这个问题。

通过与同事交谈,cron 创建了一个管道并限制了可以发送到标准输出的输出量。我通过从我的 tar 命令中删除 -v 来修复我的问题,使其不那么冗长,并将错误输出与我的其他 cron 作业保持在同一位置。但是,如果您需要详细的 tar 输出,则需要重定向到文件。

【讨论】:

    【解决方案4】:

    在我的例子中,我在 tar 文件上传完成之前就开始解压了。

    【讨论】:

      【解决方案5】:

      我遇到了类似的错误,但在我的情况下,原因是文件重命名。我正在创建一个 gzip 压缩文件 file1.tar.gz,并在另一个带有 tar -uvf ./combined.tar ./file1.tar.gz 的 tar 文件中反复更新它。在解压缩 combined.tar 并尝试解压缩 file1.tar.gz 后,我遇到了意外的 EOF 错误。

      我注意到 file 在 tarring 前后的输出有所不同:

      $file file1.tar.gz
      file1.tar.gz: gzip compressed data, was "file1.tar", last modified: Mon Jul 29 12:00:00 2019, from Unix
      
      $tar xvf combined.tar
      $file file1.tar.gz
      file1.tar.gz: gzip compressed data, was "file_old.tar", last modified: Mon Jul 29 12:00:00 2019, from Unix
      

      因此,当我最初创建 combined.tar 时,文件似乎具有不同的名称,并且使用 tar 更新功能不会覆盖 gzip 文件名的元数据。解决方案是从头开始重新创建combined.tar,而不是更新它。

      我仍然不知道到底发生了什么,因为更改压缩文件的名称通常不会破坏它。

      【讨论】:

        猜你喜欢
        • 2015-11-10
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多