kaixin
Published on 2023-10-06 / 11 Visits
0

Rsync服务

Rsync

是什么:

  1. Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
  2. Rsync软件适用于unix/linux/windows等多种操作系统平台。Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。
  3. 它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名(类似于md5校验)。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。
  4. Rsync具备使本地和远程两台主机之间的数据快速复制,远程备份的功能,Rsync命令本身即可实现异地主机复制数据,功能类似scp又优于scp,scp每次都是全量备份,rsync可以实现增量拷贝(和scp一样都是基于ssh服务传输),Rsync软件还支持配置守护进程,实现异机数据复制。

功能:

  1. 全量拷贝:全量 第一次将A服务器某个文件夹的全部数据拷贝,第二次也是将A服务的某个文件夹进行拷贝,将数据全部拷贝,不考虑是否已经存在。
  2. 增量拷贝:增量,第一次从A服务器拷贝一个1.txt,第二次拷贝新增了2.txt,那么拷贝只会将新增的2.txt进行拷贝,1.txt不会拷贝。 每次只拷贝备份服务器没有数据,如果已经存在就不会拷贝。
  3. 本地复制 效果如 cp,远程同步复制 效果如 scp,本地数据删除 效果如 rm,远程数据查看 效果如 ls。具有远程拷贝与本地拷贝的功能。

特性:

  1. 支持拷贝 普通文件 特殊文件(link文件,设备文件)。
  2. 支持排除指定文件,目录的同步功能(同步数据时,指定文件不同步)。
  3. 能够保持原有的文件属性不变(stat file)。
  4. 实现增量复制(只复制变化的数据,数据传输效率高)。
  5. 可以配合ssh rcp rsh 等方式进行隧道加密文件传出(rsync不加密数据)。
  6. 可以通过socket(进行通信文件)传输文件和数据(c/s架构)拥有服务端。
  7. 支持匿名用户模式传输。

所在架构:

image-20230902191832160

1.工作模式与默认端口

默认端口:873

工作模式:
    1.本地模式,类似cp。
    2.远程模式,类似于scp,不同的机器,可以通过网络进行传输(公网或者局域网)。
    3.后台模式,提供一个后台服务,实时的进行数据同步,安全性更高。

2.备份模式

有哪些:

  1. 增量备份。
  2. 完全备份。

示例图:

image-20250216222621617

2-1.完全备份

解释:
    将全部的数据,都拷贝到server端(效率太低,存在重复性的文件)

注意:
    1.如果server这台备份服务器文件夹有其他的文件,不会受影响
    2.如果使用参数 --delete,就会请其他的文件进行清空后,在进行备份(数据会丢失)

2-2.增量拷贝

解释:
    rsync自动检测,只会将新增加的文件,备份到server下,而不会重复备份已存在的数据

# 备份效率高,只会拷贝变化的文件。

3.备份架构模式

3-1.客户端推送

解释:
    最基本的远程拷贝模式,客户端将数据远程的发送到服务端。

image-20250216223138140


3-2.客户端下载

解释:
    最基本的从客户端中下载数据到本机。

image-20250216223259445


3-3.多服务器备份架构

解释:
    多层备份操作,可以保证数据的安全性,相同的数据备份在不同的远程服务端,最终汇总到一台机器上备份。不一定是多个节点,也可以单个节点,需要根据需求而定。

image-20250216223611495


3-4.异地备份架构

解释:
    存在多地区的服务器,那么需要保证异地的服务器的数据相同。

image-20250216224431980


4.rsync命令

4-1.安装

1.安装
    yum install rsync -y

2.语法类型
    1.本地模式 等同于 cp命令
    2.远程模式 等同于 scp命令

# 注意:
    在使用rsync命令时,不限速的情况下会占用磁盘的io,会影响其他的程序,所以rsync命令在备份时一般会在凌晨执行,不影响其他的程序。也可以使用参数进行限速。
    --bwlimit 限制传输io

4-2.参数

参数解释
    -v        详细模式输出
    -a        归档模式,递归的方式传输文件,并保持文件的属性,等同于 -rlptgoD
    -r        递归拷贝目录
    -l        保留软链接
    -p        保留原有权限
    -t         保留原有时间(修改)
    -g        保留属组权限
    -o         保留属主权限
    -D        等于--devices  --specials    表示支持b,c,s,p类型的文件
    -R        保留相对路径
    -H        保留硬链接
    -A        保留ACL策略
    -e         指定要执行的远程shell命令
    -E         保留可执行权限
    -X         保留扩展属性信息  a属性


