概述
VPS数据丢了怎么办?磁盘坏了、被黑了、误删了,哭都来不及。
普通备份方案要么太大(直接拷贝),要么太麻烦(手动打包上传)。BorgBackup是个开源备份工具,主打三个特点:去重压缩省空间、加密传输保安全、增量备份不重复。
这篇教程带你从零装好BorgBackup,配好定时自动备份,让你的数据万无一失。
准备工作
- 一台Ubuntu 22.04+或Debian 12+的VPS
- 一块额外的硬盘或挂载盘(用于存备份),至少和源数据一样大
- root权限或sudo权限
- 建议挂载盘格式化为ext4或xfs
先看看你的挂载盘在哪:
lsblk -f
df -h
假设你的备份盘挂载在 /backup,如果没有就创建:
sudo mkdir -p /backup
sudo chmod 755 /backup
步骤
第一步:安装BorgBackup
Ubuntu/Debian直接从仓库装:
sudo apt update
sudo apt install borgbackup -y
装完确认版本:
borg --version
# 应该看到类似 borg 1.2.x 的输出
如果你用的是CentOS/RHEL:
sudo dnf install borgbackup -y
第二步:初始化备份仓库
在挂载盘上创建一个Borg仓库:
borg init --encryption=repokey /backup/borg-repo
系统会提示你设置一个密码。这个密码是解密备份的唯一钥匙,丢了就全完了。记在密码管理器里。
初始化完成后,仓库目录结构长这样:
/backup/borg-repo/
├── config
├── keys
├── locks
└── segments
第三步:创建备份脚本
写一个脚本,方便以后一键执行:
sudo nano /usr/local/bin/borg-backup.sh
写入以下内容:
#!/bin/bash
# 备份源目录列表,每行一个
SOURCES=(
"/home"
"/etc"
"/var/www"
)
# 备份目标仓库
REPO="/backup/borg-repo"
# 生成备份名称,包含日期
DATE=$(date +%Y-%m-%d_%H%M%S)
NAME="backup-${DATE}"
echo "开始备份: ${NAME}"
# 逐个备份目录
for SRC in "${SOURCES[@]}"; do
if [ -d "$SRC" ]; then
borg create "${REPO}::${NAME}-${SRC##*/}" "$SRC"
echo "已备份: $SRC"
else
echo "跳过(不存在): $SRC"
fi
done
# 保留最近7天的每日备份
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 "$REPO"
echo "备份完成!"
保存后赋予执行权限:
sudo chmod +x /usr/local/bin/borg-backup.sh
测试运行一次:
sudo /usr/local/bin/borg-backup.sh
输入你之前设置的仓库密码,如果看到"备份完成"就说明成功了。
第四步:查看备份状态
列出所有备份:
borg list /backup/borg-repo
查看某个备份的内容:
borg list /backup/borg-repo::backup-2026-07-23_140000-home
查看备份占了多少空间:
borg info /backup/borg-repo
第五步:配置定时自动备份
用cron实现每天凌晨3点自动备份:
sudo crontab -e
加入这一行:
0 3 * * * /usr/local/bin/borg-backup.sh >> /var/log/borg-backup.log 2>&1
注意:cron环境下没有交互式输入密码的能力。有两种方案解决:
方案A:用SSH密钥免密访问远程仓库(推荐,更安全)
把备份仓库放在另一台机器上,通过SSH连接:
# 本地生成密钥(如果没有的话)
ssh-keygen -t ed25519 -f ~/.ssh/borg_backup_key -N ""
# 把公钥复制到备份服务器
ssh-copy-id -i ~/.ssh/borg_backup_key.pub user@备份服务器IP
然后修改脚本中的仓库路径为:
REPO="user@备份服务器IP:/backup/borg-repo"
方案B:用环境变量传密码(方便但安全性略低)
# 创建密码文件
echo "你的密码" | sudo tee /root/.borg-passphrase > /dev/null
sudo chmod 600 /root/.borg-passphrase
# 在脚本开头加上
export BORG_PASSPHRASE=$(cat /root/.borg-passphrase)
第六步:配置远程备份(可选但强烈建议)
单靠一台VPS不够保险。建议再找一台机器做远程备份:
# 在远程机器上初始化仓库
ssh remote-user@remote-server "mkdir -p /backup && borg init --encryption=repokey remote-user@remote-server:/backup/borg-repo"
# 从本地推送备份到远程
borg push --progress /backup/borg-repo remote-user@remote-server:/backup/borg-repo
验证
确认备份正常工作:
检查备份列表:
borg list /backup/borg-repo应该能看到刚创建的备份测试恢复单个文件:
# 创建一个临时目录
mkdir -p /tmp/borg-test
# 从备份中提取某个文件
borg extract /backup/borg-repo::backup-2026-07-23_140000-home/etc/hostname /tmp/borg-test/
# 查看提取的文件
cat /tmp/borg-test/hostname
能正常提取就说明备份和恢复都没问题。
- 检查cron日志:
tail -f /var/log/borg-backup.log
- 检查磁盘占用:
du -sh /backup/borg-repo
去重后的备份体积通常只有原始数据的10%-30%,非常省空间。
常见问题
Q: 忘记仓库密码怎么办?
A: 如果密码忘了,备份数据基本无法恢复。这是Borg的安全设计——没有后门。建议把密码存在可信的密码管理器中,并额外抄一份放在物理安全的地方。
Q: 备份失败了怎么排查?
A: 先手动运行脚本看报错:
sudo /usr/local/bin/borg-backup.sh
常见原因:挂载盘空间不足、源目录不存在、密码错误。用 borg check /backup/borg-repo 检查仓库完整性。
Q: 增量备份是怎么工作的?
A: Borg每次只备份发生变化的数据块。相同文件不会重复存储,所以第二次备份速度极快,通常只需几秒到几分钟。
Q: 能不能备份整个根目录?
A: 不建议。会备份太多不必要的东西(/proc、/sys、/dev等虚拟文件系统)。只备份你真正需要保留的数据。
Q: 备份文件能直接看吗?
A: 不能直接打开,必须通过Borg工具提取。这是加密仓库的设计,保证即使备份盘丢了,别人也打不开你的数据。
Q: 怎么迁移到新服务器?
A: 直接把 /backup/borg-repo 整个目录拷到新服务器就行。Borg仓库是 portable 的,换机器不用重新初始化。
BorgBackup用了一天时间帮我省了80%的备份空间。去重算法是真的猛,同样的网站代码备份三次,仓库只增大了不到一倍。
你的VPS做过备份了吗?没有的话今晚就动手吧。