继续中断 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 错误的主要内容,如果未能解决你的问题,请参考以下文章