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 resticWindows:
# 用 scoop 安装
scoop install restic
# 或者直接下载二进制,添加到 PATHDocker:
# 如果不想在主机装,可以用 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 支持 |
|---|---|---|---|---|---|
| Restic | AES-256 客户端 | 内容分块 | S3/B2/SFTP/local 等 12 种 | 低 | 优秀 |
| BorgBackup | AES 客户端 | 文件级 | local/SFTP | 中 | 差(依赖第三方) |
| Kopia | AES-256 客户端 | 内容分块 | S3/B2/Azure/local 等 | 低(有 GUI) | 优秀 |
| Duplicati | TLS 传输加密 | 增量 | 丰富 | 中(有 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 分批执行。
大仓库 check 和 prune 较慢
随着快照增加,restic check 和 restic prune(清理孤立数据块)会越来越慢,因为需要扫描整个仓库。如果仓库TB级规模,考虑定期重建仓库而不是长期无限积累快照,合理的保留策略可以显著控制仓库大小。
增量备份不等于实时备份
Restic 是按需增量备份,不是实时文件系统监控。如果需要接近实时的备份,Restic 本身不提供这个功能,需要配合 inotify watcher 或商业备份服务来做连续数据保护(CDP)。
✅ 总结
Restic 是一个把"数据备份"这件事做得很彻底的开源工具。加密、去重、多后端、快照管理、挂载查看,这些核心功能一个不缺;安装简单、命令直观、跨平台统一体验,这些让实际使用门槛很低。
它的优势很清楚:Go 写的单二进制、绿色免安装、社区活跃(34k Stars 说明质量)、后端支持广、加密和去重都是原生实现不需要额外配置。
需要注意的是密码管理、定期 check 验证、以及大仓库的性能问题。对于个人用户和小团队来说,Restic 基本上是"设好策略就不用管"的那种工具——备份可靠、恢复简单、存储成本可控。
推荐指数:★★★★★(适合所有需要可靠备份的人)