# 常用的组合参数
    rsync -avzP 
    rsync -az # 脚本中使用不显示传输的详细信息

4-3.命令格式

命令 解释
rsync [OPTION]... SRC DEST 拷贝本地文件,将SRC拷贝到DEST。例如:rsync -a /data /backup
rsync [OPTION]... SRC [USER@]HOST:DEST 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。例如:sync -avz *.c foo:src。本地拷贝到远程。
rsync [OPTION]... [USER@]HOST:SRC DEST 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。例如:rsync -avz foo:src/bar /data。远程考本到本地。
rsync [OPTION]... [USER@]HOST::SRC DEST 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
rsync [OPTION]... SRC [USER@]HOST::DEST 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
远程拷贝时:
    1.主机名(需要再配置hosts文件)
        rsync <参数> 本机路径 用户@主机名:远程路径 # 本地拷贝到远程
    2.ip地址
        rsync <参数> 本机路径 用户@IP地址:远程路径 # 本地拷贝到远程

4-4.参数详解

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结     -p, --perms 保持文件权限
-o, --owner 保持文件属主信息     -g, --group 保持文件属组信息
-D, --devices 保持设备文件信息    -t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件 # 只针对文件夹,拷贝,远程传输单个文件,无效果
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second   # 限速   
-h, --help 显示帮助信息

4-3.本地模式

# 类似于cp命令,在本机内执行,将文件A拷贝到文件B
命令格式:
    rsync <参数> 原文件 目标文件

作用:
    从本地A拷贝到本地B

与cp命令的区别:
    cp /var/log /opt # 执行几次,就拷贝几次,全部内容。全量拷贝。
    rsync -avzP /var/log /opt # 支持增量拷贝,只会拷贝发生变化的,新的文件,已经拷贝的不会在拷贝。可以只拷贝已经变化的。

4-3-1.示例-拷贝文件

1.将 /var/log/messages 文件拷贝到 /opt下
    rsync -azvP /var/log/messages /opt # 将文件拷贝到opt下

2.拷贝大文件,并且限速使用--bwlimit参数
    1.创建一个大文件 500M
        dd if=/dev/zero of=/data/test.log bs=10M count=500
    
    2.拷贝
        rsync -azvP --bwlimit=10M /data/test.log /opt

image-20250216232832512


4-3-2.示例-拷贝目录

1.将/var/log目录拷贝到 /opt目录中
    rsync -azvP /var/log /opt

# 注意,在拷贝目录时的 / 的问题
    # 拷贝整个目录 不加 / , 拷贝整个目录中得内容 加 /。
    rsync -azvP /var/log /opt  # 将整个log目录进行拷贝
    rsync -azvP /var/log/ /opt # 拷贝目录下的内容

2.目录的增量拷贝
    1.创建一个内容
        touch /data/{1..10}.txt
    
    2.现将拷贝到 opt 目录下
        rsync -azvP /data/ /opt
    
    3.在data文件的1.txt写入数据
        echo '1231' > /data/1.txt
    
    4.在进行拷贝
        rsync -azvP /data/ /opt

image-20250216233640043


4-3-3.无差别拷贝

无差别拷贝:
    就是将被拷贝的目录情况,在重新将数据拷贝一遍,与cp命令效果相同。
    例如:
        A文件 拷贝到 B文件,如果B文件存在内容,不是用参数--delete,那么就会保留B文件的内容。
        使用的情况下,就会清空B文件,然后在进行拷贝。

使用参数:
    --delete

例如:
    1.不使用参数
        rsync -azvP  /data/ /opt
    
    2.使用参数
        rsync -azvP --delete /data/ /opt

image-20250216234346994


4-4.远程模式

# 类似与 scp一样,可以远程的拷贝文件到本地,也可以将本地文件发送到远程
命令格式:
    默认走的是ssh协议 与 scp 命令类似

1.语法:将文件上传到其他机器
    rsync 参数  本机源路径  user@ip:目标机源路径

2.语法:将文件下载到本机
    rsync 参数  user@ip:目标机源路径 本机源路径

# 注意:
    无论是下载还是上传目录,都需要注意 / 如果带/就是文件夹的内容,如果不带就是文件夹本身

4-4-1.上传模式

# 主动将数据上传到其他机器中

1.将 123.log 文件上传到 192.168.85.143
    rsync -azvP /opt/123.log root@192.168.85.143:/opt

