运维知识
悠悠
2025年9月23日

这个开源备份神器,让我彻底告别了数据丢失的噩梦!

最近个人博客又出了点小状况,虽然没什么大问题,但是让我想起了以前那次惨痛的经历...当时因为没有做备份,加上博客后台是弱密码被人爆破后把数据都删了,欲哭无泪,还好本地都有数据。后来经过各种折腾和调研,我发现了Restic这个宝藏工具,用了一段时间了,今天想跟大家分享一下我的使用心得。

说实话,市面上的备份工具真的太多了,从传统的rsync到商业化的Veeam,每个都有自己的特点。但是Restic给我的感觉就是——简单、可靠、还免费。这不就是我们运维人员梦寐以求的吗?

项目地址:https://github.com/restic/restic

为什么选择Restic

我之前用过不少备份工具,tar、rsync、Bacula等等,每个都有各自的问题。tar太简单粗暴,rsync虽然好用但是版本管理麻烦,Bacula配置复杂得要命...直到遇到了Restic。

Restic是用Go语言写的,这意味着什么?单个二进制文件,跨平台,部署简单到爆。我记得第一次安装的时候,就是下载一个文件,chmod +x,然后就能用了,那种感觉真的很爽。

而且它支持的存储后端特别多,本地磁盘、SFTP、Amazon S3、Google Cloud Storage、Azure、甚至还支持REST API。这意味着你可以把备份存到几乎任何地方,灵活性非常高。

最重要的是,Restic的去重和加密功能做得相当不错。每次备份只会存储变化的部分,而且所有数据都是加密存储的,安全性有保障。

安装配置,真的很简单

安装Restic真的没什么好说的,简单到让人怀疑人生。

在Ubuntu上:

sudo apt update
sudo apt install restic

在CentOS上:

sudo yum install epel-release
sudo yum install restic

或者直接下载二进制文件:

wget https://github.com/restic/restic/releases/download/v0.16.2/restic_0.16.2_linux_amd64.bz2
bunzip2 restic_0.16.2_linux_amd64.bz2
chmod +x restic_0.16.2_linux_amd64
sudo mv restic_0.16.2_linux_amd64 /usr/local/bin/restic

下的有点慢。。。

image-20250923220632175

安装完成后,第一步是初始化一个仓库。我一般习惯把备份存到单独的磁盘或者远程服务器上:

export RESTIC_REPOSITORY=/backup/restic-repo
export RESTIC_PASSWORD=your-super-secret-password
restic init

image-20250923221101760

这里有个小技巧,密码最好设置复杂一点,因为一旦忘记了,备份数据就真的找不回来了。我一般会把密码写到一个文件里:

echo "your-super-secret-password" > ~/.restic-password
chmod 600 ~/.restic-password
export RESTIC_PASSWORD_FILE=~/.restic-password

基础使用,上手就会

初始化完仓库后,就可以开始备份了。最基本的备份命令:

restic backup /home /etc /var/log

这条命令会备份/home、/etc和/var/log这三个目录。第一次备份会比较慢,因为要上传所有文件,但是后续的增量备份就很快了。

image-20250923221132935

我在实际使用中,一般会配合一些参数:

restic backup /home /etc /var/log \
  --exclude="*.tmp" \
  --exclude="/home/*/.cache" \
  --exclude="/var/log/*.log.gz" \
  --tag daily

--exclude参数可以排除一些不需要备份的文件,比如临时文件、缓存文件等。--tag参数可以给备份打标签,方便后续管理。

image-20250923221148286

查看备份快照:

restic snapshots

这会列出所有的备份快照,包括时间、标签、备份的路径等信息。输出大概是这样的:

ID        Time                 Host        Tags        Paths
----------------------------------------------------------------------
4bba301e  2024-01-15 09:30:25  server01    daily       /home, /etc, /var/log
8f2c9d1a  2024-01-16 09:30:25  server01    daily       /home, /etc, /var/log

image-20250923221203244

恢复数据,关键时刻不掉链子

备份的最终目的还是为了恢复,Restic的恢复功能也很强大。

恢复整个快照:

restic restore 06b83f52 --target /restore

这会把快照06b83f52的所有内容恢复到/restore目录下。

image-20250923221240116

