4

我们一直在使用gsutil -m rsync -r将开箱和部署箱与GCS存储桶保持同步近2年,没有任何问题。桶中有大约85k个物体。为什么gsutil rsync会重新下载我们所有的文件?

直到最近,这个工作完美无缺:我们每隔15分钟左右运行一次deploy-box - > GCS rsync,以保持所有新上传的资源的备份,然后在我们想要的时候使用GCS - > dev box rsync刷新本地开发数据(在OSX El Capitan上运行)。

尽管如此,在过去的几个月里,GCS-> dev rsync已经开始膨胀,下载越来越多的图像。

最初我只是认为“很好,我们获得了更多的资源上传”,但它的发展速度比数据快,直到今天似乎下载整个85k图像。

我已经仔细检查过我在正确的位置,命令是否正确,路径是否正确等等。对于所有gsutil输出结果都是用“复制...”的大写和大写滚动。和“正在下载...”的消息,并行使用我们的100Mbps连接,当我去另一个终端并且每10秒在目的地目录上运行find . -type f | wc -l时,它表明几乎没有2或3个新文件正在被添加一分钟。我查看gsutil表示现在正在下载的文件的修改时间,而且大多数文件都是旧的,很多文件在一年或更长时间内没有更改。含义:它使用大量的时间和带宽下载所有的数据,全部为了几百个文件。

在最近的OSX gsutil版本中有所改变吗?有可能是一个错误?我怎么会开始关注这个问题呢?或报告?新闻组gsutil-discussgs-discussion已存档,并且gce-discussion中的讨论全部关于使用来自GCE实例的gsutil

谢谢!

+0

在gsutil 4.20(2016-07-20发布)中,sync'ing的更改检测算法仅从使用文件大小更改为比较本地文件的大小和文件修改时间。开发盒上的文件修改时间与部署盒上的文件修改时间不同?如果是这样,那可以解释这个问题。 –

+0

嘿,谢谢你的帮助特拉维斯!我认为这几乎肯定是答案;我们在227天前创建了一个新的部署框实例,并将所有文件rsync到它上面,而且它似乎来自'find。-type f -mtime + 227'表示初始同步将所有修改时间写入rsync的时间,而不是它们原来的来自GCS的时间戳。除了从dev中删除所有内容并重新rsync它们之外,我们能做些什么吗?无论如何,这是'gsutil'应该做什么? (另外,如果你想把它放在一个答案中,那么我可以接受它,并请求我的后续评论作为评论:-)) –

+0

问题是具有未改变内容的文件正在同步到开发盒,是?当您从部署 - > GCS进行rsync时,是否以任何方式更改部署框中的文件的mtime?我希望如果GCS - > dev的同步时间不同,则它们会复制一次文件,但随后的同步将会是增量式的。但是,如果您创建了一个具有不同文件mtimes的新部署框然后上传这些框,那么在所有文件都被修改时会出现这种情况,并且会导致另一个“完全同步”下载到开发框。 –

回答

1

gsutil 4.20(2016-07-20发布)修改了rsync的change detection algorithm。现在,它不仅比较本地文件的大小与其云对应文件的大小,而且还比较本地文件的大小和文件修改时间。使用rsync上传文件时,文件修改时间存储在文件的自定义用户元数据中。如果不存在,则使用对象创建时间。

+0

我想调出一个更正(从文档):对于云到本地rsync,如果文件mtime元数据不存在,则使用对象创建时间而不是校验和。 –

2

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

比较校验和文件,如果源和目的地 的大小以及修改时间匹配

,因为它似乎甚至使用校验如果mtime不匹配

+1

我有本地文件不断更新,但没有改变。 -c选项适用于我...以恢复原始同步行为。快多了。谢谢! – Robert

+0

谢谢,'-c'帮助很大。另外请确保安装已编译的'crcmod':https://cloud.google.com/storage/docs/gsutil/addlhelp/CRC32CandInstallingcrcmod –

相关问题