搬瓦工 VPS Rsync 远程文件同步备份教程

Rsync 是 Linux 系统上最经典、最可靠的文件同步工具,内置于几乎所有 Linux 发行版中。它使用增量传输算法,只传输源文件和目标文件之间的差异部分,在带宽有限的情况下效率极高。Rsync 通过 SSH 隧道加密传输数据,安全可靠。本教程将介绍如何在搬瓦工 VPS 上使用 Rsync 建立完善的远程备份方案。

一、Rsync 核心特性

  • 增量传输:基于 rolling checksum 算法,只传输文件变化的部分。
  • SSH 加密:默认通过 SSH 协议加密传输,无需额外配置。
  • 保留属性:完整保留文件权限、所有者、时间戳、软链接等元数据。
  • 带宽限制:支持限速传输,避免占满服务器带宽。
  • 断点续传:支持 --partial 参数实现断点续传。

二、基本用法

# 本地目录同步
rsync -avz /opt/app/ /backup/app/

# 推送到远程服务器
rsync -avz /opt/app/ user@remote-server:/backup/app/

# 从远程服务器拉取
rsync -avz user@remote-server:/opt/app/ /backup/app/

# 参数说明:
# -a  归档模式(等同于 -rlptgoD),保留所有文件属性
# -v  详细输出
# -z  传输时压缩数据

三、常用参数组合

# 完整备份命令(推荐)
rsync -avzP --delete \
  --exclude='*.log' \
  --exclude='node_modules' \
  --exclude='.git' \
  --exclude='__pycache__' \
  -e "ssh -p 22 -i /root/.ssh/id_ed25519" \
  /opt/app/ \
  backup-user@backup-server:/backup/vps-app/

# 参数说明:
# -P           显示进度并支持断点续传(等同于 --partial --progress)
# --delete     删除目标中源不存在的文件(镜像同步)
# --exclude    排除匹配的文件或目录
# -e           指定远程 shell 命令(可设置 SSH 端口和密钥)

四、带宽限制与性能优化

# 限速传输(单位 KB/s)
rsync -avz --bwlimit=5000 /opt/app/ user@remote:/backup/app/

# 使用更快的压缩算法
rsync -avz -e "ssh -c aes128-gcm@openssh.com" /opt/app/ user@remote:/backup/

# 大量小文件优化
rsync -avz --no-compress --whole-file /opt/many-small-files/ user@remote:/backup/

五、排除规则文件

cat > /opt/rsync/excludes.txt <<'EOF'
*.log
*.log.*
*.tmp
*.swp
*.cache
.git/
node_modules/
__pycache__/
vendor/
.env
*.pid
EOF

rsync -avzP --exclude-from=/opt/rsync/excludes.txt \
  /opt/app/ user@remote:/backup/app/

六、快照式备份(硬链接)

# 使用 --link-dest 创建空间高效的快照备份
DEST="/backup/snapshots/$(date +%Y-%m-%d_%H%M)"
LATEST="/backup/snapshots/latest"

rsync -avz --delete \
  --link-dest="$LATEST" \
  /opt/app/ "$DEST/"

# 更新 latest 软链接
rm -f "$LATEST"
ln -s "$DEST" "$LATEST"

使用硬链接,未变化的文件不占用额外空间,每个快照目录看起来都是完整的备份。

七、自动化备份脚本

cat > /opt/rsync/backup.sh <<'EOF'
#!/bin/bash
set -euo pipefail

REMOTE="backup-user@backup-server"
REMOTE_DIR="/backup/vps"
SSH_KEY="/root/.ssh/id_ed25519"
EXCLUDES="/opt/rsync/excludes.txt"
LOG="/var/log/rsync-backup.log"
LOCK="/tmp/rsync-backup.lock"

# 防止重复运行
exec 200>"$LOCK"
flock -n 200 || { echo "备份正在进行中" >> "$LOG"; exit 0; }

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; }

log "开始 Rsync 备份"

# 备份数据库
docker exec postgres pg_dumpall -U postgres > /tmp/db-dump.sql 2>/dev/null
log "数据库导出完成"

# 执行 Rsync 同步
rsync -avz --delete \
  --exclude-from="$EXCLUDES" \
  --bwlimit=10000 \
  -e "ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new" \
  /opt/app/ /var/www/ /etc/nginx/ /tmp/db-dump.sql \
  "$REMOTE:$REMOTE_DIR/" 2>> "$LOG"

rm -f /tmp/db-dump.sql
log "Rsync 备份完成"
EOF

chmod +x /opt/rsync/backup.sh
echo "0 3 * * * /opt/rsync/backup.sh" | crontab -

八、Rsync 守护进程模式

# 在备份服务器上配置 rsyncd
cat > /etc/rsyncd.conf <<'EOF'
uid = nobody
gid = nogroup
use chroot = yes
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

[backup]
path = /backup
comment = VPS Backup
read only = no
auth users = backup_user
secrets file = /etc/rsyncd.secrets
hosts allow = your-vps-ip
EOF

echo "backup_user:backup_pass_2026" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
systemctl enable --now rsync

九、常见问题

Permission denied 错误

确认 SSH 密钥权限正确(600),且目标目录对备份用户可写。

chmod 600 /root/.ssh/id_ed25519
ssh -i /root/.ssh/id_ed25519 backup-user@backup-server "ls -la /backup/"

传输中断后恢复

# 使用 --partial 和 --append-verify 续传大文件
rsync -avz --partial --append-verify /opt/large-file user@remote:/backup/

总结

Rsync 是 Linux 上最可靠的文件同步备份工具,配合 crontab 可以建立稳定的定时备份方案。如果需要实时同步,可以参考 Lsyncd 教程;需要加密去重备份,推荐 ResticBorgBackup。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。