一个命令,万无一失——你的数据值得更好的守护


前言

数据备份这件事,说起来简单做起来难。市面上工具虽多,但要么配置复杂,要么速度感人,要么价格劝退。

今天介绍的开源备份工具 Restic,号称"备份界的瑞士军刀"——快速、安全、跨平台、支持多种存储后端,而且完全免费。

先看几个亮点:

  • 增量备份 + 去重:只传变化的数据,节省带宽和存储
  • 端到端加密:数据在客户端加密后再上传,服务商也看不到你的数据
  • 多后端支持:本地目录、SFTP、S3、MinIO、Azure、Google Cloud 等
  • 恢复灵活:可恢复整个快照,也可挂载为文件系统按需提取
  • 全平台覆盖:Linux、macOS、Windows 统统支持

一、安装 Restic

Restic 的安装方式非常灵活,几乎覆盖了所有主流平台。

1. Linux 发行版

发行版 命令
Debian / Ubuntu sudo apt-get install restic
Fedora / RHEL sudo dnf install restic
Arch Linux sudo pacman -S restic
openSUSE sudo zypper install restic
Alpine Linux apk add restic

2. macOS

brew install restic

3. Windows

winget install --exact --id restic.restic --scope Machine
# 或
scoop install restic

4. Docker

docker pull restic/restic

5. 官方二进制(推荐)

GitHub Releases 下载对应平台的预编译二进制,解压后直接使用:

# Linux 示例
wget https://github.com/restic/restic/releases/download/v0.17.0/restic_0.17.0_linux_amd64.bz2
bunzip2 restic_0.17.0_linux_amd64.bz2
chmod +x restic_0.17.0_linux_amd64
sudo mv restic_0.17.0_linux_amd64 /usr/local/bin/restic

安装后验证:

restic version

小贴士:使用 restic self-update 可一键升级到最新版。


二、核心概念:仓库(Repository)

在开始之前,需要理解 Restic 的核心概念——仓库(Repository)

仓库是 Restic 存储备份数据的地方,包含加密后的文件、元数据和索引。访问仓库需要密码——这个密码极其重要,密码丢失 = 数据永远丢失,没有找回途径。

仓库的初始化命令格式:

restic init --repo <仓库位置>

密码可以通过以下方式提供(按优先级排序):

  • 环境变量 RESTIC_PASSWORD
  • 密码文件 --password-file
  • 密码命令 --password-command
  • 交互式输入

重要提醒:Restic 0.17.0 起默认禁止空密码仓库。如果确实需要(不推荐),请添加 --insecure-no-password 参数。


三、场景一:Local 本地仓库

本地仓库是最简单的使用方式,适合个人电脑备份或局域网内的备份服务器。

1. 初始化本地仓库

restic init --repo /data/backup/restic-repo

系统会提示输入两次密码,成功后会显示:

created restic repository 6ab04a4c6a at /data/backup/restic-repo
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.

2. 创建备份

备份 /home/user/documents 目录到本地仓库:

restic --repo /data/backup/restic-repo backup /home/user/documents

加上 --verbose 参数查看详细进度:

restic --repo /data/backup/restic-repo --verbose backup /home/user/documents

首次备份会扫描并上传所有文件。再次运行时,Restic 会自动检测未变化的数据,实现增量备份

using parent snapshot 40dc1520
no new data was added to the repository

3. 添加标签管理

为备份打上标签,方便后续管理:

restic --repo /data/backup/restic-repo backup --tag projectX --tag weekly /home/user/documents

4. 排除不需要的文件

Restic 提供了丰富的排除规则:

# 排除 .log 文件
restic --repo /data/backup/restic-repo backup --exclude="*.log" /home/user

# 从文件读取排除规则
restic --repo /data/backup/restic-repo backup --exclude-file=exclude.txt /home/user

# 排除缓存目录
restic --repo /data/backup/restic-repo backup --exclude-caches /home/user

# 排除大于 100MB 的文件
restic --repo /data/backup/restic-repo backup --exclude-larger-than 100M /home/user

exclude.txt 文件示例:

*.tmp
*.log
node_modules/
.cache/
.DS_Store

5. 列出快照

restic --repo /data/backup/restic-repo snapshots

输出示例:

repository 6ab04a4c6a opened successfully, password is correct
ID        Time                 Host        Tags        Paths
─────────────────────────────────────────────────────────────────
b023d7a3  2026-06-05 10:00:00  my-pc       projectX    /home/user/documents
40dc1520  2026-06-04 18:30:00  my-pc       weekly      /home/user/documents

6. 恢复数据

恢复整个快照:

restic --repo /data/backup/restic-repo restore b023d7a3 --target /tmp/restore

恢复最新快照:

restic --repo /data/backup/restic-repo restore latest --target /tmp/restore

选择性恢复:

# 只恢复特定目录
restic --repo /data/backup/restic-repo restore latest --target /tmp/restore --include /work

# 恢复快照中的特定子目录
restic --repo /data/backup/restic-repo restore b023d7a3:/work --target /tmp/restore

覆盖行为控制:

# 只恢复比本地更新的文件
restic --repo /data/backup/restic-repo restore latest --target /tmp/restore --overwrite if-newer

