开源备份软件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
最后
到这里基本的使用基本就完成了,其他还是挺简单的。