rsync 备份体系:从命令到企业备份架构

“数据没丢过”不代表备份做得对,”数据丢过且能恢复”才算。rsync 是 Linux 备份体系里最核心的工具——增量传输、断点续传、本地/远程全支持。这篇从命令用法讲到企业级备份架构。

一、核心概念与三种模式

rsync 有个特性是 scp 给不了的:增量同步——只传变化的部分,第二次执行默认就是增量,不重复传。

三种传输模式:

1
2
3
4
5
6
7
8
9
# 1. 本地拷贝(也做增量)
rsync -av /data/ /backup/

# 2. 守护进程模式(rsync://,走 873 端口,免 ssh 认证)
# HOST:: 后面跟的是模块名(rsyncd.conf 里的 [backup]),不是目录路径!
rsync -av /data/ rsync://backup-server::backup

# 3. SSH 通道模式(走系统用户 + ssh 认证)
rsync -av -e ssh /data/ ops@10.0.8.41:/data/

-a 归档模式是主力,等价于 -rlptgoD:递归、软链接、权限、时间、属主属组、设备文件全部保留。

二、–delete:最重要也最危险的参数

1
2
# 语义:让目标目录和源目录完全一致——源没有的,目标必须删
rsync -av --delete /data/ /backup/

两个要点:

  1. 源、目标都要加斜杠,否则目标里会出现 源目录名/源目录名 嵌套;
  2. 方向要想清楚--delete 是”以源为准”。企业里的经典用法是反向用——以备份服务器为准,把被黑/被改的目录恢复成备份状态
1
2
# 服务器代码中毒被篡改:以备份机 /backup 为准,强制恢复业务机
rsync -av --delete rsync://backup-server::backup /server/www/

三、守护进程模式完整配置(服务端)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 安装
yum install -y rsync

# 2. /etc/rsyncd.conf
cat > /etc/rsyncd.conf <<'EOF'
uid = rsync
gid = rsync
use chroot = no # 不禁锢;软链可指模块外,需严格管理 path 权限
max connections = 10
read only = false # 备份机要接收数据
list = false # 不允许列出模块
auth users = rsync_backup
secrets file = /etc/rsync.passwd
[backup]
path = /backup
EOF

# 3. 创建虚拟用户(不能登录系统)
useradd rsync -s /sbin/nologin -M

# 4. 密码文件(服务端格式:用户名:密码,权限 600)
echo 'rsync_backup:Ops@2023' > /etc/rsync.passwd && chmod 600 /etc/rsync.passwd

# 5. 创建备份目录并授权
mkdir -p /backup && chown rsync:rsync /backup

# 6. 启动并验证 873 端口
systemctl start rsyncd && systemctl enable rsyncd
ss -tulnp | grep 873

四、客户端配置与免密

客户端只需装 rsync 工具,两种免密方式:

1
2
3
4
5
6
7
# 方式一:密码文件免密(客户端文件只写密码,不带用户名!)
echo 'Ops@2023' > /etc/rsync.pass && chmod 600 /etc/rsync.pass
rsync -av --password-file=/etc/rsync.pass /data/ rsync://backup-server::backup

# 方式二:环境变量
export RSYNC_PASSWORD='Ops@2023'
rsync -av /data/ rsync://backup-server::backup

五、多服务器备份架构:按客户端划分模块

多台业务机往一台备份机同步时,不要共用同一个模块——按客户端划分模块,实现身份物理隔离:

1
2
3
4
5
6
7
8
# 备份机 /etc/rsyncd.conf 里按客户端定义:
[web01]
path = /backup/web01
auth users = web01_bak

[web02]
path = /backup/web02
auth users = web02_bak

每个客户端只有自己模块的密码文件,A 机器即便密码泄露也碰不到 B 的备份目录。备份机的 /backup 目录按机器分目录,恢复时一目了然。

六、SSH 免密(配套)

需要走 SSH 通道时(如跨机房、需要系统用户权限),配置免密:

1
2
3
4
5
6
# 客户端生成密钥(一路回车)
ssh-keygen -t ed25519
# 分发公钥
ssh-copy-id -i ~/.ssh/id_ed25519.pub ops@10.0.8.41
# 验证
ssh ops@10.0.8.41 'hostname'

小结

备份体系的正确姿势是一套组合拳:rsync 负责传、密码文件负责认证、模块隔离负责安全、–delete 负责恢复。工具本身半小时能配完,真正值钱的是架构设计——下一篇把它升级成”定时 + 校验 + 告警 + 实时同步”的完整闭环。