2.将本机的data文件上传到 192.168.85.143
    rsync -azvP /data root@192.168.85.143:/opt # 要内容的情况下还要文件夹

3.将本机的 data内的内容 上传到 192.168.85.143
    rsync -azvP /data/ root@192.168.85.143:/opt # 只要内容不要外部的文件夹

# 注意:可以适当的添加参数
    --bwlimit=20 # 限速参数
    --dalete # 无差异上传参数,会先清空远程的内容,在上传

image-20250217214705401


4-4-2.下载模式

# 将远程的机器的文件数据下载到本机

1. 192.168.85.143 机器的 /etc/passwd 文件下载到本机的 /opt 下
    rsync -azvP root@192.168.85.143:/etc/passwd /opt

2.192.168.85.143 机器的 /var/log/nginx 文件夹下载到本机 /opt 下
    rsync -azvP root@192.168.85.143:/var/log/nginx /opt  # 要内容的情况下还要文件夹

3.192.168.85.143 机器的 /var/log/nginx 文件内容下载到本机 /opt 下
    rsync -azvP root@192.168.85.143:/var/log/nginx/ /opt # 只要内容不要外部的文件夹

image-20250217215402395


4-5.密码问题

注意:
    rsync基于ssh协议传输,因此需要认证方式、要么密码、要么密钥。

# 第一次进行远程传输数据或者下载数据时,会进行指纹验证。

1.两条机器的远程传输,默认走的就是ssh协议。
2.两条机器没有做免密登录,所有需要数据对方的服务器的密码(在正式的生产环境下,是不被允许的,不安全)。如果不想数据密码,可以使用免密登录。

4-6.文件排除操作

# 使用参数:--exclude=PATTERN 指定排除不需要传输的文件模式,可以通配符写法

1.排除 .png 文件
    rsync -azvP --exclude=*.png /opt/ root@192.168.85.143:/opt # 排除 *.png结尾的文件

2.排除隐藏文件 和 某个文件夹
    rsync -avzP --exclude=test --exclude=.* /opt/  root@192.168.85.143:/opt # 排除隐藏文件 .* 与 test文件夹

4-7.指定端口补充

使用ssh协议,可能端口不是默认的 22 需要使用-e参数指定端口
rsync -avzp -e "ssh -p 2299"  root@192.168.85.133:/opt/ /opt/

5.rsync服务操作

说明:

  1. 重中之重,如果在服务器上进行备份,也就是cp命令进行备份即可,那么如果两台机器上进行备份怎么办。
  2. 备份是太常见、且太重要的一个日常工作了。备份源码、文档、数据库、等等。 类似cp命令拷贝,但是支持服务器之间的网络拷贝,且保证安全性。 scp进行传输拷贝。
  3. 如果是两个或者多台服务器进行拷贝 就是使用rsync工具。

解释:

  • 客户端在备份时,会产生大量的数据,将数据进行拷贝到rsync服务端中,不能单一的使用rsync -azvP 这种形式进行拷贝操作,因为会直接输入密码(会导致密码泄露),哪怕将root用户给禁用了,使用普通用户也是存在局限性,可能会出现权限不足的情况。

考虑的问题:

  • 限制问题,权限问题,交互式输出密码等等,这样无法在使用默认的ssh协议进行数据备份。
  • 所以rsync提供了一个标准的服务端,该服务提供了账户密码认证机制,不需要使用linux的系统用户,保护了数据安全。

图解:

image-20250217220607906

为什么需要rsync服务端:

  1. 默认情况下,rsync只是一条命令而已,不是一个服务,rsync提供了一种作为系统服务的一种方式。
  2. 守护进程传输模式是在客户端和服务端之间进行的数据复制。
  3. 服务端需要配置守护进程,在客户端执行命令,实现数据拉取和推送。
  4. 解决手动输入命令的操作,保护了数据的安全性。

rsync借助sshd协议同步数据存在缺陷:

  1. 使用系统用户root,不安全。
  2. 使用普通用户,权限不够,守护进程传输方式:rsync自身非常重要的功能,不适用系统本身的用户,更加安全。

5-1.部署操作机器

机器 作用
test-1 192.168.85.133 服务端(提供rsync服务,接受客户端上传的备份数据)
test-3 192.168.85.144 客户端(将数据备份到服务端)

5-2.服务端部署

部署流程:
    1.安装rsync软件。
    2.修改配置文件(监控那个文件)。
    3.创建启动rsync用户和数据目录。
    4.启动程序(设置开机自启)。

