清空又拍云对象存储后如何再次同步?
本文最后更新于:2020年12月8日 上午
摘要
简单介绍又拍云的UPX工具使用方法,重点记录清空又拍云对象存储文件后,再次使用upx sync同步出错的问题。
缘由
最近使用又拍云的upx工具同步数据的时候,不小心同步了一些没用的文件,一个一个删除比较麻烦,所以希望一次行清空对象存储中所有的内容,再重新同步文件。但是出现了一个问题:通过网页端清空所有文件后,再次使用upx sync同步时,发现虽然upx工具显示同步成功,但内容实际并没有同步上去。
先说说对象存储
说upx工具之前,先说说对象存储。我们自己搭建一个静态的网站,常用的方式是有下面两种:
- 自己租用服务器,备案后在服务器上用apache之类开一个Web服务把网站文件放上去,最后为了追求访问速度,可以再套一个CDN。
这样有什么问题呢?首先,大部分的网站作者,没有精力去维护服务器的安全,我本身是做网络安全的,每天网络中有大量漏洞探测和利用行为,开一个80端口是相当危险的一种行为。
- 把网站托管到gitee、github、netlify等平台,追求速度的话,可以再往外面套一个CDN(国内的CDN服务基本都需要备案才可以使用)。
这样有什么问题呢?CDN回源也是需要时间的,如果放到github之类的外国平台,回源速度慢,也会影响访问速度。
对象存储有什么用呢?对象存储其实是云服务商为网站等应用提供的存储服务,通常都会支持HTTP/HTTPS访问。比如我在使用的又拍云对象存储(又拍云的对象存储和其CDN服务做了深度的整合),只需把网站存到又拍云的对象存储中,就自动开启了又拍云的CDN服务,访问速度非常快,所以目前本站的搭建流程是:
- 在又拍云上开通对象存储服务,绑定好自己做过备案的域名。
- 更新文章或者更新网站时,在本地生成网站的静态文件后,丢到又拍云的对象存储空间即可。
upx工具是干什么的
那么如果我们想使用对象存储,问题就来了,怎么把我们的博客同步到对象存储中呢?以又拍云为例,可以使用网页直接上传、REST API、FORM API、FTP以及upx等多种方式将本地文件上传到对象存储。
upx是又拍云官方提供的工具,可以使用命令行可以实现文件上下传、增量文件同步、目录创建删除、文件删除(包括异步文件批量删除)。
相比于其他的方式,我认为upx工具的亮点是增量文件同步,非常方便。因为随着存储的内容越来越多,全量的上传时间很长,而类似网站更新的场景,需要比对文件变化,删除云端不一样的文件,把本地不一样的传上去,不借助工具非常麻烦。
upx命令格式:
1 |
|
常用的几个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
文件夹即可。
尾巴
一个挺简单的问题,但是没经历过,还就真不知道是咋回事儿,先记录下来吧。