KnightHart 发表于 2020-6-8 13:22

restic-全平台nas的加密增量快照备份神器

本帖最后由 KnightHart 于 2020-6-8 14:12 编辑

前言自从使用了nas以来,一直都希望在Linux平台找到一个安全高效,易用的备份工具,前前后后用了Rclone,Duplicati,Syncthing,Borgbackup等,但上面的工具均有一些问题不能满足我的需求,例如rclone虽然作为一个同步工具很好用,但作为加密备份工具,它的设置比较麻烦,而且不支持快照,Duplicati有个方便的GUI界面,docker安装也相当省事,可惜稳定性捉急,我上传一百多G的电子书到OneDrive一直失败,Syncthing作为多台主机间的同步工具很好用,但作为备份工具无法加密备份,而且必须要求另一台机器也安装Syncthing,目前是作为我在nas、PC和Android手机间的同步工具。Borgbackup则是拓展性插,和rclone兼容性也很差,试了下无法连接到rclone挂载的文件。总结一下我的需求,差不多就是这几点:1.支持多种协议和网盘,最起码得支持OneDrive和GoogleDrive。2.支持加密备份:我不希望自己的私人数据直接上传到网盘,尤其是照片。3.稳定高效,操作简单。4.支持Linux。5.增量备份、最好支持快照系统。在找了一圈后,我发现了Restic这个全平台的备份神器,刚好能满足上面的这些需求,而且在我的Linux系统nas上运行了近一个月,相当稳定。 官方所总结的restic特点便是:方便、快速、可靠、安全、高效、开源。安装resticrestic基于go语言开发,因此对于*UNIX和BSD、Windows都有良好的支持,在大多数平台上,可以直接使用包管理工具安装,在一些没有包管理器的平台上,可以直接下载二进制包使用,例如群晖等。我使用的nas安装的是openmediavault系统,基于Debian10,因此直接使用apt安装restic:sudo apt install restic
restic能够结合rclone使用,增加连接的协议和网盘,我想要使用restic加密备份数据到googldrive,因此也安装了rclone:curl https://rclone.org/install.sh | sudo bash
这里选用脚本安装而不是apt,主要是因为Debian10的apt仓库中rclone版本有些旧,不如直接用官方脚本安装最新版本。如此,restic和rclone便都安装在nas了,下一步便能直接使用。在这之后,为了防止restic的版本过旧,使用命令让它自动升级:sudo restic self-update
如此一来,我们便安装好了最新版本的restic和rclone。使用restic进行备份为了让restic实现把本地文件备份到OneDrive,需要借助rclone连接,因此需要先设置好rclone。restic支持下面几种协议和服务,但能够借助rclone实现对数十种协议的支持,包括OneDrive,GoogleDrive等网盘服务。

