假设我执行此操作tar cfzp home.tar.gz /home
(需要一段时间)并且在压缩期间文件更改并且 tar 失败,我收到“文件在我们读取时已更改”并且 tar 停止。我认为 home.tar.gz 现在不完整,或者这只是“通知”而不是真正的错误?
是否有某种“强制”选项可以使 tar 完成其工作并且不会因错误而中止?
编辑/更新:我发现“--ignore-failed-read 不要在不可读的文件上以非零值退出”,至少我认为它正在工作。但是需要注意参数的顺序,因为您最终可能会得到一个名为“--ignore-failed-read”的 tar 文件
我需要忽略其他任何东西吗?
更新:如果没有“--ignore-failed-read”,如果文件已被删除“文件在我们阅读之前被删除”,tar 将继续运行。但是,我认为它可能会因“文件在我们读取时已更改”错误而中止,但我真的不知道。很难将存档与“原始”进行比较,因为我有来来往往的缓存文件等。
更新:仔细观察“文件在我们阅读时发生了变化”更像是一个通知,如果在 tar 开展业务时文件发生变化,则 tar 似乎会继续运行。但我会留下答案,也许更有经验的人可以增加更多的见解。
您的假设是正确的,“文件在我们读取时已更改”是一个通知,通常与 tar 创建存档时正在使用的文件(即在创建过程中写入)有关。如果一致性很重要,你最好在别处同步内容,即
rsync -avz /my/home/ /somebackupdir/my/home/ # initial sync, followed by
rsync -avz /my/home/ /somebackupdir/my/home/ # any subsequent sync, repeated
# as often as you feel necessary
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个备份位置的好处,它只需要在创建 tarball 之前更新差异。
小智 6
我认为你的问题的正确答案应该是:
使用tar --warning=no-file-changed
它只会抑制类似的警告"%s: file changed as we read it"
。将军--ignore-failed-read
可能会忽略你不想忽略的失败。