Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。
Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。
总的来说,Rclone 和 Restic 各有所长,要根据不同的业务需求选择使用。比如:网站数据的增量备份,用 Resitc 就比较合适。而常规文件的远程备份归档,用 Rclone 就很合适。
Restic 是一个可以正确进行备份的程序,其设计遵循以下原则:
Repository:备份期间产生的所有数据都以结构化形式发送并存储在存储库中,例如在具有多个子目录的文件系统层次结构中。存储库实现必须能够完成许多操作,例如列出内容。v0.12.0中已支持的存储服务包括:aws s3,minio server,Wasabi, Aliyun OSS, OpenStack Swift,Backlbaze B2,Azure Blob Storage,Google Cloud Storage,rclone*
Blob:Blob 将多个数据字节与识别信息(如数据的 SHA-256 哈希及其长度),加密的数据块及元数据,其中元数据包括长度,SHA-256 哈希信息。数据块可以存放文件数据(data),也可以存放目录结构数据(tree)。Blob的大小在512KiB到8MiB之间,因此小于512KB的文件不会被拆分。Restic的实现目标是让Blob平均大小为1MiB。
Pack:一个包结合了一个或多个 Blob,例如在单个文件中。Restic中的单个数据文件,包括一个或多个Blob,一旦创建不再修改。
一般只创建不删除,仅prune操作会删除不再被引用的数据。
Snapshot:快照代表在某个时间点已备份的文件或目录的状态。这里的状态是指内容和元数据,如文件或目录及其内容的名称和修改时间。
Storage ID:Pack文件的SHA256哈希值,通过这个ID可以在仓库中加载需要的数据文件。Restic将这个ID作为Pack的文件名,也就是文件的SHA256哈希值。Pack文件名即哈希值的设计也可以方便的检验数据文件是否被改动过。
yum install yum-plugin-copr yum copr enable copart/restic yum install restic
docker pull restic/restic
更多信息可参考:https://github.com/Lobaro/restic-backup-docker
$ git clone https://github.com/restic/restic $ cd restic $ go run build.go
$ sudo ./restic generate --bash-completion /etc/bash_completion.d/restic
将保存备份的地方称为“存储库”。本章解释了如何创建(“ init”)这样的存储库。存储库可以存储在本地,也可以存储在远程服务器或服务器上。
从主机A备份数据到主机B,需要主机A到主机B免密钥和互信
ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id_rsa.pub root@106.53.117.41
初始化备份,/data为 B服务器目录。
查看B服务器
restic -r sftp:root@106.53.117.41:/data backup ./
restic -r sftp:root@106.53.117.41:/data snapshots
restic -r sftp:root@106.53.117.41:/data ls 875a2a32
restic -r sftp:root@106.53.117.41:/data restore 875a2a32 -t ./ restic -r sftp:root@106.53.117.41:/data restore 875a2a32 --target ./
restic -r sftp:root@106.53.117.41:/data forget 875a2a32
上面备份的时候,都需要输入密码,肯定不适合脚本自动备份,所以我们还需要使用--password-file
参数来达到自动读取密码的步骤。
#先将密码,比如moerats保存在/root/resticpasswd文本中 echo 'xxzxxxxxx' > /root/resticpasswd #然后在备份命令中加--password-file参数来读取文本中的密码,这里以sftp为例 restic -r sftp:root@106.53.117.41:/data --verbose backup ./ --password-file /root/resticpasswd
支持基于s3协议的后端对象存储,例如minio或者腾讯/阿里对象存储
$ export AWS_ACCESS_KEY_ID=<YOUR-OSS-ACCESS-KEY-ID> $ export AWS_SECRET_ACCESS_KEY=<YOUR-OSS-SECRET-ACCESS-KEY> $ ./restic -o s3.bucket-lookup=dns -o s3.region=<OSS-REGION> -r s3:https://<OSS-ENDPOINT>/<OSS-BUCKET-NAME> init $ restic -o s3.bucket-lookup=dns -o s3.region=oss-eu-west-1 -r s3:https://oss-eu-west-1.aliyuncs.com/bucketname init restic -o s3.bucket-lookup=dns -o oss-cn-beijing.aliyuncs.com -r s3:https:/oss.oss-cn-beijing.aliyuncs.com init
export AWS_ACCESS_KEY_ID=LTAIxxxxxxxxxxxxxx9 export AWS_SECRET_ACCESS_KEY=XvHxxxxxxxxxxxxxxxJt3wb7 restic -o s3.bucket-lookup=dns -o s3.region=oss-cn-beijing.aliyuncs.com -r s3:https://xueltestoss.oss-cn-beijing.aliyuncs.com/oss init
对象存储上文件
#先将密码,比如moerats保存在/root/resticpasswd文本中 echo 'xxzxxxxx' > /root/resticpasswd #然后在备份命令中加--password-file参数来读取文本中的密码,这里以sftp为例
restic -r s3:https://oss-cn-beijing.aliyuncs.com/oss --password-file /root/resticpasswd backup /data/
其他恢复操作基本上和sftp的一致。
restic 是一个很不错的数据备份方案,rclone是一个不错的数据同步方案,以及minio作为数据存储,集成在一起真的很不错。