使用rclone连接到OneDrive的教程就直接略过了,网上有不少教程,而且这也不是本文的重点。使用restic在OneDrive上备份大概分为初始化存储库、进行备份这两步。首先是在OneDrive根目录下的“myphoto”文件夹进行初始化库:sudo restic init --repo rclone:onedrivedb:myphoto
其中,“rclone:onedrivedb:myphoto”代表我在使用rclone建立的一个命名为onedrivedb连接的myphoto文件夹初始化一个restic备份库。在这个过程中,会要求你输入加密库所用的密码。初始化完成后,便能上传文件到库中进行备份了:sudo restic -r rclone:onedrivedb:myphoto --verbose backup /srv/4c6cf5a1-fa58-44e8-b26c-f0490354bf85/calibrebooks/books/我的照片
其中“/srv/4c6cf5a1-fa58-44e8-b26c-f0490354bf85/calibrebooks/books/我的照片”则是我的照片路径。restic的备份是增量备份,并且每次备份都会建立一个当前状态的快照,这意味着每次备份只会备份增加的数据部分,而不是重新上传,只要有快照,就能恢复到文件建立快照时的数据。如果本地的数据丢失,或者仅仅想要进行版本恢复的话,可以直接使用restic中备份的数据恢复:首先查看快照: restic -r rclone:onedrivedb:myphoto snapshots
假如最新的快照编号是79766175,我们可以输入快照编号进行恢复。restic -r rclone:onedrivedb:myphoto restore 79766175 --target /tmp/restore-work
通过上面的操作,我们便把备份的照片存储库中快照编号为79766175的数据全部恢复到“/tmp/restore-work”这个目标文件夹。一些额外设置1.脚本编写很多情况下,我们并不需要手动输入命令进行备份,希望编写脚本和计划任务让它自动运行,而这时候就有一个问题:我们需要在执行脚本的时候就把密码输入进去。解决这个问题的方法很多,例如直接使用管道echo password|restic commands 将密码输入进去,或者将密码保存在一个本地文件,让restic读取,或者通过设置RESTIC_PASSWORD环境变量输入密码。2.按照规则删除快照快照是个好东西,但快照同样会占据空间,例如你原本备份有40g的数据,删除了30g,但由于快照系统,你的存储库还是占据了40g的空间。或者是单纯过时没用了,如果你不想手动管理快照的话,可以使用restic的forget命令自动删除快照,例如:
--keep-last n----------保存最新的n个快照
--keep-hourly n--------保存过去n个小时内每小时的最新快照
--keep-weekly n--------保存过去n个星期内每一周的最新快照
有些规则之间是相互兼容的,但遇到冲突的会进行“保存”处理,还不是直接删除,例如如果你想最近一周内的每天一个快照、最近一个月的每周都有个快照,最近一年的每月都有一个快照,你可以这样写:
--keep-last n----------保存最新的n个快照
--keep-hourly n--------保存过去n个小时内每小时的最新快照
--keep-weekly n--------保存过去n个星期内每一周的最新快照
需要注意的是,删除快照并不会直接删除数据,而是类似于Windows回收站,还需要执行prune命令才会把数据彻底删除,建议三思而行。总结restic是一款相当出色的备份工具,它使用简单方便,安全性高,同时还有快照和增量备份功能,搭配rclone更是**增强了它的实用性和适用范围,同时由于它是跨平台和开源的,在各个主流平台都可以用同一款备份工具。如果你对于命令行工具不是特别抗拒的话,强烈建议使用restic作为你的数据备份工具。参考:restic官方文档(英语)https://restic.readthedocs.io/en/stable/010_introduction.html

上下左右 发表于 2020-6-8 17:50

看起来不错

ziyuan008 发表于 2020-6-8 21:57

群晖直接加密同步百度云不香吗?

沧粟 发表于 2021-3-11 19:19

大半年过去不知道楼主Restic这套方案用得怎样
Restic没有GUI维护有点不方便,用着Duplicati感觉还行

dejavuuuuuuuu 发表于 2021-3-11 19:37

seafile免费专业版(3用户限制)+https加密也是一样的吧,还有各个平台的客户端

开起 发表于 2021-3-11 19:42

感觉挺不错的,目前本地快照是用的btrfs subvolume,远程rclone手动同步,感觉这个远程快照挺不错的

—— 来自 OnePlus KB2000, Android 11上的 S1Next-鹅版 v2.4.4

Damenly 发表于 2021-3-12 15:23

开起 发表于 2021-3-11 19:42
感觉挺不错的,目前本地快照是用的btrfs subvolume,远程rclone手动同步,感觉这个远程快照挺不错的

——...

btrfs send/receive 可以过ssh远程备份

开起 发表于 2021-3-12 18:25

Damenly 发表于 2021-3-12 15:23
btrfs send/receive 可以过ssh远程备份

receive需要把一个subvolume锁定为只读,send结束以后解除只读,不是很好用
页: [1]
查看完整版本: restic-全平台nas的加密增量快照备份神器