OffshoreVps
安全2026年9月25日阅读约 6 分钟作者:OffshoreVps 团队

用 Restic 或 Borg 备份 VPS

加密、去重的备份到第二台服务器:restic 和 borg 命令、数据库转储、保留策略、计划任务以及测试恢复。

一份可以恢复的备份,决定了你是白忙一个下午,还是丢掉整个项目。基础 VPS 备份指南介绍了基本思路。本文更进一步,使用 restic 和 BorgBackup:这两个工具可以把加密、去重的备份存到第二台服务器或对象存储。

VPS 上的终端窗口,显示用 restic 或 borg 备份 VPS 所用的命令,以“sudo apt install -y restic”开头
本指南中你将在服务器上运行的那类命令。

为什么用 restic 或 borg 而不是直接复制

  • 去重。只存储更改过的数据,因此每日快照保持很小。
  • 加密。数据在离开你的服务器之前就已加密。
  • 快照。你可以恢复到过去任意一天的状态。
  • 验证。两个工具都可以检查仓库完整性。

二选一即可。Restic 简单,支持多种存储类型,包括 SFTP 和兼容 S3 的存储。Borg 非常高效,通过 SSH 连接到已安装 borg 的服务器。

把备份发送到哪里

永远不要把唯一的备份存放在同一台服务器上。使用另一个位置的第二台 VPS、兼容 S3 的存储桶或存储盒。配大磁盘的小型 VPS 是便宜的备份目标。请参阅 VPS 套餐。

Restic:设置

sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init

用一个很长的随机密码创建密码文件,并离线保存一份副本。没有这个密码,备份就无法恢复。

restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
本指南的步骤依次为:1. 为什么用 restic 或 borg 而不是直接复制;2. 把备份发送到哪里;3. Restic:设置;4. 数据库需要特别处理;5. 安排计划任务;6. 测试恢复
本指南的步骤,按顺序排列。

Borg:设置

sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check

用 borg key export 导出并保存仓库密钥。

数据库需要特别处理

不要复制正在运行的数据库文件。先转储,再备份转储文件:

mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz

安排计划任务

通过 systemd 定时器或 cron 运行备份。一条简单的 cron 行:

15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

失败时给自己发出告警,例如在脚本末尾加一个监控 ping。

测试恢复

restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test

不时在备用机器上测试一次真实的恢复。从未测试过的备份只是一种希望。