Restic 是一款 GO 语言开发的数据加密备份工具,顾名思义,可以将本地数据加密后传输到指定的仓库。支持的仓库有 Local、SFTP、aws s3、minio、open stack swift、backblaze B2、Azure BS、Google Cloud storage、Rest Server。

实际上 minio 是一套完全兼容 Amazon S3 API 的开源对象存储项目,换言之,所有支持亚马逊 S3 API 的对象存储服务都可以在 restic 上配置使用。

阿里云创建 OSS

创建 oss 的过程略去不表。需要注意的是,为了保障云平台账户的安全,尽量使用阿里云的 RAM 访问控制台创建子帐号并授予 OSS 完全访问权限。然后用子帐号获取 ACCESS ID 和 ACCESS KEY。

配置 restic 仓库

restic 在 Linux 系统上的安装非常简单,只要对应平台下载编译好的二进制包即可,解压后将程序复制到 PATH 对应的可执行文件目录并赋予执行权限即可。

将 ACCESS ID 和 ACCESS KEY 导入环境变量

$ export AWS_ACCESS_KEY_ID=<Aliyun_ACCESS_KEY>
$ export AWS_SECRET_ACCESS_KEY=<Aliyun_SECRET_ACCESS_KEY>

可以直接使用 init 命令初始化仓库:

$ restic -r s3:https://oss-cn-shanghai.aliyuncs.com/bucket_name init

注意:仓库链接应使用 endpoint / bucket_name 的格式,使用 OSS 的访问域名可能无法正常初始化仓库。

也可以将仓库信息写入环境变量:

$ export RESTIC_REPOSITORY="s3:https://oss-cn-shanghai.aliyuncs.com/bucket_name"

如果将仓库信息写入环境变量,就不需要每次操作仓库都重新输入仓库信息了。

常规使用

比如要将 ~/图片 目录备份到仓库:

$ restic backup ~/图片

查看快照列表:

$ restic snapshots
ID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
a2022e35  2018-04-22 20:35:39  herald-U310              /home/herald/图片
----------------------------------------------------------------------
1 snapshots

列出某个快照中所包含的文件:

$ restic ls a2022e35
snapshot a2022e35 of [/home/herald/图片] at 2018-04-22 20:35:39.450146467 +0800 CST):
/图片
/图片/18-04-19_2004334933.jpg
/图片/2018-04-13_15-00-15.png
/图片/2018-04-16_15-19-39.png
/图片/2018-04-16_15-20-22.png
/图片/2018-04-18_17-11-52.png

挂载仓库到本地目录:

注意:挂载点必须是空目录!

$ restic mount ./test
enter password for repository: 
password is correct
Now serving the repository at ./test
Don't forget to umount after quitting!

备份了数据的 OSS Bucket 目录结构如下图:

2018-04-22_21-21-21

仓库中存储的所有数据都是加密的!