为什么 gsutil rsync 重新下载我们所有的文件?

Why is gsutil rsync re-downloading all our files?

近 2 年来,我们一直在使用 gsutil -m rsync -r 来保持开发箱和部署箱与 GCS 存储桶同步,没有出现任何问题。桶中大约有 85k 个对象。

直到最近,这一直运行良好:我们 运行 每 15 分钟左右执行一次部署框 -> GCS rsync,以备份所有新上传的资源,然后执行一次 GCS -> 开发每当我们想要刷新本地开发数据时(运行ning 在 OSX El Capitan 上)。

不过,在过去几个月内,GCS->dev rsync 开始膨胀,下载的图像越来越多。

最初我只是想 "great, we're getting more resources uploaded",但它的增长速度比数据快得多,直到今天它似乎正在下载整个 85k 图片。

我已经仔细检查过我在正确的地方,命令是正确的,路径是正确的,等等。尽管 gsutil 输出正在滚动 gsutil =33=] 和 "Downloading..." 消息,很好地并行使用我们的 100mbps 连接,当我去另一个终端并且每 10 秒在目标目录上 运行 find . -type f | wc -l 时,它显示几乎没有每分钟添加 2 或 3 个新文件。我查看了 gsutil 表示正在下载的文件的修改时间,其中大部分文件都是旧文件,很多文件在一年或更长时间内没有变化。意思是:它正在下载所有数据,使用大量的时间和带宽,所有这些都是为了几百个文件。

最近的 OSX gsutil 版本有什么变化吗?可能有错误吗?我怎么会开始着手追踪呢?还是举报了?新闻组 gsutil-discussgs-discussion 已存档,gce-discussion 中的讨论都是关于从 GCE 实例使用 gsutil

谢谢!

gsutil 4.20(2016 年 7 月 20 日发布)修改了 rsync 的 change detection algorithm。它不再只将本地文件的大小与其云对应文件进行比较,而是同时比较本地文件的大小和文件修改时间。使用 rsync 上传文件时,文件修改时间存储在文件的自定义用户元数据中。如果不存在,则使用对象创建时间。

我遇到了一个类似的问题,就是一遍又一遍地同步相同的文件。我没有那么多文件,因此您可能需要检查性能,但我决定使用 -c 选项强制使用校验和,而不是在我的构建过程中在本地修改的 mtime。 我认为(并希望)文档说明

略有错误

compare checksums for files if the size of source and destination as well as mtime match

因为它似乎使用校验和,即使 mtime 不匹配