小文件多设备间同步方案

解决什么问题

有一些小文件要经常读,不经常写,比较重要,需要在多个端同步,同时只会有一端在线。

文件同步这需求其实很普遍
现成也有很多解决方案,比如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之后再上传功能
  • 开机更新本地文件功能