restic 数据备份实战:3 分钟建好加密仓库,让备份每天自动跑
2026/9/1 10:38:26 网站建设 项目流程

restic 数据备份实战:3 分钟建好加密仓库,让备份每天自动跑

【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic

重装系统前,你想把家目录里的文档和配置先存一份;重装完成后,又希望能从中挑出某几个文件单独取回。restic 就是为这件事设计的:一个用 Go 编写的命令行数据备份工具,它把文件加密后写入一个仓库(repository,存放加密备份数据的存储位置),每备份一次就生成一个快照(snapshot,某时刻目录状态的记录),之后可以按整份、目录或单文件三种粒度取回。

为什么是 restic:去重、加密、抗中断 🔒

restic 和"复制一份压缩包"式的备份不同,差异在三个具体机制上。

  1. 内容寻址的去重与压缩,第二次备份几乎零流量。restic 把文件切成小块、按内容哈希存储,相同内容只存一份。官方文档给出的实测例子:首次备份 1.720 GiB 的数据,实际写入仓库 1.200 GiB,压缩后占 1.103 GiB;对同一目录立即再备一次,新增 0 B——没变化的块直接跳过。文件多、改动少的目录,备份速度和流量都会明显受益。
  2. 仓库整体加密,后端拿到的只是一堆密文。数据在上传前完成加密,仓库目录放在哪里(本地磁盘、对象存储、SFTP)都不影响安全性;丢失密码则数据无法解密,所以密码本身要当作密钥保管。仓库支持多个访问密钥,用restic key子命令添加、移除或改密,详见加密文档。
  3. 仓库格式抗中断。backupprune在任何时刻被打断都不会损坏仓库,最多需要手动释放一次锁。这对定时任务被 kill、网络断开的场景很重要。

五分钟完成第一次备份:选后端、init、backup

先决定仓库放在哪。仓库就是一个目录,本地路径直接可用;远端后端在-r参数里写协议前缀,例如sftp:user@host:/srv/restic-repos3:s3.us-east-1.amazonaws.com/bucketrest:http://host:8000/。以 S3 为例,先在控制台建一个空存储桶:

下面用本地目录/srv/restic-repo走最短路径:设置仓库位置与密码的环境变量,然后初始化仓库。

export RESTIC_REPOSITORY=/srv/restic-repo export RESTIC_PASSWORD=your-strong-password restic init

init只跑一次,成功后目录里会多出 key、config 等元数据文件。接下来备份第一个目录,并用snapshots验证:

restic backup ~/work restic snapshots

输出里每个快照有一个十六进制短 ID 和一条snapshot xxxx saved提示,看到它就说明这次备份落盘成功。备份过程中 restic 会实时报告扫描文件数、写入量;第一次是完整写入,第二次再跑backup会显示几乎不新增数据,这是去重在起作用。更多后端配置和排除规则见仓库准备文档与备份文档。

用 cron 让备份自动执行,forget 控制保留策略 💡

备份要长期运行,需要三件事:定时触发、控制体积、定期体检。

定时:把仓库密码写进一个仅属主可读的文件,用RESTIC_PASSWORD_FILE指向它,脚本里就不需要交互输入了:

restic backup ~/work restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune restic check

在 crontab 里加一行0 3 * * * /path/to/backup.sh即可每天凌晨三点执行。

保留策略forget--keep-*规则删除过期快照,--prune在其后再回收那些只被已删快照引用的数据块——只 forget 不 prune,仓库不会变小。注意 prune 期间仓库加锁,备份无法进行,所以把它排在每天备份之后的低峰时段。先用--dry-run跑一遍,确认要删的快照列表符合预期再真删。完整规则见forget 文档。

体检restic check校验元数据结构,加--read-data则把整个仓库读回来逐块验证,慢但彻底。prune 之后建议跑一次 check,确认内部结构没有受损。

真正用到备份的那一刻:三种恢复粒度

误删文件后,先用restic ls latestrestic find 文件名在快照里确认路径,然后按需要取回的粒度选一种方式:

restic restore latest --target /tmp/restore restic restore latest:/home/user/work --target /tmp/restore restic restore latest --target /tmp/restore --include /home/user/work/notes.txt

第一行恢复整份最新快照到/tmp/restore;第二行用快照:子目录语法只恢复其中某个目录;第三行用--include只恢复单个文件。三条命令都先落到--target指定的新目录,不会直接覆盖现有文件,确认无误后再手动归位。latest也可以换成具体快照 ID,配合--host--path筛选特定机器或路径的快照,详见恢复文档。

避坑清单:密码、快照膨胀、速度与损坏

  • 忘记仓库密码:密码即密钥,丢了数据无法恢复,init 之后立刻把密码存进密码管理器;多台机器访问同一仓库时,用restic key add添加独立密钥,比共享一个密码更好管理。
  • 快照越积越多、仓库只涨不缩:forget 必须搭配--prune才能真正回收空间;删除前先--dry-run预览。
  • 备份速度慢:第一次全量慢是正常的,之后增量只传变化块;仍偏慢时可临时调低--limit-upload并发或检查网络,压缩默认级别是 auto,一般无需手动干预。
  • 怀疑仓库数据损坏:先把整个仓库复制一份,再跑restic check --read-data定位;索引坏了用restic repair index重建,流程见排错文档。
  • 恢复时覆盖了原文件:restore 默认只写入--target目录,养成"先恢复到临时目录、核对后再移动"的习惯即可避免。

三步落地你的第一个 restic 备份

  1. 选一个仓库位置(本地目录或对象存储),restic init并保存好密码。
  2. 跑一次restic backup,用restic snapshots确认快照已生成。
  3. 把 backup、forget --prune、check 写进 crontab,让备份每天自己跑。

做完这三步,你就有了一个加密、去重、可自动维护的数据备份体系;剩下的finddiffcopy等命令,等真正用到时再查文档也不迟。

【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询