概述
服务器数据丢了怎么办?很多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后端更是让备份摆脱了物理服务器的限制。
你的服务器有靠谱的备份方案吗?