Restic 是一款 Go 语言编写的开源备份工具,支持 AES-256 客户端加密、端到端去重、多后端存储。本地、SFTP、云服务全能备份,快照保留策略灵活,一个二进制跑遍 Windows/macOS/Linux/FreeBSD,适合个人和团队使用,部署维护成本极低。

🎤 引言

数据丢失这种事,要么不发生,一旦发生就是灾难。我见过太多人辛苦几年攒下来的代码、照片、项目文档,因为一次断电、误删、硬盘报废,全没了。备份这件事,说起来都知道重要,做起来总觉得麻烦——要不就是买服务月月扣费,要不就是搭一套复杂的备份系统然后懒得维护。

Restic 这个工具解决的就是这个矛盾。它是一个用 Go 写的开源备份程序,最大的特点就是简单:一个二进制文件,跑在 Windows、macOS、Linux、FreeBSD 上都能用;加密、去重、云端存储、多快照管理,该有的全有;命令就那么几个,学会 five 分钟,记住能用一辈子。

根据 GitHub 页面,Restic 已经有 34k+ Stars、1.8k+ Forks、9700+ Commits,在开源备份工具里属于妥妥的头部项目。作者在 README 里明确写了设计原则:简单、安全、快速。实际用下来,这三点基本都做到了。


⭐ 核心功能

1. 端到端加密——数据在本地就锁了

Restic 使用 AES-256-PRISTINE 加密,密钥由用户密码通过 restic 内部算法派生。这意味着备份传到任何存储后端(哪怕是公有云),数据本身是加密的,服务端看到的是乱码,只有持有正确密码才能解密还原。

这个加密是客户端独立完成的,和后端存储无关。哪怕有人直接拖走你的 S3 Bucket 或 Backblaze B2 数据,他也打不开。这是它和很多商业备份工具拉开差距的地方——安全和后端无关。

2. 去重存储——同一个文件只存一份

Restic 实现的是内容定义分块(content-defined chunking),简单说就是它把文件切成大小不一的块,每个块计算 SHA-256 哈希做去重。相同内容的块不管在哪个快照里,都只会在仓库里存一份。

实际效果就是:第一次完整备份可能跑得久,但后续增量备份非常快,而且相同文件多的场景(比如每天备份同一个代码仓库)存储空间节省明显。跨平台去重也支持,同一个文件在 Windows 和 macOS 上备份,如果内容相同,也会识别为同一个块。

3. 多后端存储——想放哪放哪

Restic 支持的后端存储类型相当全:

  • 本地目录:最简单,直接挂个硬盘或 NAS 路径
  • SFTP:通过 SSH 连接到远程机器备份
  • Amazon S3 / MinIO:兼容 S3 协议的任何对象存储
  • Backblaze B2:性价比高的云存储
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • REST Server:官方提供的轻量自建服务
  • 通过 rclone 桥接:支持 S3 以外几乎所有云服务

一套命令走天下,换后端只要改 RESTIC_REPOSITORY 环境变量,其他不变。

4. 快照管理——每个备份都是一个版本

每次 restic backup 执行都会生成一个快照(Snapshot),快照之间相互独立,可以随时查看历史、恢复任意时间点的文件。快照通过 restic snapshots 列出,通过 restic restore 恢复到指定路径。

保留策略(Retention Policy)通过 restic forget --prune 实现,可以按天、按周、按月自动清理旧快照,保留规则灵活设置。比如 --keep-daily 7 --keep-weekly 4 --keep-monthly 6 这种配置,大多数场景够用。

5. 挂载查看——不用解压也能浏览快照

restic mount 可以把快照通过 FUSE 挂载成本地目录,直接用文件管理器浏览历史版本,和翻普通文件夹一样。临时需要从旧版本里捞一个文件,不用全量还原,直接挂载找出来复制走就行。


📥 安装与使用

安装——一个二进制就够了

Linux / macOS / FreeBSD:

