linux系统rsync命令

Posted 王顺子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统rsync命令相关的知识,希望对你有一定的参考价值。

1.修改环境变量,实现免密传输

export RSYNC_PASSWORD=123
## 修改环境变量之前是这样传输
[root@web01 ~]#  rsync -avz /etc/passwd wzh_bak@10.0.0.41::wzh --password-file=/etc/rsync.pass

## 修改环境变量之后就变成了这样
[root@web01 ~]#  rsync -avz /etc/passwd
wzh_bak@10.0.0.41::wzh

2.无差别同步

## 需要用到--delete选项
#首先创建出一个目录,里面加入文件
[root@web01 ~]# mkdir /222
[root@web01 ~]# mv 1.txt /222/
[root@web01 ~]# ll /222
total 4
-rw-r--r-- 1 root root 4 May  7 22:23 1.txt
##把backup服务器无差异同步到创建出的目录里
[root@web01 ~]# rsync -avz --delete  wzh_bak@10.0.0.41::wzh /222
receiving incremental file list
deleting 1.txt
./
passwd
nfs_172.16.1.31_2020-05-25/
nfs_172.16.1.31_2020-05-25/2020-05-25_etc.tar.gz
nfs_172.16.1.31_2020-05-25/jy.md5
web02_172.16.1.8_2020-05-07/
web02_172.16.1.8_2020-05-07/2020-05-07_etc.tar.gz
web02_172.16.1.8_2020-05-07/jy.md5

sent 146 bytes  received 19,928,843 bytes  7,971,595.60 bytes/sec
total size is 20,325,848  speedup is 1.02
[root@web01 ~]# ll /222/
total 4
drwxr-xr-x 2 root root   49 May 25  2020 nfs_172.16.1.31_2020-05-25
-rw-r--r-- 1 root root 1022 May  7 17:58 passwd
drwxr-xr-x 2 root root   49 May  7 20:47 web02_172.16.1.8_2020-05-07
##同步完成后可以看到之前客户端目录中的1.txt文件没有了,这是因为服务端的目录里面没有这个文件,我们和服务端同步所以里面的内容就和服务端一样,1.txt数据丢失了

3.限制I/O读写速度,可以理解为限速

##主要是用到了--bwlimit=选项

[root@web01 ~]# rsync -avz --bwlimit=1 wzh_bak@10.0.0.41::wzh /222

4.脚本执行(客户端)

## 脚本开头 #!/bin/bash作用是解释器告诉我们这个脚本使用/bin/bash解释执行

#设置环境变量
export RSYNC_PASSWORD=123

