restic 是什么
restic 是 Go 编写的开源备份工具:仓库端全程加密,数据按内容寻址分块去重,每次备份都会生成一个快照,恢复时可按快照号或 latest 取回指定时间点的内容。仓库可以放在本地磁盘,也可以直接放到 S3、兼容对象存储、SFTP 或 REST 服务上,异地副本不需要额外同步工具。
基本信息
| 适用平台 | Linux / macOS / Windows / BSD,单文件二进制 |
|---|---|
| 仓库后端 | 本地目录、SFTP、REST、S3 兼容对象存储、Azure/GCS 等 |
| 加密方式 | 仓库口令派生密钥,数据与元数据加密后才上传,服务端看不到明文 |
| 口令来源 | RESTIC_PASSWORD 环境变量或 RESTIC_PASSWORD_FILE 文件,脚本中推荐用文件 |
典型使用场景
- 单机文件备份到对象存储:加密去重后上传,无需自建服务端
- 多主机共享一个仓库:每个主机一份快照,去重节省存储
- 按时间点恢复:用 snapshots 找到目标快照,restore 到临时目录比对
- 定期完整性校验:check --read-data 抽样读取数据块,发现静默损坏
- 跨环境迁移:在旧机备份、新机 restore,口令一致即可搬数据
初始化与备份
初始化与备份
# 口令放在受保护的文件里,避免出现在进程列表与历史记录中
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic -r /backup/restic init # 初始化本地仓库
restic -r s3:s3.amazonaws.com/my-bucket init # 或直接初始化到对象存储
restic -r /backup/restic backup /data /etc --exclude=/var/cache
# 查看已有快照与占用
restic -r /backup/restic snapshots
restic -r /backup/restic stats --mode raw-data恢复与校验
恢复与校验
# 恢复到指定目录并只取所需子路径
restic -r /backup/restic restore latest --target /restore --include /data/conf
# 结构校验(块引用、索引与快照元数据)
restic -r /backup/restic check
# 抽样读取真实数据块:10% 既能发现损坏又不必读全量
restic -r /backup/restic check --read-data-subset=10%
# 清理不再被引用的数据块,释放存储
restic -r /backup/restic forget --keep-daily 7 --keep-weekly 4 --prune常用子命令读法
| 子命令 | 作用 | 关键提示 |
|---|---|---|
| snapshots | 列出所有快照与时间、路径、主机 | 恢复前先确认目标时间点对应的快照 ID |
| restore | 把某快照内容还原到 --target 目录 | 默认覆盖目标路径下同名文件,先备好空间 |
| check | 校验仓库结构与索引一致性 | 不加 --read-data 时不会读取真实数据块 |
| check --read-data-subset | 随机读取指定比例数据块做校验 | 按仓库大小与带宽选择比例,长期任务可分批 |
| forget --prune | 按保留策略删除快照并回收空间 | prune 期间仓库锁定,避免与其他备份任务并发 |
去重按内容分块进行,多个主机备份同一份基础镜像或系统目录时节省效果明显;但仓库数据分块独立,不要用普通文件同步工具手动搬运仓库目录。
仓库口令没有任何找回通道:口令丢失等于所有备份永久不可读。口令要进密钥管理系统或纸质封存,并把恢复演练纳入例行检查。