开源备份软件Restic简单教程
开源备份软件 Restic 简单教程
Restic 是一个快速、安全、高效的备份工具,特别适用于存储在不同位置的数据
安装
该工具提供多平台安装部署
macOS
brew install restic
Debian
apt update
apt install restic
Alpine
apk add restic
其他
其他系统可以参考官网文档
升级
除了包安装的方式升级外,还支持自身升级
restic self-update
补全命令行
执行如下命令可以使我们在使用 restic 时参数自动补全,提升使用效率
restic generate --bash-completion /etc/bash_completion.d/restic
存储库
安装好了 Restic 后,还需要配置下存储方式(本地或者远程), 配置过程中都会要你输入密码。
记住密码很重要
!如果你失去了它,你就不会 能够访问存储库中存储的数据.
为了自动向 restic 提供存储库密码,有几个选项支持配置:
- 设置环境变量
RESTIC_PASSWORD
- 通过选项或环境变量使用密码指定文件的路径
--password-file RESTIC_PASSWORD_FILE
- 配置在需要密码时通过 option 或环境变量
--password-command RESTIC_PASSWORD_COMMAND
接下来介绍一下我常用的存储方式
Local 本地存储
备份到本地
/data/restic-repo
restic init --repo /data/restic-repo
enter password for new repository:
enter password again:
created restic repository b8107af4fd at /data/restic-repo
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
S3 协议存储
远程备份, 备份到支持 S3 协议的对象存储中,如 minio
export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>
restic -r s3:http://localhost:9000/restic init
利用 rclone
restic 本身支持的存储库有限,但是 rclone 支持多,于是乎支持 rclone 集成
restic -r rclone:foo:bar init
更多可以参考官方文档 other-services-via-rclone
备份
目录中特定时间点的内容在 Restic 中称为
快照
以本地备份为例进行演示说明:
# 第一次备份数据
restic -r /data/restic-repo backup /etc/sb
enter password for repository:
repository b8107af4 opened successfully, password is correct
created new cache in /root/.cache/restic
Files: 77 new, 0 changed, 0 unmodified
Dirs: 56 new, 0 changed, 0 unmodified
Added to the repo: 113.555 KiB
processed 77 files, 65.949 KiB in 0:00
snapshot aa2f8849 saved
# 再次运行backup命令,Retic将创建数据的另一个快照
restic -r /data/restic-repo backup /etc/sb
enter password for repository:
repository b8107af4 opened successfully, password is correct
Files: 0 new, 0 changed, 77 unmodified
Dirs: 0 new, 0 changed, 56 unmodified
Added to the repo: 0 B
processed 77 files, 65.949 KiB in 0:00
snapshot c8b23ba8 saved
也可以备份同一个存储库中的单个文件
restic -r /data/restic-repo --verbose backup /etc/sb/hy2.yaml
open repository
enter password for repository:
repository b8107af4 opened successfully, password is correct
lock repository
load index files
start scan on [/etc/sb/hy2.yaml]
start backup on [/etc/sb/hy2.yaml]
scan finished in 0.207s: 1 files, 265 B
Files: 1 new, 0 changed, 0 unmodified
Dirs: 2 new, 0 changed, 0 unmodified
Data Blobs: 1 new
Tree Blobs: 3 new
Added to the repo: 1.330 KiB
processed 1 files, 265 B in 0:00
snapshot 822f2e6c saved
相关常用参数
--exclude
指定一次或多次排除一个或多个项
--exclude-file
指定一次排除包含特殊文件的文件夹
--exclude-if-present foo
排除文件夹包含名为 foo 的文件,不支持文件名的通配符
--exclude-larger-than size
指定一次以排除大于给定大小的文件
操作使用存储库
列出所有快照
restic -r /data/restic-repo snapshots
enter password for repository:
repository b8107af4 opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------
aa2f8849 2024-07-14 06:54:47 nat4 /etc/sb
c8b23ba8 2024-07-14 06:57:08 nat4 /etc/sb
822f2e6c 2024-07-14 06:59:27 nat4 /etc/sb/hy2.yaml
-----------------------------------------------------------------------
3 snapshots
还支持过滤策略
restic -r /data/restic-repo snapshots --path "/etc/sb"
enter password for repository:
repository b8107af4 opened successfully, password is correct
ID Time Host Tags Paths
--------------------------------------------------------------
aa2f8849 2024-07-14 06:54:47 nat4 /etc/sb
c8b23ba8 2024-07-14 06:57:08 nat4 /etc/sb
--------------------------------------------------------------
2 snapshots
验证
运行检查命令来验证所有数据都正确地存储在存储库中了,应该 定期运行此命令
,以确保存储库的内部结构没有错误
restic check -r /data/restic-repo
using temporary cache in /tmp/restic-check-cache-106234855
enter password for repository:
repository b8107af4 opened successfully, password is correct
created new cache in /tmp/restic-check-cache-106234855
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors were found
默认情况下不检测数据库磁盘上文件是否被修改,以使用 restic 命令也验证存储库中包文件的完整性
restic -r /data/restic-repo check --read-data
using temporary cache in /tmp/restic-check-cache-770072337
enter password for repository:
repository b8107af4 opened successfully, password is correct
created new cache in /tmp/restic-check-cache-770072337
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
read all data
[0:00] 100.00% 4 / 4 packs
no errors were found
从备份恢复数据
从快照中恢复数据
restic -r /data/restic-repo restore c8b23ba8 --target /tmp/restore-work
enter password for repository:
repository b8107af4 opened successfully, password is correct
restoring <Snapshot c8b23ba8 of [/etc/sb] at 2024-07-14 06:57:08.982881207 -0400 EDT by root@nat4> to /tmp/restore-work
恢复部分文件
restic -r /data/restic-repo restore latest --target /tmp/restore-work2 --path "/etc/sb" --host nat4
enter password for repository:
repository b8107af4 opened successfully, password is correct
restoring <Snapshot c8b23ba8 of [/etc/sb] at 2024-07-14 06:57:08.982881207 -0400 EDT by root@nat4> to /tmp/restore-work2
标准输出
我的简单理解就是导出文件,用的不多
restic -r /data/restic-repo dump latest /etc/sb/hy2.yaml > /tmp/hy2.yaml
删除备份的快照
指定快照 ID 来删除快照
forget ID
root@nat4:~# restic -r /data/restic-repo snapshots
enter password for repository:
repository b8107af4 opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------
aa2f8849 2024-07-14 06:54:47 nat4 /etc/sb
c8b23ba8 2024-07-14 06:57:08 nat4 /etc/sb
822f2e6c 2024-07-14 06:59:27 nat4 /etc/sb/hy2.yaml
-----------------------------------------------------------------------
3 snapshots
root@nat4:~# restic -r /data/restic-repo forget c8b23ba8
enter password for repository:
repository b8107af4 opened successfully, password is correct
[0:00] 100.00% 1 / 1 files deleted
root@nat4:~# restic -r /data/restic-repo snapshots
enter password for repository:
repository b8107af4 opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------
aa2f8849 2024-07-14 06:54:47 nat4 /etc/sb
822f2e6c 2024-07-14 06:59:27 nat4 /etc/sb/hy2.yaml
-----------------------------------------------------------------------
2 snapshots
虽然上述命令将快照删除了,但文件引用的数据仍然存储在存储库中, 要清除未引用的数据,必须运行 prune 命令
restic -r /data/restic-repo prune
当然也可以综合这两步一起操作
# 仅保留最新的快照
restic forget -r /data/restic-repo --keep-last 1 --prune
根据策略删除快照
根据策略删除快照这个用法会多一些
- 可以指定保留多少小时/每日/每周/每月和每年快照,以及删除多少其他快照
- 可以使用 --dry-run 参数来测试需要删除的文件和目录列表
--keep-last n 保留最后(最新)n个快照
--keep-hourly n 不删除快照的最后 n 个小时;每小时只保留最后一个快照
--keep-daily n 不删除快照的最后 n 个天;每小时只保留最后一个快照
--keep-weekly n 不删除快照的最后 n 个周;每小时只保留最后一个快照
更多的可以参考官方文档 060_forget
保留每天一个快照,最多保留最近的 4 天的快照。举个例子,如果你有 10 天的备份,这个选项会删除除了最近 4 天以外的每天的备份
restic -r /data/restic-repo forget --keep-daily 4 --dry-run
最后
到这里基本的使用基本就完成了,其他还是挺简单的。