# 从不覆盖已有文件
restic --repo /data/backup/restic-repo restore latest --target /tmp/restore --overwrite never

7. 挂载为文件系统(FUSE)

如果想像浏览普通文件夹一样查看备份内容:

mkdir /mnt/restic
restic --repo /data/backup/restic-repo mount /mnt/restic

挂载后就可以直接在文件管理器中浏览和复制文件了。

对于大量文件的恢复场景,官方建议使用 restore 命令而非 mount,因为 restore 通常快得多

8. 比较快照差异

restic --repo /data/backup/restic-repo diff b023d7a3 40dc1520

输出中的符号含义:

  • + 新增文件
  • - 删除文件
  • M 内容修改
  • U 元数据修改(权限、时间戳等)

9. 清理旧快照

Restic 不会自动删除旧快照,需要手动或通过策略清理。

策略化删除:

restic --repo /data/backup/restic-repo forget \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune

这个命令的意思是:

  • 保留过去 7 天的每日快照
  • 保留过去 4 周的每周快照
  • 保留过去 6 个月的每月快照
  • --prune 在删除快照后立即清理未引用的数据

建议在 prune 后运行 restic check 检查仓库完整性:

restic --repo /data/backup/restic-repo check

10. 查看仓库状态

restic --repo /data/backup/restic-repo stats

四、场景二:MinIO 对象存储

MinIO 是一个开源的高性能对象存储系统,兼容 Amazon S3 API。通过 MinIO,你可以搭建属于自己的私有云备份方案。

1. 部署 MinIO

使用 Docker 快速部署:

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /data/minio:/data \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=YourPassword123" \
  quay.io/minio/minio server /data --console-address ":9001"

访问 http://localhost:9001 即可进入 MinIO 管理控制台。

2. 创建存储桶

在 MinIO 控制台中创建一个名为 restic-backup 的存储桶(Bucket),或者使用命令行:

mc alias set myminio http://localhost:9000 admin YourPassword123
mc mb myminio/restic-backup

3. 配置环境变量

export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=YourPassword123
# 将仓库地址写入环境变量,后续命令更简洁
export RESTIC_REPOSITORY=s3:http://localhost:9000/restic-backup
export RESTIC_PASSWORD=your-strong-password

4. 初始化 MinIO 仓库

restic -r s3:http://localhost:9000/restic-backup init

5. 备份到 MinIO

restic -r s3:http://localhost:9000/restic-backup backup /home/user/documents

或者使用环境变量简化:

restic backup /home/user/documents

6. 从 MinIO 恢复

# 列出快照
restic snapshots

# 恢复
restic restore latest --target /tmp/restore

7. 远程 MinIO 场景

如果你的 MinIO 部署在远程服务器上,只需修改 URL 即可:

# 通过 API 端口访问
restic -r s3:https://minio.example.com:9000/restic-backup backup /home/user/documents

8. 备份 MySQL 数据库到 MinIO

结合 --stdin-from-command 可以备份数据库输出:

restic backup \
  --stdin-from-command \
  --stdin-filename production.sql \
  -- mysqldump --host localhost --all-databases -u root -p

五、常用命令速查表

操作 命令
初始化仓库 restic init --repo <路径>
创建备份 restic backup <目录>
列出快照 restic snapshots
恢复快照 restore <快照ID> --target <目录>
查看差异 restic diff <ID1> <ID2>
删除快照 forget <快照ID>
策略清理 forget --keep-daily 7 --keep-weekly 4 --prune
仓库检查 restic check
挂载仓库 restic mount /mnt/restic
文件搜索 restic find <文件名>
仓库统计 restic stats

六、最佳实践建议

1. 密码管理

# 不要交互输入,用环境变量或密码文件
export RESTIC_PASSWORD="your-strong-password"

# 或者使用密码文件
echo "your-strong-password" > ~/.restic-password
chmod 600 ~/.restic-password

2. 自动化备份脚本

#!/bin/bash
export RESTIC_REPOSITORY="s3:http://localhost:9000/restic-backup"
export RESTIC_PASSWORD="your-strong-password"

# 执行备份
restic backup /home/user/documents --verbose

# 清理旧快照
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6

# 回收空间
restic prune

# 检查仓库完整性
restic check

配合 cron 定时执行:

# 每天凌晨 2 点执行备份
0 2 * * * /home/user/backup-script.sh

3. 备份策略参考

  • 日常开发机:每日备份 + 保留 7 天日备份 + 4 周周备份
  • 重要服务器:每小时备份 + 保留 30 天日备份 + 12 月月备份
  • 归档数据:每周备份 + 长期保留

4. 定期检查

# 每周执行一次完整性检查
restic check --read-data

--read-data 会读取所有数据包进行校验,耗时较长但更彻底。


写在最后

Restic 是一个真正让人安心的备份工具——安装简单、命令直观、功能强大。无论你是个人用户想备份家庭照片,还是运维人员需要保护服务器数据,Restic 都能胜任。

它的设计哲学值得点赞:加密是你的、数据是你的、控制权也是你的。搭配 MinIO 搭建私有备份方案,既避免了云服务商的锁定,又享受了对象存储的可靠性。

数据无价,备份趁早。今天就开始用 Restic 保护你的数据吧!


如果你觉得这篇文章有帮助,欢迎点赞、转发支持!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