backup-tool
写一个备份和通知工具是刚接触 restic 的想法,之前也写过一个文章来讲手动实现的方式。
现在有时间闲下来就实现了该项目 Backup Tool,欢迎大家 star,试用并提出意见。
目前我观察到大多数人没有备份习惯或者备份是直接利用 rclone 同步实现的,但是利用 restic 会有以下好处:
- restic 能够方便地备份多个文件(从文件中读取需要备份的路径)
- restic 会对备份文件进行压缩
- restic 支持版本控制(每次备份都是一个快照)
- restic 备份文件是加密的(当然密码也可以设置为空),即使是共享云端存储空间,别人也不会知道内容(当然即使这样也不推荐)
- restic 是多平台的,Windows 也能使用
所以我写了该项目对 restic 简单功能进行封装,并定时调度,同时支持 Telegram 和邮件通知。
restic 支持的后端存储在该页面有讲,最常用的还是利用 rclone 和 OSS(S3)。
如果使用 OSS(S3),只需要在当前终端以及 .bashrc 中 export 相关配置即可,具体参见官方教程所需配置;而使用 rclone,也只需要提前用 rclone 配置好云端存储即可。
当前教程将以 rclone 为例。
使用 rclone 挂载云端存储网上有很多教程,我这里也简单提供一份。
同时使用 rclone 的一大好处是 rclone 的配置可以通过直接复制配置文件来迁移。
教程
安装
使用以下命令安装
1 | |

在终端中输入 but 或者 backup-tool 即可进入主菜单。
同时高级选项中也提供 rclone 安装:

添加备份配置
然后,输入 1 添加备份配置。

其中,rclone:onedrive:backup-test 中的 rclone:onedrive 代表使用 rclone 名为 onedrive 的后端存储配置(具体后端存储配置名字可以使用 rclone listremotes 查看;不懂 rclone 挂载的话可以参考网上其他教程,或者这个),backup-test 代表使用该存储中的 backup-test 文件夹作为备份仓库(该文件可以不存在,这种情况会自动创建文件夹并初始化为备份仓库)。
(🔔如果使用 rclone 的某个后端存储配置作为备份仓库,请首先确保 rclone 配置正确,例如使用 rclone lsd <remote> 验证是否配置成功。)
*-*-* 01:30:00 Asia/Shanghai 是 systemservice OnCalendar 的语法,类似于 cron 表达式。*-*-* 代表每年每月每日(不对日期限制),01:30:00 代表凌晨一点半,Asia/Shanghai 代表东八区(如果不加时区则是机器默认时区),注意具体备份开始时间会有随机 15min 内的时延(一定程度上防止多个备份任务同时进行。如果有多个备份任务,也请注意手动错开时间)。
保留天数代表在最近 $n$ 天中,保留每天的最新一份镜像;保留周数代表在最近 $n$ 周中,保留每周最新一份镜像。一份镜像只要满足以上两个条件之一即可保留。输入 0 代表不限制。
/opt/backup/backup_list.txt 该文件指定了需要备份的路径,其内容可以是:
1 | |
添加通知配置
Telegram

其中,Telegram Bot Token 通过 @BotFather 输入 /token 获取(没有 Bot 的话也在这里新建)

而 Chat ID 通过 @userinfobot 输入 /start

在高级选项界面下可以进行通知测试:


备份成功通知:


其中,发件人地址和 SMTP 用户名保持相同即可。
SMTP_PORT 为 587 或 25 时,SMTP_TLS 常设置为 starttls,SMTP_PORT 为 465 时,SMTP_TLS 常设置为 on,具体依据各自 SMTP 服务器而定。
测试通知:

备份成功通知:

配置迁移
如果有备份配置迁移的需求,在新机器进行同样安装操作,拷贝 /opt/backup/conf 文件夹,然后运行脚本主菜单中的应用备份配置即可。
(🔔注意这里的迁移是指原来的备份任务不再使用情况下的迁移)