小文件多设备间同步方案
解决什么问题
有一些小文件要经常读,不经常写,比较重要,需要在多个端同步,同时只会有一端在线。
文件同步这需求其实很普遍
现成也有很多解决方案,比如rsync,云盘文件同步等。
所以在这里只是为自己做的个性化的同步工具,满足一些扩展功能。
解决方案思路
- 文件加密上传到云端
- 对本地文件进行监视
- 若有修改则加密上传到云端
- 每次电脑开机时,从云端比较文件内容是不是一样的
- 不一样则备份本地的文件,并下载云端文件进行覆盖
实现思路
- 加解密使用 openssl,但做到和linux差不多,就直接把MinGW给安装了
- 对文件进行监视,在这里可以用python的watchdog
- 上传云端,可以使用dropbox或是googledrive。要多个国内备份选个七牛也行。这里选googledrive的命令行工具gdrive。
- 整体上就用python实现,在监视的触发函数中比较文件进调用命令行工具。
- 整个脚本放在开机启动项内
属于工具脚本类,功能,思路确定,没有技术的难点,应该花时间不多
动手实现
文件加解密
用des3加解tar -zcvf - ${BACK_DIR} | openssl des3 -salt -k ${PASSWORD} | dd of=${TARGET_FILE}
解密dd if=${TARGET_FILE} | openssl des3 -d -k ${PASSWORD} | tar zxf -
在windows上运行要安装MinGw,我安装git时已经有。
生成一个加密文件tar -zcvf - xx.txt | openssl des3 -salt -k 123123 | dd of=xx.txt.des3
还原加密文件dd if=xx.txt.des3 | openssl des3 -d -k 123123 | tar zxf -
文件监控
参考这里
放在了gist上。
https://gist.github.com/finghine/9700b669724baf500fdc09615824d90e
同步工具
https://github.com/prasmussen/gdrive
这里前提已经有googledriver账号。
第一次上传要授权,见gdrive的使用方法。
因为国内环境,敲命令行前要设置下代理set https_proxy=http://localhost:1080
上传文件 gdrive upload xx.txt.des3
会提示Uploaded 0BzqNJHAvF2Hta3dMYXE0NUNuRjQ at 57.0 B/s, total 136.0 B
要把个id记好。
查看文件信息gdrive info 0BzqNJHAvF2Hta3dMYXE0NUNuRjQ
,可以看到文件md5
更新文件gdrive update 0BzqNJHAvF2Hta3dMYXE0NUNuRjQ xx.txt.des3
整合
见 gist
https://gist.github.com/finghine/29e88868fd69e124c1cc5079d33c43ba
未完成的功能
- 还没把比较文件md5之后再上传功能
- 开机更新本地文件功能