restic 备份策略实操:从初始化到无人值守的 5 个关键动作
【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic
生产数据只存一份等于没有备份。3-2-1 原则要求至少一份副本落在另一块介质、另一种存储上,restic 就是干这件事的开源备份工具:增量写入、全量加密,一条命令切换本地盘或 S3。
项目速览
restic 是内容寻址的增量备份工具:数据按内容哈希分片,未变化的块绝不重复上传,仓库内所有对象默认加密。和传统方案对照:
| 维度 | tar / rsync | restic |
|---|---|---|
| 增量 | 无或按文件 mtime | 块级内容寻址,只传差异 |
| 加密 | 需自行套层 | 默认 AES-256 全仓库加密 |
| 存储后端 | 本地盘 / SFTP | 本地、SFTP、REST、S3、B2 等 |
| 去重 | 无 | 跨快照全局去重 |
五分钟跑通第一条备份
init、backup、restore 三步即可验证整条链路:
export RESTIC_REPOSITORY=/srv/restic-repo # 仓库地址 export RESTIC_PASSWORD=ChangeMe # 仓库密码 restic init # 初始化仓库 restic backup /data/docs # 首次全量备份 restic restore latest --target /tmp/restore # 恢复最近快照跑完/tmp/restore下应有/data/docs的完整内容。
后端怎么选
选型逻辑只有一条:离数据越远、介质越不同,副本越可靠。
| 后端 | 适用场景 | 仓库地址格式 |
|---|---|---|
| 本地盘 | 测试、NAS 上快速搭建 | /srv/restic-repo |
| SFTP | 已有 VPS 或异地机器 | sftp:user@host:/repo |
| REST | 自建对象存储(MinIO 等) | http://host:8000/ |
| S3 | 云环境,多副本合规 | s3:s3.us-east-1.amazonaws.com/bucket |
以 S3 为例,初始化只需替换-r:
restic -r s3:s3.us-east-1.amazonaws.com/bucket-name init安装方面按发行版走官方源即可:apt install restic(Debian/Ubuntu)、brew install restic(macOS)、winget install restic.restic(Windows),或拉取官方二进制包。
日常操作
restic backup /data /home # 增量备份,未变化的块自动跳过restic snapshots # 按时间列出所有快照restic restore latest:/data/docs --target /mnt/restore # 指定路径恢复排除规则写在备份根目录的.resticignore中即可,支持**/node_modules、*.log这类 glob 写法,比命令行传一串--exclude好维护。
数据瘦身
保留策略的主线是forget:先按周期规则删除过期快照,再清理无引用的数据块。forget本身只删快照元数据,必须追加--prune才真正回收存储空间。
restic forget \ --keep-daily 7 \ --keep-weekly 4 \ --keep-monthly 6 \ --tag critical \ --prune日常 7 份、每周 4 份、每月 6 份是常见的起步组合,--tag用于把关键机器的快照永久留档。
无人值守
把备份、清理、校验合并进一个 crontab 条目,日志重定向到文件,每月加一次完整数据校验:
0 3 * * * restic backup /data /home >> /var/log/restic.log 2>&1 0 4 * * * restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune >> /var/log/restic.log 2>&1 0 9 1 * * restic check --read-data >> /var/log/restic.log 2>&1check默认只做结构校验,--read-data会读取并解码全部数据块,耗时较长,放在月末跑一次即可。
🔐 安全底座
restic 用 scrypt 从仓库密码派生密钥,再以 AES-256 加密仓库内全部对象;仓库目录拷走也解不开。密钥管理只需两条命令:
restic key list # 列出仓库中的全部密钥 restic key passwd # 修改仓库密码密码丢失且没有其他密钥文件时仓库不可恢复,密码与密钥文件必须异地保管。
踩坑速查
| 现象 | 原因 | 处理命令 |
|---|---|---|
| 备份报 repository corrupted | 索引或 pack 损坏 | restic repair index |
repository locked | 上次进程异常退出残留锁 | restic unlock |
| 网络后端上传慢 | 并发与带宽未调 | 加--limit-upload 10 --limit-download 100 |
| 仓库体积异常大 | 未执行 prune,死块滞留 | restic prune |
| 密码忘且无备份密钥 | 密钥文件未留存 | 数据不可恢复,只能重建仓库 |
收尾
restic 把增量去重、全仓库加密和多后端抽象成了一条命令的代价,日常只需要 backup、forget、check 三个动作。把保留策略和 crontab 配好后,它可以在无人参与的情况下长期运转。建议把本文的 5 个动作固化成 runbook,并对密钥文件做异地备份。延伸阅读:初始化仓库、故障排除。
【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考