rsync全网备份全流程
需求
存储服务器(DataServer,例:ip=192.168.0.1 备份目录:/server/)
备份服务器(BackupServer,例:ip=192.168.0.2 接收目录:/backup/)
设置定时任务将DataServer中的/server/打包通过rsync服务推到BackupServer中,并将备份数据与md5校验结果发送到邮箱中。
一、存储服务器与备份服务器准备工作
-
备份服务器(BackupServer)准备工作
-
安装rsync或更新rsync。
shellyum install -y rsync # 安装/更新rsync -
修改rsync的配置文件(/etc/rsyncd.conf)。
shell# 创建时间:2026-04-08 ############################################################ fake super = yes # 允许 rsync 进程在不需要 root 权限的情况下,保留文件的完整属性(如属主、权限) uid = rsync # rsync 服务运行时使用的用户身份 gid = rsync # rsync 服务运行时使用的用户组身份 use chroot = no # 是否将客户端锁定在其访问的模块目录中, no 表示不限制(一般备份场景推荐 no) max connections = 2000 # 最大并发连接数(根据服务器性能调整) timeout = 600 # 客户端连接超时时间(单位:秒),超过该时间无操作则断开连接 pid file = /var/run/rsyncd.pid # pid 文件存放位置(记录 rsync 主进程 ID) lock file = /var/run/rsync.lock # 锁文件,防止多个进程同时操作同一资源 log file = /var/log/rsyncd.log # rsync 服务日志文件路径 ignore errors # 传输过程中忽略 I/O 错误(如部分文件不可读),生产环境可选,谨慎使用 read only = false # 是否只读,false 表示客户端可以上传(写) list = false # 是否允许客户端列出模块列表,false 提高安全性,防止暴露模块名 # hosts allow = 10.0.0.0/24 #允许访问的客户端网段(白名单),示例:只允许 10.0.0.0/24 网段访问 # hosts deny = 0.0.0.0/32 # 拒绝访问的客户端网段(黑名单),示例:拒绝所有 IPv4 地址(一般不用) auth users = rsync_backup # 启用虚拟用户认证(非系统用户),客户端必须使用 rsync_backup 作为用户名 secrets file = /etc/rsync.password # 认证密码文件路径,文件中保存:用户名:密码 ##################################### [backup] # 定义一个名为 backup 的同步模块 path = /backup # 该模块对应的服务器端实际目录 -
创建虚拟用户------rsync、配置文件中的块目录和认证密码文件,修改块目录和认证密码文件权限。
shelluseradd -r -s /sbin/nologin -d /var/empty -M rsync # 创建虚拟用户------rsync mkdir /backup # 创建块目录 chown -R rsync:rsync /backup # 修改块目录权限 chmod 700 /backup echo "rsync_backup:rsync" >/etc/rsync.password # 创建认证密码文件 chmod 600 /etc/rsync.password # 修改认证密码文件权限 -
启动rsync服务(已启动的进行重启服务),设置为开机自启动。
shellsystemctl enable rsyncd # 设置rsyncd服务开机自启动 systemctl restart rsyncd #重启rsyncd服务,修改配置文件就要重启rsyncd服务
-
-
存储服务器(DataServer)准备工作
-
安装rsync或更新rsync。
shellyum install -y rsync # 安装/更新rsync -
启动rsync服务,设置为开机自启动。
shellsystemctl restart rsyncd # 重启rsyncd服务 systemctl enable rsyncd # 设置rsyncd服务开机自启动 -
编写rsync的password文件(用于推送时免密码推送)。
shellecho "rsync" >/etc/client.rsync # 创建rsync免密推送文件,只书写BackupServer端rsync_backup用户的密码
-
二、存储服务器编写数据打包脚本,添加定时任务
- 编写数据打包脚本(在此我放在/server/scripts目录下)。
shell
#!/bin/bash
# author: hu
# createTime: 2026-04-11
# desc: Backup /var/logo/ data
# version: V1.1
set -euo pipefail # 脚本执行遇到错误退出,不再继续执行下一步
local_ip=$(hostname -I | awk '{print $1}') # 获取本机ip地址
time=$(date +%F) # 获取时间 年-月-日
backup_dir=/backup/ # 打包后存放路径
tar_dir=/var/log/ # 需打包备份的目录路径
target_ip=192.168.0.2 # 备份服务器ip地址
# 将需要备份的数据进行打包压缩,放到存放备份的目录中
mkdir -p "${backup_dir}${local_ip}" #创建存放备份的目录
tar -czf "${backup_dir}${local_ip}/server-${time}.tar.gz" -C / server # 打包压缩待备份数据
# 创建md5校验文件
md5sum "${backup_dir}${local_ip}/server-${time}.tar.gz" \ # 获取备份文件的md5校验码
> "${backup_dir}${local_ip}/check-"${time}".md5" # 将校验码加到check-年-月-日.md5文件中
# 推送存储服务器/backup/下的备份到备份服务器的/backup/下
rsync -av --delete --no-X \
--password-file=/etc/client.rsync \ # 免密码推送
"${backup_dir}" rsync_backup@${target_ip}::backup
# 删除创建时间超过三十天的备份
find "${backup_dir}" -type f -name "*.tar.gz" -mtime +30 -exec rm -f {} \;
- 将脚本执行任务添加到定时任务中(根据需求设置执行时间)。
shell
crontab -e -u root # 添加定时任务的命令(这里我添加在root用户下的)
shell
# 执行数据打包压缩备份,并进行推送
01 00 * * * sh /server/scripts/AllBackup.sh >> /server/scriptslog/AllBackup.log 2>&1 # >>将脚本执行输出放到log文件中,2>&1避免cron输出到屏幕中,这里设置的是每天凌晨00:01执行任务(*分 *时 *日 *月 *周)
三、备份服务器编写数据检查脚本,添加定时任务
- 编写数据打包脚本(在此我放在/server/scripts目录下)。
shell
#!/bin/bash
#authour:Hu
#time:2026-04-11
#desc:check recived data
#versiom:v1.0
set -euo pipefail # 脚本执行遇到错误退出,不再继续执行下一步
backup_dir=/backup/ # 推送的备份数据的存放路径
clog_dir=/var/log/checkmd5.log # 存放脚本执行后,存放巡检备份后的结果的文件路径
# 删除创建时间超过三十天的备份
find "${backup_dir}" -type f -name "*.tar.gz" -mtime +30 -exec rm -f {} \;
# 统计推送过来的备份数据信息(ip,name,size)并输出到/var/log/checkmd5.log文件中(此处直接选择>进行覆盖)
find "${backup_dir}" -type f -name "*.tar.gz"|\
xargs ls -lhds |\
awk -F'[ /]+' 'BEGIN{print "IP","Name","Size"} {print $(NF-1),$NF,$5}'|\
column -t >"${clog_dir}"
# md5校验结果输出到/var/log/checkmd5.log文件中(此处输出选择>>进行追加)
echo "md5 check results:" >>"${clog_dir}"
find "${backup_dir}" -type f -name "*.md5" |\
xargs md5sum -c >>"${clog_dir}"
# 通过邮箱发送备份数据巡检结果
cat "${clog_dir}" |\
mail -s "Backup-Data check result" 接收邮箱@qq.com
- 将脚本执行任务添加到定时任务中(根据需求设置执行时间)。
shell
# 巡检备份数据的结果发送到指定邮箱
30 00 * * * sh /server/scripts/CheckBackup.sh >> /server/scriptslog/CheckBackup.log 2>&1 # >>将脚本执行输出放到log文件中,2>&1避免cron输出到屏幕中,这里设置的是每天凌晨00:30执行任务(*分 *时 *日 *月 *周
四、全流程结果展示
DataServer数据打包结果:

BackupServer备份接收结果:

巡检结果发送邮箱:

附:邮件发送配置
shell
vim /etc/mail.rc #写到文件最后
cat >>/etc/mail.rc <<EOF
# ===== 163 邮箱配置 =====
# 发件人邮箱
set from=xxxxxxxxxx@163.com
# SMTP 服务器
set smtp=smtp.163.com
# 认证信息
set smtp-auth-user=xxxxxxxxxx@163.com
set smtp-auth-password=xxxxxxxxxx
set smtp-auth=login
EOF