5-2-1.安装与配置

1.安装
    yum install rsync -y

2.配置文件
    /etc/rsyncd.conf

5-2-2.配置

# 将配置写入到 /etc/rsyncd.conf 文件中

uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
#####################################
[backup] # 名字是自定义的
comment = about rsync 1
path = /backup # 备份文件目录也自定义的

[data] # 名字是自定义的
comment = about rsync 2 
path = /data # 备份文件目录也自定义的

image-20250217221843350


5-2-3.配置说明

# 公共参数 全局参数

uid = www                     # 运行进程的用户  设置干活的进程(父进程依然是root)
gid = www                     # 运行进程的用户组 设置干活的进程(父进程依然是root)
port = 873                    # 监听端口
fake super = yes              # 无需让 rsync 以 root 身份运行,允许接收文件的完整属性
use chroot = no               # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200         # 最大连接数
timeout = 600                 # 超时时间
ignore errors                 # 忽略错误信息
read only = false             # 对备份数据可读写
list = false                  # 不允许查看模块信息
pid file = /var/run/rsyncd.pid # rsyncd pid服务
log file = /var/log/rsyncd.log # 运行的日志,出现问题查看日志

auth users = rsync_backup          # 定义虚拟用户,作为连接认证用户名
secrets file = /etc/rsync.passwd   # 定义 rsync 服务用户连接认证密码文件路径


# 区块信息 局部参数(可以有多个),提供一个服务端的备份目录

[backup]                     # 定义模块信息名
comment = 注释信息             # 模块注释信息,说明
path = /backup                 # 定义接收备份数据目录

5-2-4.创建数据目录与启动用户和密码文件

1.创建数据目录 # 区域块path指定的存储的备份文件目录
    mkdir  /backup  

2.创建启动用户,修改文备份文件的权限 # 需要与配置文件相同,用于启动rsync服务的用户
    useradd www
    chown www.www -R /backup

3.创建密码文件,用于虚拟用户使用的密码,设置权限位600(rsync需要的) 
    # 非常重要,因为传输是需要这个虚拟用户以及配套的密码文件,而且密码文件权限必须是600
    echo "rsync_backup:123456" > /etc/rsync.passwd 
    chmod 600 /etc/rsync.passwd

image-20250217222334818


5-2-5.启动服务

1.启动服务,开机自启
    systemctl start rsyncd && systemctl enable rsyncd

2.查看 873 默认端口
    netstat -tunlp | grep 873

3.查看 /var/run/rsyncd.pid 值
    cat /var/run/rsyncd.pid

image-20250217222606848


5-2-6.服务端排错

1.检查rsync的配置文件的路径是否正确 /etc/rsyncd.conf
2.查看配置文件中得path参数的路径是否存在,权限是否正确(属主属组与配置文件uuid参数对应)
3.查看rsync的服务是否启动,端口,进程是否存活
4.查看selinux防火墙是否关闭,iptables是否放行rsync服务端口
5.查看rsync的密码文件路径是否与配置文件相同,密码文件的权限是否是600
6.如果是推送数据,查看配置文件中得用户对`rsync模块`读取权限(一般将模块下的文件设置属主属组都是配置文件的用户)

5-3.客户端操作

5-3-1.安装与配置

1.安装
    yum install rsync -y

2.配置文件 # 客户端不需要这个配置文件
    /etc/rsyncd.conf

5-3-2.配置密码文件

# 由于rsync客户端,需要将数据传输或者下载,需要使用rsync服务端。
    但是需要账户的认证,账户密码就是服务指定号的账户密码 :# rsync_backup:123456

1.直接指定密码文件 # 客户端机器创建,客户端的密码只写密码
    echo '123456' >> /etc/my_rsync.pwd
    chmod 600 /etc/my_rsync.pwd

2.指定一个环境变量
    export RSYNC_PASSWORD='123456'

3.如果不指定变量或者密码文件需要手动指定密码
    缺点:
        无法进行非交互式操作,也就是写成脚本进行操作rsync的操作。
    rsync -avzP  /opt/123.txt  rsync_backup@192.168.85.133::backup

image-20250217224416393


5-3-3.上传,备份客户端自己的数据

语法:
    rsync -avzP 客户端自己的数据路径 账户@ip::模块名
    解释:
        账户@ip :服务端配置的虚拟用户与服务端的ip地址
        ::模块名:就是服务端配置文件的模块的名称

