Restic跨平台备份工具:从安装到S3对象存储一键配置

概述

服务器数据丢了怎么办?很多VPS用户只靠手动拷贝文件来备份,出了问题才追悔莫及。

Restic是个被低估的备份神器。它用Go语言写的,单二进制文件,不用装依赖。支持S3、SSH、B2等远程后端,自带AES-256加密,还能自动去重节省空间。

这篇教程带你从零装好Restic,配好S3存储后端,跑通第一次备份。

准备工作

  • 一台运行Ubuntu 20.04+或Debian 11+的VPS
  • root权限或sudo权限
  • 一个S3兼容的对象存储服务(AWS S3、Cloudflare R2、MinIO等)
  • 至少1GB磁盘空间用于测试
  • 已获取S3的Access Key和Secret Key

步骤

第一步:安装Restic

Restic提供预编译二进制文件,下载即用:

RESTIC_VERSION="0.18.0"
wget https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.tar.bz2
tar xjf restic_${RESTIC_VERSION}_linux_amd64.tar.bz2
sudo mv restic /usr/local/bin/
rm restic_${RESTIC_VERSION}_linux_amd64.tar.bz2

验证安装:

restic version

输出应该是 restic version 0.18.0 compiled with go1.23 on ...。

第二步:初始化仓库

Restic的仓库就是存放备份数据的地方。先用本地目录初始化一个测试仓库:

export RESTIC_PASSWORD="your-strong-backup-password"
restic -r /root/backups init

这里设置了一个环境变量 RESTIC_PASSWORD,所有备份都会用这个密码加密。密码别忘,丢了就恢复不了数据。

初始化完成后,/root/backups 目录下会生成一些索引文件。这些就是仓库的元数据。

第三步:配置S3后端

本地仓库只适合测试。生产环境建议用S3兼容存储:

export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="auto"

# 如果用的是Cloudflare R2
export AWS_ENDPOINT_URL_S3="https://account-id.r2.cloudflarestorage.com"

# 初始化S3仓库
restic -r s3:s3.amazonaws.com/your-bucket-name init

如果用Cloudflare R2(免费额度够个人用),命令类似:

restic -r s3:r2.cloudflarestorage.com/your-bucket-name init

Restic会自动在S3桶里创建 .restic 目录存放备份数据。

第四步:执行第一次备份

备份你的重要目录:

restic -r s3:s3.amazonaws.com/your-bucket-name backup /etc /home

这条命令会把 /etc 和 /home 两个目录打包加密上传到S3。Restic会自动检测哪些文件没变过,只上传新增或修改的部分。

首次备份完成后,看看仓库信息:

restic -r s3:s3.amazonaws.com/your-bucket-name stats

输出会显示仓库总大小、原始数据量、压缩后大小和去重比例。

第五步:设置定时备份

用cron实现每日自动备份:

crontab -e

加入这一行,每天凌晨3点执行备份:

0 3 * * * /usr/local/bin/restic -r s3:s3.amazonaws.com/your-bucket-name backup /etc /home --tag daily >> /var/log/restic-cron.log 2>&1

如果想每周保留一个完整快照,加一条周任务:

0 4 * * 0 /usr/local/bin/restic -r s3:s3.amazonaws.com/your-bucket-name backup /etc /home --tag weekly >> /var/log/restic-cron.log 2>&1

第六步:清理过期快照

Restic不会自动删旧备份。手动清理过期的快照:

# 查看现有快照
restic -r s3:s3.amazonaws.com/your-bucket-name snapshots

# 删除7天前的快照
restic -r s3:s3.amazonaws.com/your-backet-name forget --keep-daily 7 --keep-weekly 4 --prune

# --prune 参数才会真正释放存储空间,别忘了加

--keep-daily 7 表示保留最近7天的每日快照,--keep-weekly 4 保留最近4周的每周快照。

验证

备份做完后,做几个检查确认一切正常:

# 1. 查看最新快照
restic -r s3:s3.amazonaws.com/your-bucket-name snapshots

# 2. 列出某个快照里的文件
restic -r s3:s3.amazonaws.com/your-bucket-name ls latest

# 3. 测试恢复到临时目录
mkdir -p /tmp/restic-test
restic -r s3:s3.amazonaws.com/your-bucket-name restore latest -t /tmp/restic-test

# 4. 检查恢复的文件
ls /tmp/restic-test

如果 restore 出来的文件和源目录一致,说明备份完全可用。

常见问题

忘记备份密码怎么办?

很遗憾,Restic的加密是端到端的,官方也救不了你。密码必须自己记住。建议把密码存在密码管理器里,或者写在纸质笔记本上锁起来。

备份速度慢怎么办?

Restic默认并发数是4。可以调高:

restic -r s3:s3.amazonaws.com/your-bucket-name backup /data --concurrency 16

网络带宽够的话,调到16-32能明显提速。

怎么恢复单个文件?

不需要恢复整个仓库,Restic支持细粒度恢复:

restic -r s3:s3.amazonaws.com/your-bucket-name restore latest -i /etc/nginx/nginx.conf -t /tmp/

-i 参数指定要恢复的文件路径,只恢复这一个文件。

S3存储费用太高?

Restic的去重效果很好。同一份数据只存一份,修改过的部分增量存储。配合Cloudflare R2(无出站流量费),月费用基本可以忽略不计。

能不能备份MySQL数据库?

Restic本身不处理数据库事务。建议先用mysqldump导出再备份:

mysqldump --all-databases > /tmp/full-backup.sql
restic -r s3:s3.amazonaws.com/your-bucket-name backup /tmp/full-backup.sql

Restic的单二进制特性让它比 Borg 更容易部署。不用装Python依赖,不用配仓库格式,下载下来就能跑。S3后端更是让备份摆脱了物理服务器的限制。

你的服务器有靠谱的备份方案吗?

这篇文章对你有帮助吗?