tar:由于先前的错误而以失败状态退出

mor*_*ous 92 bash gzip tar ubuntu

我编写了一个小脚本,可以对目录 + 文件列表进行 tar 和压缩。

该脚本似乎成功运行,因为在脚本运行后创建了一个可用的 .tar.gz 文件。

但是,脚本完成后我收到了这条烦人的消息:

tar:由于先前的错误而以失败状态退出

脚本运行时我没有看到任何错误消息,就像我说的那样,生成的文件可以在没有警告/错误的情况下解压缩。由于我将此用作备份的一部分,因此我想确保我没有忽略一些严重的事情。

产生此错误/警告消息的可能原因是什么 - 我可以安全地忽略它吗?。如果我不能忽略它,诊断和解决错误的步骤是什么?

我在 Ubuntu 10.0.4 上运行

Kei*_*thB 118

如果由于任何原因 tar 无法将所有指定的文件添加到 tar 中,您将收到该消息。最常见的一种情况是没有对其中一个文件的读取权限。这可能是一个大问题,因为您正在使用它进行备份。如果您正在使用该-v标志,请尝试将其关闭。这应该会减少输出并让您看到发生了什么。

  • +1 的建议(我之前使用的是“详细”选项)。我发现至少其中一个文件存在权限问题。至少现在我知道如何解决这个问题。非常感谢 (10认同)
  • 是的,使用 sudo 解决了这个问题 (2认同)

小智 30

问题是f论证。它将下一个值作为文件名,因此它必须是最后一个参数:

tar cvzf output.tgz folder
Run Code Online (Sandbox Code Playgroud)

或者:

tar -cvzf output.tgz folder
Run Code Online (Sandbox Code Playgroud)

这些都是相同的,不会产生错误。


小智 10

有时备份在备份期间可能会更改的文件(如日志文件),您可能会发现 tar 选项 '--ignore-failed-read' 很有用(我使用的是 Debian Linux,不确定非 gnu tar)。

标准输出和错误可以在 2 个不同的文件中重定向,例如:

LOGDIR='/var/log/mylogdir' 
LOG=${LOGDIR}/backup.log 
ERRLOG=${LOGDIR}/backup.error.log 
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'

tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG
Run Code Online (Sandbox Code Playgroud)

我发现这通常是安全的,但请小心,因为焦油不会停止......


小智 6

我遇到了同样的问题,以上答案都不适合我。但是,我发现运行以下命令有效:

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

tar: Exiting with failure status due to previous errors可以通过关闭 -v 选项来识别被引用的错误。经审查,从错误的目录一样来/run/sys

通过排除这些目录,它工作得很好。希望这可以帮助任何有类似问题的人。