如果只想恢复特定的文件或目录:

restic restore 06b83f52 --target /restore --include "/home/user/important.txt"

还有一个很实用的功能是mount,可以把备份快照挂载为文件系统:

mkdir /mnt/restic
restic mount /mnt/restic

这样你就可以像浏览普通文件夹一样查看所有的备份快照,非常方便。

image-20250923221457876

我记得有一次,我不小心删了一个重要的配置文件,用这个mount功能,几分钟就找到了前一天的版本,直接复制出来就解决了问题。那种感觉真的很爽(备份是是最后的保命方式,所以一定要做好备份!!!

高级功能,让备份更智能

Restic还有一些高级功能,用好了能大大提升备份的效率和可靠性。

自动清理旧备份

备份时间长了,快照会越来越多,占用的空间也会越来越大。Restic提供了forget命令来自动清理旧备份:

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --keep-yearly 3

这条命令会保留最近7天的每日备份、最近4周的每周备份、最近12个月的每月备份,以及最近3年的每年备份。其他的快照会被标记为删除。

但是注意,forget只是标记删除,真正释放空间还需要运行prune命令:

restic prune

备份验证

定期验证备份的完整性是个好习惯,Restic提供了check命令:

restic check

这会检查仓库的完整性,确保备份数据没有损坏。我一般会在每周的维护窗口期运行一次。

还可以验证备份数据的内容:

restic check --read-data

这会读取所有的备份数据进行验证,比较耗时,但是更彻底。

多仓库管理

如果你管理多台服务器,可能需要为每台服务器创建单独的备份仓库。这时候可以用配置文件来管理:

# ~/.config/restic/server01.conf
export RESTIC_REPOSITORY=/backup/server01
export RESTIC_PASSWORD_FILE=~/.restic-password-server01

# ~/.config/restic/server02.conf
export RESTIC_REPOSITORY=sftp:backup-server:/backup/server02
export RESTIC_PASSWORD_FILE=~/.restic-password-server02

使用时:

source ~/.config/restic/server01.conf
restic backup /home /etc

实战经验分享

用了这么久Restic,踩过一些坑,也总结了一些经验,分享给大家。

性能优化

Restic默认的并发度可能不够高,可以通过环境变量调整:

export GOMAXPROCS=4  # 使用4个CPU核心

如果备份到远程存储,可以调整连接数:

restic backup /data -o s3.connections=10

对于大文件比较多的场景,可以调整分块大小:

restic backup /data -o pack-size=32

网络备份的坑

我之前用Restic备份到阿里云OSS,经常遇到网络超时的问题。后来发现可以通过调整重试参数来解决:

restic backup /data -o s3.max-retries=10 -o s3.timeout=300s

还有一个经验是,如果网络不稳定,可以先备份到本地,然后再同步到远程:

# 本地备份
restic -r /local/backup backup /data

# 同步到远程
restic -r /local/backup copy --repo2 s3:bucket/backup

监控和报警

生产环境中,备份任务的监控很重要。我一般会写个简单的脚本来检查备份状态:

#!/bin/bash
LATEST=$(restic snapshots --json | jq -r '.[0].time')
LATEST_TIMESTAMP=$(date -d "$LATEST" +%s)
NOW_TIMESTAMP=$(date +%s)
DIFF=$((NOW_TIMESTAMP - LATEST_TIMESTAMP))

if [ $DIFF -gt 86400 ]; then  # 超过24小时没有备份
    echo "WARNING: Last backup is older than 24 hours"
    # 发送报警邮件或钉钉消息
fi

加密密钥管理

Restic的加密密钥管理一直是个头疼的问题。密钥太简单不安全,太复杂容易忘记。我现在的做法是用密钥管理工具,比如HashiCorp Vault:

export RESTIC_PASSWORD=$(vault kv get -field=password secret/restic/server01)

或者用云服务商的密钥管理服务,比如AWS KMS、阿里云KMS等。

容器化部署

现在很多服务都容器化了,Restic也可以在容器中运行。我写了个简单的Dockerfile:

FROM alpine:latest

RUN apk add --no-cache restic

COPY backup.sh /backup.sh
RUN chmod +x /backup.sh

CMD ["/backup.sh"]

然后用docker-compose部署:

version: '3'
services:
  restic-backup:
    build: .
    volumes:
      - /data:/data:ro
      - /backup:/backup
    environment:
      - RESTIC_REPOSITORY=/backup/restic-repo
      - RESTIC_PASSWORD_FILE=/backup/.restic-password
    restart: unless-stopped

这样就可以把备份任务容器化了,管理起来更方便。

性能调优分享

Restic的性能调优主要从几个方面入手:

CPU和内存

# 根据服务器配置调整
export GOMAXPROCS=4  # CPU核心数
export GOGC=20       # 降低GC频率,减少内存占用

网络优化

# S3存储优化
restic backup /data \
  -o s3.connections=10 \
  -o s3.max-retries=5 \
  --limit-upload 50000  # 50MB/s

存储优化

# 调整pack大小,适合大文件场景
restic backup /data -o pack-size=64

# 调整压缩级别
restic backup /data -o compression=max

我在一台16核64GB内存的服务器上,经过调优后,备份1TB数据的时间从原来的8小时缩短到了4小时。

灾难恢复演练

备份做得再好,如果不能正常恢复,那就是白搭。我建议定期做灾难恢复演练。

我们公司每个季度都会做一次演练,流程大概是这样的:

  1. 准备一台干净的测试服务器
  2. 从备份中恢复关键数据和配置
  3. 启动关键服务,验证功能
  4. 记录恢复时间和遇到的问题
  5. 优化恢复流程

有一次演练中,我们发现数据库恢复后索引损坏了,后来才知道是因为备份时数据库还在运行。从那以后,我们改成了先停止数据库服务,再进行备份。

成本控制

虽然Restic本身是免费的,但是存储成本还是需要考虑的,特别是使用云存储时。

存储分层

我现在的策略是这样的:

  • 最近30天的备份存储在高性能SSD上
  • 30天到1年的备份存储在普通硬盘上
  • 1年以上的备份存储在冷存储中

可以用Restic的copy命令来实现:

# 将旧备份迁移到冷存储
restic copy --repo2 s3:cold-bucket/backup \
  --keep-within 30d

压缩优化

Restic支持多种压缩算法,可以根据数据特点选择:

# 文本文件多的场景
restic backup /data -o compression=max

# 已压缩文件多的场景
restic backup /data -o compression=off

通过合理的压缩设置,我们的备份大小减少了约30%。

未来规划

Restic还在持续发展中,我比较期待的几个功能:

  1. 增量备份优化:目前的增量备份还有优化空间,特别是对于大文件的处理
  2. Web界面:虽然命令行很强大,但是有个Web界面会更方便管理
  3. 更好的监控集成:希望能原生支持Prometheus等监控系统
  4. 性能提升:在处理大量小文件时的性能还有提升空间

不过即使是现在的版本,对于大部分使用场景来说也已经足够好用了。

写在最后

用了这么久Restic,我觉得它最大的优点就是简单可靠。安装简单、配置简单、使用简单,但是功能一点都不简单。去重、加密、多后端支持、跨平台,该有的功能都有。

当然,它也不是完美的。比如没有GUI界面,对新手不够友好;大文件备份时内存占用比较高;恢复大量小文件时速度不够快等等。但是瑕不掩瑜,对于大部分使用场景来说,Restic都能很好地胜任。

特别是对于中小企业来说,Restic提供了一个成本低廉但功能强大的备份解决方案。我见过太多因为备份策略不当而导致数据丢失的案例,真的很痛心。

如果你还在为备份方案发愁,不妨试试Restic。相信我,用过之后你会爱上它的。当然,工具只是手段,重要的是要建立完善的备份策略和流程。

最后提醒一下,备份策略很重要,但是定期测试恢复更重要。再好的备份工具,如果关键时刻恢复不了数据,那就是白搭。所以,记得定期验证你的备份,确保在需要的时候能够成功恢复。

数据无价,备份有道。希望大家都能远离数据丢失的噩梦!


如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步!

公众号:运维躬行录

个人博客:躬行笔记

文章目录

博主介绍

热爱技术的云计算运维工程师,Python全栈工程师,分享开发经验与生活感悟。
欢迎关注我的微信公众号@运维躬行录,领取海量学习资料

微信二维码