继续中断 rsync 后 .gstmp 文件上的 gsutil rsync 错误

Posted

技术标签:

【中文标题】继续中断 rsync 后 .gstmp 文件上的 gsutil rsync 错误【英文标题】:gsutil rsync error on .gstmp file after continuing interrupted rsync 【发布时间】:2020-05-16 07:28:11 【问题描述】:

我需要从谷歌云存储桶到本地目录执行gsutil rsync,这可能由于连接不良而中断/失败。所以我测试了如果我再次尝试 rsync 并继续我离开的地方会发生什么,它给出了一个错误信息,以删除由第一个中断的 rsync 留下的.gstmp 文件。

假设我有一个包含这些文件的存储桶:

test1.txt
test2.txt
test3.txt

然后我运行这个 gsutil rsync 命令:

user@machine:~/$ gsutil rsync -C -d -r gs://bucket_name ~/tmp/

我在复制 test2.txt 的过程中打断了它。这将在目标目录中留下一个test2.txt_.gstmp。现在,当我再次执行相同的 rsync 时,会发生这种情况:

user@machine:~/$ gsutil rsync -C -d -r gs://bucket_name ~/tmp/
Building synchronization state...
Starting synchronization...
Copying gs://bucket_name/test3.txt...
Removing file:///home/user/tmp/test2.txt_.gstmp
OSError: No such file or directory.

所以它会从上次中断的地方开始,但也会标记.gstmp 文件以进行删除,这很棒。但是当它实际上试图删除它时,它不知何故已经消失了,我得到了OSError(就像它试图删除它两次一样)。现在,如果我再次运行相同的命令,一切正常,因为 .gstmp 文件不再存在。

有没有人知道什么可能导致这种情况,以及如何避免这种情况?

编辑:

看起来它正在发生,因为 gsutil 无论如何都在清理 .gstmp 文件,所以如果 .gstmp 文件也是正在构建的同步状态的一部分,它会尝试将其删除两次(首先作为清理的一部分,然后然后再次作为同步的一部分),这会导致 OSError。我目前的解决方法是在 rsync 命令中添加一个忽略正则表达式:

gsutil rsync -C -d -r -x ".*gstmp$" gs://bucket_name ~/tmp/

现在它会忽略 rsync 进程中的 .gstmp,但仍会在清理过程中将其删除

【问题讨论】:

您在哪个版本的 Cloud SDK 上运行它? 我正在运行 gsutil 版本:4.47 【参考方案1】:

我试图重现您的用例:

 gsutil rsync -C -d -r gs://syncbucket  temp/
 #Building synchronization state...
 #Starting synchronization...
 #Copying gs://syncbucket/test1.txt...
 #Copying gs://syncbucket/test2.txt...
 #Copying gs://syncbucket/test3.txt...
 #CCaught CTRL-C (signal 2) - exiting

 ls temp/
 #test1.txt  test2.txt  test3.txt_.gstmp

 gsutil rsync -C -d -r gs://syncbucket  temp/
 #Building synchronization state...
 #Starting synchronization...
 #Copying gs://syncbucket/test3.txt...
 #Removing file://temp/test3.txt_.gstmp
 #OSError: No such file or directory.

 ls temp/
 #test1.txt  test2.txt  test3.txt

我不确定 OSError 消息是什么意思,但命令运行成功,我可以在本地查看 GCS 中的所有文件。我不需要运行gsutil rsync 三次。

【讨论】:

我猜它确实会继续尝试其他文件并成功复制它们。但在我的情况下,我也依赖退出代码来查看 rsync 是否成功,在这种情况下它不会返回退出代码 0。 你好@Bart,我是来自 GCP 支持的 Emil。我已将此问题提交给工程师,您可以跟踪它here。现在,您将不得不使用您想出的解决方法。干杯。

以上是关于继续中断 rsync 后 .gstmp 文件上的 gsutil rsync 错误的主要内容,如果未能解决你的问题,请参考以下文章

Linux rsync命令

rsync总结

Linux中详细搭建rsync服务

Linux centos7 rsync工具介绍rsync常用选项rsync通过ssh同步

Linux scp 断点续传

深度学习Yolov5训练意外中断后如何接续训练详解;yolov5中断后继续训练