清空又拍云对象存储后如何再次同步?

本文最后更新于:2020年12月8日 上午

摘要

简单介绍又拍云的UPX工具使用方法,重点记录清空又拍云对象存储文件后,再次使用upx sync同步出错的问题。

缘由

最近使用又拍云的upx工具同步数据的时候,不小心同步了一些没用的文件,一个一个删除比较麻烦,所以希望一次行清空对象存储中所有的内容,再重新同步文件。但是出现了一个问题:通过网页端清空所有文件后,再次使用upx sync同步时,发现虽然upx工具显示同步成功,但内容实际并没有同步上去。

upx无法同步的问题

先说说对象存储

说upx工具之前,先说说对象存储。我们自己搭建一个静态的网站,常用的方式是有下面两种:

  1. 自己租用服务器,备案后在服务器上用apache之类开一个Web服务把网站文件放上去,最后为了追求访问速度,可以再套一个CDN。

这样有什么问题呢?首先,大部分的网站作者,没有精力去维护服务器的安全,我本身是做网络安全的,每天网络中有大量漏洞探测和利用行为,开一个80端口是相当危险的一种行为。

  1. 把网站托管到gitee、github、netlify等平台,追求速度的话,可以再往外面套一个CDN(国内的CDN服务基本都需要备案才可以使用)。

这样有什么问题呢?CDN回源也是需要时间的,如果放到github之类的外国平台,回源速度慢,也会影响访问速度。

对象存储有什么用呢?对象存储其实是云服务商为网站等应用提供的存储服务,通常都会支持HTTP/HTTPS访问。比如我在使用的又拍云对象存储(又拍云的对象存储和其CDN服务做了深度的整合),只需把网站存到又拍云的对象存储中,就自动开启了又拍云的CDN服务,访问速度非常快,所以目前本站的搭建流程是:

  1. 在又拍云上开通对象存储服务,绑定好自己做过备案的域名。
  2. 更新文章或者更新网站时,在本地生成网站的静态文件后,丢到又拍云的对象存储空间即可。

upx工具是干什么的

那么如果我们想使用对象存储,问题就来了,怎么把我们的博客同步到对象存储中呢?以又拍云为例,可以使用网页直接上传、REST API、FORM API、FTP以及upx等多种方式将本地文件上传到对象存储。

upx是又拍云官方提供的工具,可以使用命令行可以实现文件上下传、增量文件同步、目录创建删除、文件删除(包括异步文件批量删除)。

相比于其他的方式,我认为upx工具的亮点是增量文件同步,非常方便。因为随着存储的内容越来越多,全量的上传时间很长,而类似网站更新的场景,需要比对文件变化,删除云端不一样的文件,把本地不一样的传上去,不借助工具非常麻烦。

upx命令格式:

1
upx [global options] command [command options]

常用的几个upx命令:

  • 登录又拍云服务:upx login <bucket> <operator> <operator_password>
    • <bucket> :服务名
    • <operator>:操作员
    • <operator_password>:操作员的密码
  • 显示当前目录(云端)中的文件和目录信息:upx ls
  • 上传文件:upx put <本地路径> <云存储路径>
  • 增量文件同步:upx sync <本地目录> <云存储目录> -v
    • 该命令与rsync类似,但我没有实际测过,一直都是不带什么参数直接用的

问题复现

  • 使用upx工具同步几轮文件
  • 使用网页、FTP等方式,清空对象存储空间
  • 再次使用upx工具同步文件

问题解决

提交了工单,客服的答复是:

upx 的 sync 仅用作增量同步,也就是只本地比对上次同步到云存储空间后新增的本地文件。在 upx 所在的账户的 HOME 目录下,有一个 .upx.db 的隐藏目录,其中包含同步的文件记录。您将其删除后,sync 同步的记录会进行重置。

所以,upx的sync,其实是在本地做了一个缓存,记录上一次同步了哪一些文件,在本地做相关的比对,上传出现变动的文件,并不会和保存在云端的文件做比对。所以也就好理解了,虽然删除了云端的文件,但是本地的同步记录没有变动,自然就出现了问题,

解决的方式很简单,直接删除HOME 目录下 隐藏的.upx.db 文件夹即可。

尾巴

一个挺简单的问题,但是没经历过,还就真不知道是咋回事儿,先记录下来吧。