1.需要交互式输入密码 # 没有指定密码文件与环境变量
    rsync -avzP  /opt/123.txt  rsync_backup@192.168.85.133::backup

2.指定密码文件 需要使用 --password-file=密码文件路径(权限需要600)
    rsync -avzP --password-file=/etc/my_rsync.pwd  /opt/123.txt  rsync_backup@192.168.85.133::backup

3.使用环境变量
    export RSYNC_PASSWORD='123456' # 声明环境变量
    rsync -avzP  /opt/123.txt  rsync_backup@192.168.85.133::backup # 进行操作,自动读取环境变量

image-20250217225159399


5-3-4.下载,客户端下载服务端数据

语法:
    rsync -avzP 账户@ip::模块名 客户端自己的数据路径  # 手动输入密码/如果设置了密码变量就不需要密码
    rsync -avzP --password-file=密码文件的路径 账户@ip::模块名 客户端自己的数据路径  # 不需要输入密码

1.下载 服务端 备份文件/1.txt 到客户端的1.txt # 使用环境变量
    export RSYNC_PASSWORD='123456' # 声明环境变量
    rsync -avzP rsync_backup@192.168.85.133::backup /opt

2.下载 服务端 备份文件/1.txt 到客户端的1.txt # 使用配置文件
    rsync -avzP --password-file=/etc/my_rsync.pwd rsync_backup@192.168.85.133::backup /opt

image-20250217230021171


5-3-5.密码撤销

1.取消环境变量
    unset RSYNC_PASSWORD
    # 设置到porfile全局变量文件或者个人变量文件中

2.密码文件
    rm -rf /etc/密码文件

# 注意:
    在使用过程中,如果密码变量没有声明,要么声明,要么使用变量密码文件,手输入不安全。

5-3-6.排查思路

1.如果使用密码文件的方式上传或者下载备份数据,检查密码文件权限是否是600,是否和服务端设置的密码一致,密码文件只写密码。
2.检查服务端的873的端口,检查服务端是否能连接。
3.客户端的命令需要细心的查看,是上传还是下载,参数等问题。

# 注意:如果是非873默认端口,那么就需要使用--port指定端口
    rsync -avzP --port=8733 /opt/1.txt rsync_backup@192.168.85.133::backup

6.脚本

1.服务端部署rsyncd,用于接收客户端推送过来的备份数据
    部署rsyncd,以及配置文件信息

2.服务端需要每天校验客户端推送过来的数据是否完整 
    校验文件的流程
        1.查看客户端的md5值
        2.把客户端文件+md5校验值,一起发给服务端
        3.服务端校验该文件,以及md5值

3.服务端需要每天校验的结果通知给管理员 
    将服务端校验该文件,以及md5值结果
        1.发qq
        2.发微信
        3.钉钉
        4.发邮件


补充部分:
    1.删除服务端中备份超过6个月的数据
        find /backup -type f -mtime +180 | xargs -i rm -rf {} # 方式1
        find /backup -type f -mtime +180 -delete # 方式2
    
    2.将校验的数据存储到文本中
        md5sum -c md5sum -c /backup/test-3_192.168.85.144_2025-02-17/all_data.md5  > /opt/md5.mail
    
    2.发送邮件给运维邮箱
        mail -s "check-rsync-$(date +%F)" 邮箱@xx.xxx < /opt/md5.mail 
        
vim 客户端脚本.sh

#!/bin/bash
# 注意为了确保环境变量发生变化,在脚本中重新定义一遍
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

name=$(hostname)
ip=$(ifconfig  ens33 | awk 'NR==2{print $2}')
yearday=$(date '+%F')
file_name=/backup/${name}_${ip}_${yearday}
mkdir -p $file_name
$(cd / && tar -czf ${file_name}/etc.tar.gz etc) 
$(cd / && tar -czf ${file_name}/log.tar.gz var/log)
$(md5sum ${file_name}/*.tar.gz > ${file_name}/all_data.md5)
export RSYNC_PASSWORD='123456'
$(rsync -az /backup/ rsync_backup@192.168.85.133::backup)
$(find /backup -type f -mtime +7 -delete)



vim 服务端脚本.sh
#!/bin/bash
$(md5sum -c md5sum -c /backup/test-3_192.168.85.144_2025-02-17/all_data.md5  > /opt/md5.mail)  # 验证
$(mail -s "check-rsync-$(date +%F)" 邮箱@xx.xxx < /opt/md5.mail > /dev/null 2>&1)
$(find /backup -type f -mtime +180 -delete) 

image-20250217232209226