跳转至

Restic 增量加密备份

一句话概述:Restic 是用 Go 写的备份工具,支持增量备份和加密,能备份到本地/云存储/SFTP,恢复简单快速。

核心知识点

概念白话解释
Restic备份工具 = 加密的增量备份
Repository仓库 = 备份数据存放的地方
Snapshot快照 = 某一时刻的备份记录
Deduplication去重 = 相同数据只存一份
Encryption加密 = 备份数据全部加密

安装配置

# Linux
sudo apt install restic                                # Ubuntu/Debian

# macOS
brew install restic                                    # Homebrew

# 验证
restic version                                        # 查看版本

基本使用

# 1. 初始化备份仓库
restic init --repo /backup/my-repo                     # 本地目录
# 输入密码(用于加密,务必记住!)

# 2. 创建备份
restic -r /backup/my-repo backup /home/pweaz/项目       # 备份目录
restic -r /backup/my-repo backup /home/pweaz/Documents  # 再备份一个目录

# 3. 查看快照
restic -r /backup/my-repo snapshots                    # 列出所有快照

# 4. 恢复备份
restic -r /backup/my-repo restore latest --target /tmp/restore  # 恢复最新快照
restic -r /backup/my-repo restore abc123 --target /tmp/restore  # 恢复指定快照

# 5. 排除文件
restic -r /backup/my-repo backup /home/pweaz \
  --exclude="*.tmp" \                                  # 排除临时文件
  --exclude=".cache" \                                 # 排除缓存
  --exclude="node_modules" \                           # 排除 node_modules
  --exclude-file=.resticignore                         # 从文件读取排除规则

# 6. 清理旧快照
restic -r /backup/my-repo forget \
  --keep-last 5 \                                     # 保留最近5个
  --keep-daily 7 \                                    # 保留7天每天1个
  --keep-weekly 4 \                                   # 保留4周每周1个
  --keep-monthly 6 \                                  # 保留6个月每月1个
  --prune                                             # 实际删除数据

备份到云存储

# 备份到 S3(AWS/MinIO)
export AWS_ACCESS_KEY_ID=your-key                      # 设置密钥
export AWS_SECRET_ACCESS_KEY=your-secret
restic -r s3:s3.amazonaws.com/bucket-name init         # 初始化
restic -r s3:s3.amazonaws.com/bucket-name backup /data  # 备份

# 备份到 SFTP(远程服务器)
restic -r sftp:user@server:/backup/repo init           # 初始化
restic -r sftp:user@server:/backup/repo backup /data   # 备份

# 备份到 Rclone 支持的任何存储
restic -r rclone:remote:bucket/repo init               # 通过 rclone

自动定时备份

# 使用 cron 定时备份
crontab -e                                             # 编辑 cron

# 每天凌晨2点备份
0 2 * * * RESTIC_PASSWORD=xxx restic -r /backup/repo backup /home/pweaz --quiet

# 或使用 systemd timer(推荐)
# 创建 ~/.config/systemd/user/restic-backup.service
# 和 ~/.config/systemd/user/restic-backup.timer

常见报错

报错原因解决
wrong password密码错误确认仓库密码
repository does not exist仓库未初始化restic init --repo ...
unable to create lock上次备份异常中断restic unlock
insufficient permissions权限不足检查目录权限或用 sudo

速查表

# 核心命令
restic init --repo <path>                              # 初始化仓库
restic backup <path>                                   # 创建备份
restic snapshots                                       # 列出快照
restic restore <id> --target <path>                    # 恢复备份
restic forget --keep-last N --prune                    # 清理旧快照
restic check                                          # 检查仓库完整性
restic unlock                                         # 解除锁定
restic diff <id1> <id2>                               # 比较两个快照

# 环境变量(避免每次输密码)
export RESTIC_REPOSITORY=/backup/repo                  # 仓库路径
export RESTIC_PASSWORD=your-password                   # 密码
# 或 export RESTIC_PASSWORD_FILE=/path/to/password-file