# 官方脚本一键安装
sudo bash < <(curl -L https://get.restic.org)

# 或者用包管理器
# Arch
sudo pacman -S restic
# macOS
brew install restic

Windows:

# 用 scoop 安装
scoop install restic

# 或者直接下载二进制,添加到 PATH

Docker:

# 如果不想在主机装,可以用 Docker 运行
docker run --rm -v $HOME/.restic:/root/.restic     -v /path/to/backups:/backup     restic/restic:latest backup /backup -r /root/.restic

快速上手五步走

第一步:初始化仓库

restic init --repo /mnt/backup/restic-repo
# 输入两次密码,仓库就建好了

# 或者环境变量方式
export RESTIC_REPOSITORY=/mnt/backup/restic-repo
export RESTIC_PASSWORD=your-password-here
restic init

第二步:执行第一次备份

restic backup /path/to/important-files     --repo /mnt/backup/restic-repo     --password-file /path/to/passfile

第三步:查看快照

restic snapshots --repo /mnt/backup/restic-repo

第四步:恢复文件

# 恢复最新快照到指定目录
restic restore latest --target /restore/path     --repo /mnt/backup/restic-repo

# 从某个快照恢复单个文件
restic restore <snapshot-id> --target /restore/path     --path /specific/file.txt     --repo /mnt/backup/restic-repo

第五步:配置保留策略

# 查看快照但不打标签
restic forget --repo /mnt/backup/restic-repo     --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

云后端使用示例(S3 兼容):

export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret
export RESTIC_REPOSITORY=s3:s3.amazonaws.com/bucket-name/restic
export RESTIC_PASSWORD=your-password

restic backup /data --repo $RESTIC_REPOSITORY

🎯 适用场景

个人数据备份

如果你有重要的照片、项目文档、工作文件需要定期备份,Restic 加一块外接硬盘或一个 S3 存储桶,比买订阅服务划算得多。初始化一次,crontab 里加一条每天定时执行,连维护成本都几乎为零。

服务器容灾备份

在 VPS 或物理机上跑的数据库、配置文件、网站数据,用 Restic 备份到另一台机器的 SFTP 或者对象存储,是很多运维团队的选择。加密传输,仓库独立于源机器,不占用源服务器太多资源。

开发团队代码备份

很多团队会把代码放 Git,但 Git 历史被误操作覆盖的情况并不少见。用 Restic 对代码目录做定时全量备份,配合快照和保留策略,可以在本地或云端保留多个历史版本,恢复时不需要折腾 Git 工具。

跨平台数据同步

在 Windows 和 Linux 双环境工作的开发者,经常会遇到两边的文档需要分别备份。Restic 的去重对跨平台有效,同一台机器上相同内容的文件,备份时会自动识别为同一数据块,不需要手动处理。


🔍 对比同类工具

工具加密去重后端支持CLI 复杂度Windows 支持
ResticAES-256 客户端内容分块S3/B2/SFTP/local 等 12 种优秀
BorgBackupAES 客户端文件级local/SFTP差(依赖第三方)
KopiaAES-256 客户端内容分块S3/B2/Azure/local 等低(有 GUI)优秀
DuplicatiTLS 传输加密增量丰富中(有 Web UI)优秀

Restic 和 Kopia 功能最像,但 Restic 的 CLI 更简洁、社区更成熟(Stars 多出一倍),Kopia 的优势是有官方 GUI 和 API/SDK 更适合集成到已有系统。

Borg 在 Linux 圈口碑很好,但 Windows 支持是硬伤;Duplicati 有 Web UI 但配置相对麻烦不少。


⚠️ 注意事项

密码丢失数据无法恢复

Restic 的加密是客户端独立的,密码是唯一解锁密钥。没有"找回密码"机制,密码一旦丢失,备份数据彻底无法恢复。在生产环境使用,建议用 password-file 配合密钥管理工具(如 1Password、Bitwarden)存储密码,或者把密码文件放到和安全地分开的地方。

备份验证不能省

restic check 是定期检查仓库完整性的命令,建议每隔一段时间跑一次。它会读取所有数据块并校验哈希,发现存储层损坏可以及时发现,而不是等到真正需要恢复时才发现。

restic check --read-data --repo /mnt/backup/restic-repo

注意:--read-data 会完整读取所有数据,耗时较长、生产环境建议加 --read-data-subset 分批执行。

大仓库 checkprune 较慢

随着快照增加,restic checkrestic prune(清理孤立数据块)会越来越慢,因为需要扫描整个仓库。如果仓库TB级规模,考虑定期重建仓库而不是长期无限积累快照,合理的保留策略可以显著控制仓库大小。

增量备份不等于实时备份

Restic 是按需增量备份,不是实时文件系统监控。如果需要接近实时的备份,Restic 本身不提供这个功能,需要配合 inotify watcher 或商业备份服务来做连续数据保护(CDP)。


✅ 总结

Restic 是一个把"数据备份"这件事做得很彻底的开源工具。加密、去重、多后端、快照管理、挂载查看,这些核心功能一个不缺;安装简单、命令直观、跨平台统一体验,这些让实际使用门槛很低。

它的优势很清楚:Go 写的单二进制、绿色免安装、社区活跃(34k Stars 说明质量)、后端支持广、加密和去重都是原生实现不需要额外配置。

需要注意的是密码管理、定期 check 验证、以及大仓库的性能问题。对于个人用户和小团队来说,Restic 基本上是"设好策略就不用管"的那种工具——备份可靠、恢复简单、存储成本可控。

推荐指数:★★★★★(适合所有需要可靠备份的人)

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