前言
公司业务中使用的备份工具一直是alicloud-duplicity,一直也没研究。后来业务出问题了,看了看,原来是基于duplicity开发的,使用了半天,感觉很不错,我感觉他的特点有:
- 加密备份
- 支持多种协议
- 内置了主流的存储商的
backends:Azure、AWS S3、onedrive - 支持增量备份
问题
-
duplicity官方没提供阿里云OSS的backends,所以才有了alicloud-duplicity,但alicloud-duplicity项目已经停更好久了,但也仅限于Python2,所以我在alicloud-duplicity的
基础上适配了Python3,目前没什么问题,项目地址duplicity -
恢复时的小问题:恢复没有“增量”恢复的概念(至少我没找到),只能恢复到一个本地空目录,如果是非空目录,需要加上参数
--force。这个我感觉是个最大的不足,举例来说:增量备份一个小文件small.file,在另一台机子上你想获取最新的备份数据(除了这个小文件,其余文件在本地都已经存在),恢复时,会全量从远端下载所有的文件,虽然你只是想得到small.file这个小文件。
安装
- 安装依赖:
apt install gettext librsync-dev python3-dev -y或yum install librsync-devel python3-dev gettext -y pip依赖:pip install future fasteners oss2- 克隆代码:
git clone https://github.com/steinvenic/duplicity慢的话用加速源git clone https://github.com.cnpmjs.org/steinvenic/duplicity.git - 安装:python setup.py install
- 验证: duplicity -V
使用
因为支持的协议和厂商太多了,这里只拿阿里云OSS和亚马逊的S3举例
阿里云
- 鉴权
echo "
[oss]
endpoint=oss-cn-shanghai.aliyuncs.com
access_key_id=YOUR KEY ID
access_key_secret=YOUR KEY SECTER">~/.alicloud.cfg
-
加密秘钥
export PASSPHRASE=YOUR PASSWORT,这个是自己的加密密码,解密的时候需要用到 -
全量备份:
duplicity full /etc/ oss://nj-test/etc_bak -
增量备份:
duplicity incre /etc/ oss://nj-test/etc_bak -
恢复:
duplicity restore oss://nj-test/etc_bak /etc/ -
恢复到指定时间点 :
duplicity restore --force -t 2021-07-21T13:15:00 oss://nj-test/etc_bak ./etc -
恢复到相对时间点 :
duplicity restore --force -t 20D oss://nj-test/etc_bak ./etc,恢复20天前的数据,D表示天,M表示分钟 -
--volsize=200,指定卷大小为200MB -
排除某个目录:
duplicity full /root/tmp/ --exclude '/root/tmp/frp*' boto3+s3://cf-nj,备份的路径要用绝对路径
亚马逊S3
- 鉴权
mkdir ~/.aws
echo "
[default]
region=cn-north-1
aws_access_key_id = YOUR KEY ID
aws_secret_access_key = YOUR KEY SECTER">~/.aws/credentials
-
安装依赖
pip install boto3 -
全量备份:
duplicity full /etc/ boto3+s3://nj-test/etc_bak
后面的用法就一样了,不写了
恢复数据到个人NAS
我用的nextcloud,支持webdav协议,所以只要使用davfs2将文件挂载到本地,改成自己的webdav地址就可以了
安装davfs2 :apt-get install davfs2 -y && mkdir /nc
挂载:mount -t davfs http://nc.824809799.xyz:8000/remote.php/dav/files/eric /nc
恢复:duplicity restore --force oss://nj-test/tmp /nc/tmp