服务器异地容灾备份住宅主机方案:住宅主机做异地容灾备份
为什么推荐用住宅主机做异地容灾备份
服务器数据存储在家里的住宅主机上,既能避开云存储的月费,又能获得物理隔离的安全感。异地容灾备份的关键是“异地”:主服务器在机房或云上,备份机放在家里或另一个城市。
这样即使主站瘫痪,你也能从家里快速恢复数据。
本文以最常见的 rsync + SSH 组合为例,带零基础用户从零搭建一套可执行方案。
前置准备:两台设备与网络互通
你需要准备:
- 主服务器:可以是云服务器、VPS 或办公室的 Linux 主机,已安装 rsync(几乎默认就有)。
- 住宅主机:家里一台 24 小时运行的 Linux 设备,比如树莓派、旧笔记本或 NAS(群晖/威联通也支持 SSH 和 rsync)。确保能通过公网 IP 或 DDNS 访问(下文会讲)。
- 网络出口:住宅主机的路由器需设置 端口转发(比如 22 端口映射到住宅主机 IP),并开启 DDNS,这样主服务器才能从外网连进来。
小提示:如果住宅主机没有公网 IP,可以考虑用 Tailscale 或 ZeroTier 组网,设备之间直接通过虚拟局域网通信,无需暴露端口,更安全。
本文以普通 DDNS + 端口转发为例。
核心操作:用 rsync 搭建异地备份通道
1. 在住宅主机上创建备份目录
登录住宅主机(SSH 或本地终端),执行:
sudo mkdir -p /backup/server_data
sudo chown -R $USER:$USER /backup/server_data
记下这个路径,后面会用。
2. 配置 SSH 免密登录
为了让主服务器能自动推备份,需要把主服务器的公钥放到住宅主机上。
在主服务器上生成密钥对(如果已有则跳过):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_backup -N ""
然后将公钥复制到住宅主机:
ssh-copy-id -i ~/.ssh/id_rsa_backup.pub backup_user@your-home-domain.com
替换 backup_user 为住宅主机上的实际用户名,your-home-domain.com 为 DDNS 地址。
输入一次密码后,后续登录就不需要密码了。
3. 编写备份脚本
在主服务器上创建脚本 /usr/local/bin/backup_to_home.sh:
#!/bin/bash
# 需要备份的目录(可以写多个,用空格隔开)
SOURCE_DIRS="/var/www /etc /home"
# 远程备份基目录
REMOTE_DIR="backup_user@your-home-domain.com:/backup/server_data"
# 执行 rsync 增量同步,保留文件权限和所有者
date +"%Y-%m-%d %H:%M:%S 开始备份"
for dir in $SOURCE_DIRS; do
rsync -avz --delete -e "ssh -i ~/.ssh/id_rsa_backup" $dir $REMOTE_DIR
if [ $? -eq 0 ]; then
echo "$dir 同步成功"
else
echo "$dir 同步失败" >&2
fi
done
date +"%Y-%m-%d %H:%M:%S 备份完成"
给脚本执行权限:sudo chmod +x /usr/local/bin/backup_to_home.sh。
这里的 --delete 参数表示与主服务器保持完全一致(远程端删除主服务器已不存在的文件)。
如果你只想增量备份历史版本,可以用 --link-dest 或改用 borgbackup,但 rsync 官方方案已经够用。
4. 设置定时任务
在主服务器上执行 crontab -e,添加以下行:
0 3 * * * /usr/local/bin/backup_to_home.sh >> /var/log/backup.log 2>&1
这样每天凌晨 3 点自动执行备份。
避坑提醒:权限、增量与安全
- SSH 端口转发安全:如果住宅主机公网暴露 22 端口,建议改用高端口(如 10022)或使用 fail2ban 防止暴力破解。
- 文件权限保留:rsync 的
-a参数会自动保留权限、时间戳、属主等信息,但要求远程用户有对应权限。如果远程用户不是 root,可能需要用sudo或修改/backup/server_data的所属用户。 - 增量 vs 全量:上面的脚本是增量同步(只传变化部分)。如果要保留多个时间点,可以使用 rsnapshot(基于 rsync 的快照工具)或 restic,更适合“容灾”场景——回到上周的版本。
- 网络中断处理:rsync 会重新连接并只传断点后的数据。为了更可靠,可以在脚本开头加
flock防止并发。 - 加密传输:SSH 本身加密,如果住宅主机在不可信网络,这就是最高安全的传输方式。如果还想对备份文件加密(防止住宅主机被物理窃取),可以先加密再传输,推荐 gpg 或 openssl。
效果验证:模拟故障恢复数据
查看备份日志确认无报错:
tail -f /var/log/backup.log
然后模拟主服务器数据丢失:在主服务器上删除一个文件(比如 /var/www/index.html),接着从住宅主机恢复:
rsync -avz --delete -e "ssh -i ~/.ssh/id_rsa_backup" backup_user@your-home-domain.com:/backup/server_data/var/www/ /var/www/
注意路径末尾的斜杠。
恢复后检查文件是否存在、权限是否正确。
如果之前保留了多个时间点的快照(比如用 rsnapshot),可以指定远程目录下的不同时间子目录来恢复特定版本。
常见问题(FAQ)
Q:住宅主机没有公网 IP,怎么办?
A:推荐安装 Tailscale,在两台设备上登录同一账户,然后就可以用内网 IP 直接 SSH,不用端口转发。配置更简单,也更安全。
Q:备份速度很慢,怎么优化?
A:SSH 加密有开销,可尝试使用压缩级别 -z 降低网络传输量;如果网络上行带宽有限,考虑只备份关键目录,或压缩后再传输。
Q:住宅主机磁盘满了,会怎样?
A:rsync 会报错并写日志。建议在住宅主机上设置磁盘用量监控(如 df -h 和邮件告警),或使用配额限制。
Q:能不能同时备份到多个住宅主机?
A:可以。在主服务器上复制脚本,修改远程地址和目录即可,定时任务排开时间错峰执行。
总结
通过以上步骤,你已经利用住宅主机搭建了一个可落地的服务器异地容灾备份方案。
这套方案成本低、可控性强,适合个人站长或小团队。
如果遇到问题,优先检查 SSH 连接和目录权限,再查看日志定位。
未来你还可以升级到 borgbackup 或 restic 获得版本管理能力,但 rsync 已经能满足最基本的灾备需求。