#设置普通变量
D=$(date +%F)
IP=$(ifconfig eth1|awk \'NR==2 {print $2}\')
H=$(hostname)
bk_dir=/backup
local_dir=/backup/${H}_${IP}_${D}

#判断目录存在如果不存在则创建
if [ ! -d $local_dir ] ; then
mkdir -p $local_dir
fi

#客户端本地打包备份至上面创建的目录下
tar zcPf ${local_dir}/${D}_etc.tar.gz /etc

#生成校验码
md5sum ${local_dir}/${D}_etc.tar.gz
>${local_dir}/jy.md5

#将备份的数据推送到本地服务器目录
rsync -avz $local_dir wzh_bak@10.0.0.41::wzh

#只保留七天内的备份数据其他删除
cd / && \\
find /backup/ -type d ! -mtime -7 ! -name \'backup\'  |xargs rm -rf

5.加入定时任务(客户端)

#每天凌晨一点打包/etc目录并传输到backup服务器 by:王张行
00 1 * * * /bin/sh /root/bf.sh  &>/dev/null

6.服务端配置
1.邮箱配置

## 下载mailx
[root@backup backup]# yum install -y mailx
下载完成修改配置文件并手机打开邮箱账户通过手机短信方式
获取授权码
#发件人
set from=714845658@qq.com
#邮件服务器
set smtp=smtp.qq.com
#发件人用户名
set smtp-auth-user=714845658@qq.com
#发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
set smtp-auth-password=xxx
#登录方式
set smtp-auth=login
#邮件服务器协议及端口
set smtp=smtps://smtp.qq.com:465
#忽略证书
set ssl-verify=ignore
#指定证书位置
set nss-config-dir=/root/.certs
##########下面是获取证书############

第一步:mkdir -p /root/.certs
第二步:cd ./.certs/
 第三步: echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne \'/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p\' > ~/.certs/qq.crt
 
 第四步:certutil -A -n "GeoTrust SSL CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt
  第五步:  certutil -A -n "GeoTrust Global CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt
  第六步:  certutil -L -d /root/.certs
  第七步:certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
  ########获取证书之后发测试邮件#########
 echo wzh |mail -s \'测试邮件\' 714845658@qq.com

2.服务端配置文件

安装rsync
yun install -y rsync 

## 安装完成修改配置文件,一般配置文件是以.conf 或 .cnf 或 .cfg结尾
[root@backup ~]# vim /etc/rsyncd.conf
## 指定进程启动uid
uid = rsync
## 指定进程启动gid
gid = rsync
## rsync服务的端口
port = 873
## 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes
## 禁锢指定的目录
use chroot = no
## 最大连接数
max connections = 200
## 超时时间
timeout = 600
## 忽略错误
ignore errors
## 不只读(可读可写)
read only = false
## 不允许别人查看模块名
list = false
## 传输文件的用户
auth users = wzh_bak
## 传输文件的用户和密码文件
secrets file = /etc/rsync.passwd
## 日志文件
log file = /var/log/rsyncd.log
#####################################
## 模块名
[wzh]
## 注释,没啥用
comment = 123
## 备份的目录
path = /backup

# 3.根据配置文件内容,创建出来需要的用户,目录,密码文件...
# 3.1 创建用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
# 3.2 创建备份目录
[root@backup ~]# mkdir /backup
# 3.3 修改属组和属主
[root@backup ~]# chown -R rsync.rsync /backup/
# 3.4 创建用户名和密码存放的文件
[root@backup ~]# vim /etc/rsync.passwd
wzh_bak:123

[root@backup ~]# echo \'wzh_bak:123\' > /etc/rsync.passwd
# 3.5 修改密码文件的权限为600
[root@backup ~]# chmod 600 /etc/rsync.passwd

# 4.启动服务并且加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

# 5.检测端口
[root@backup ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      18373/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      18373/rsync        
# 6.检测进程
[root@backup ~]# ps -ef|grep [r]sync
root      18373      1  0 20:48 ?        00:00:00 /usr/bin/rsync --daemon --no-detach

3.服务端脚本(校验)

[root@backup ~]# cat md5sum.sh 
#!/bin/bash

#设置普通变量
D=$(date +%F)
IP=$(ifconfig eth1|awk \'NR==2 {print $2}\')
H=$(hostname)
bk_dir=/backup
local_dir=/backup/${H}_${IP}_${D}

#将校验结果发送到管理员邮箱
md5sum -c ${bk_dir}/*/jy.md5 |mail -s "$(date +%F)_$(hostname)_rsync备份校验结果" 714845658@qq.com

#保留六个月的备份结果其它的删除
find /backup/ -type d ! -mtime -180 ! -name \'backup\'  |xargs rm -rf

4.定时任务(服务端)

[root@backup ~]# crontab -l
#将/backup目录下的md5校验结果发送管理员邮箱 by王张行
05 1 * * * /bin/sh /root/md5sum.sh &>/dev/mull

Rsync备份案例
使用3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

角色 外网IP 内网IP 主机名
WEB 10.0.0.7 172.16.1.7 web01
NFS 10.0.0.31 172.16.1.31 nfs01
Rsync 10.0.0.41 172.16.1.41 backup
WEB 10.0.0.8 172.16.1.41 web02

客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除

脚本解决

##客户端需求

1.1首先在客户端编辑一个备份的脚本

[root@nfs ~]# vim bf.sh

注意:编辑脚本的时候一定要现在命令行实现,成功之后再加入到脚本里面,写一步实验一步,及时找到错误并改正。

1.2每天凌晨一点把备份目录传输到backup服务器

## 服务端需求

1.1:配置邮箱

下载mailx
[root@backup backup]# yum install -y mailx
下载完成修改配置文件并手机打开邮箱账户通过手机短信方式
获取授权码
#发件人
set from=714845658@qq.com
#邮件服务器
set smtp=smtp.qq.com
#发件人用户名
set smtp-auth-user=714845658@qq.com
#发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
set smtp-auth-password=xxx
#登录方式
set smtp-auth=login
#邮件服务器协议及端口
set smtp=smtps://smtp.qq.com:465
#忽略证书
set ssl-verify=ignore
#指定证书位置
set nss-config-dir=/root/.certs
##########下面是获取证书############

第一步:mkdir -p /root/.certs
第二步:cd ./.certs/
 第三步: echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne \'/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p\' > ~/.certs/qq.crt
 
 第四步:certutil -A -n "GeoTrust SSL CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt
  第五步:  certutil -A -n "GeoTrust Global CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt
  第六步:  certutil -L -d /root/.certs
  第七步:certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
  ########获取证书之后发测试邮件#########
 echo wzh |mail -s \'测试邮件\' 714845658@qq.com


OK,测试成功

1.2:测试校验结果,因为在客户端的脚本里已经写了校验部分,所以传输过来的文件是有检验文件的

测试结果也是OK的,那这样就可以把测试文件写进脚本l,根据要求

需要保留6个月的备份数据,其余的删除

1.3:测试脚本是否成功

命令行输入sh md5.sh

1.4:最后添加到定时任务,因为客户端是每天凌晨一点发送备份数据,那在服务端就把时间向后推迟五分钟


以上是关于linux系统rsync命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统备份还原工具4(rsync/数据同步工具)

Linux下数据备份命令scp、rsync和后台运行

Linux系统管理初步数据备份工具rsync

使用Rsync在 Linux 上传输文件的示例

linux rsync同步工具

Rsync(远程同步): inux中Rsync命令的实际示例