rsync全网备份全流程

rsync全网备份全流程

需求

存储服务器(DataServer,例:ip=192.168.0.1 备份目录:/server/)

备份服务器(BackupServer,例:ip=192.168.0.2 接收目录:/backup/)

设置定时任务将DataServer中的/server/打包通过rsync服务推到BackupServer中,并将备份数据与md5校验结果发送到邮箱中。


一、存储服务器与备份服务器准备工作
  1. 备份服务器(BackupServer)准备工作

    • 安装rsync或更新rsync。

      shell 复制代码
      yum 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、配置文件中的块目录和认证密码文件,修改块目录和认证密码文件权限。

      shell 复制代码
      useradd -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服务(已启动的进行重启服务),设置为开机自启动。

      shell 复制代码
      systemctl enable rsyncd	# 设置rsyncd服务开机自启动
      systemctl restart rsyncd	#重启rsyncd服务,修改配置文件就要重启rsyncd服务
  2. 存储服务器(DataServer)准备工作

    • 安装rsync或更新rsync。

      shell 复制代码
      yum install -y rsync	# 安装/更新rsync
    • 启动rsync服务,设置为开机自启动。

      shell 复制代码
      systemctl restart rsyncd	# 重启rsyncd服务
      systemctl enable rsyncd	# 设置rsyncd服务开机自启动
    • 编写rsync的password文件(用于推送时免密码推送)。

      shell 复制代码
      echo "rsync" >/etc/client.rsync	# 创建rsync免密推送文件,只书写BackupServer端rsync_backup用户的密码
二、存储服务器编写数据打包脚本,添加定时任务
  1. 编写数据打包脚本(在此我放在/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 {} \;
  1. 将脚本执行任务添加到定时任务中(根据需求设置执行时间)。
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执行任务(*分 *时 *日 *月 *周)
三、备份服务器编写数据检查脚本,添加定时任务
  1. 编写数据打包脚本(在此我放在/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
  1. 将脚本执行任务添加到定时任务中(根据需求设置执行时间)。
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
相关推荐
TechMasterPlus2 小时前
Linux 驱动开发深度解析:从内核模块到设备驱动
linux·运维·驱动开发
念恒123062 小时前
Linux权限
linux·c语言
TechMasterPlus2 小时前
浏览器自动化工具深度对比:Playwright、Chrome DevTools 与 Agent Browser
运维·自动化·chrome devtools
落羽的落羽2 小时前
【算法札记】练习 | Week1
linux·服务器·c++·人工智能·python·算法·机器学习
炸炸鱼.2 小时前
LVS 负载均衡群集实战指南
运维·负载均衡·lvs
王琦03182 小时前
第十章 管理Linux的联网
linux·服务器·php
Run_Teenage2 小时前
Linux:进程间通信-System V 共享内存
linux·运维·服务器
木子欢儿2 小时前
Ubuntu 24.04 执行超微服务器 JNLP 程序
linux·运维·服务器·ubuntu
2301_764441332 小时前
SleepFM多模态睡眠基础模型
人工智能·开源·github