rsync

Posted hsgoose

tags:

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

1、什么是rsync?

rsync,Rsync英文全称为Remote synchronization 缩写rsync

是开源、高速的、可实现本地以及远程,全量以及增量的数据复制(拷贝)工具。

Rsync有3种传输数据模式,具体介绍如下。

  • 1.本地(Local)数据传输模式

Rsync的本地数据传输模式,很类似于cp本地复制命令,可以实现文件、目录的移动备份等功能,所不同的是Rsync有增量复制的功能。

  • 2.远程Shell数据传输模式

远程Shell数据传输模式一般是借助通道(如SSH)在两台服务器之间进行复制数据,这两台服务器之间是对等的,没有客户端与服务端之分,整个过程类似于scp远程复制命令,所不同的是Rsync有增量复制的功能,但缺少scp的加密复制的功能。(默认其实是加密的 因为使用了 -e ssh)

  • 3.守护进程(Daemon)传输模式

守护进程传输模式是在客户端与服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制。以上几种Rsync的工作方式,可以通过man rsync帮助或者查看官方手册获得。下面分别对上面3种模式进行详细说明,帮助初学者掌握Rsync软件工具的应用。

关于2,0版本和3.0版本

在CentOS5系统上,Rsync软件版本默认为2.x,同步增量复制数据原理是把所有的文件比对一遍,然后再进行数据同步。在CentOS6和CentOS7系统上,Rysnc软件版本默认为3.x,增量复制数据的原理是一边比对差异,一边对差异的数据部分进行复制。从增量复制数据的效率上而言,Rsync 3.x版本比Rsync 2.x更有优势一些。

2、rsync的1V4

  • 本地备份数据 cp
[root@nfs01 backup]# cp /etc/hosts /tmp
[root@nfs01 backup]# ll /tmp/hosts
-rw-r--r-- 1 root root 371 May  6 16:11 /tmp/hosts
[root@nfs01 backup]# rsync /etc/hosts /tmp/host_rsync
[root@nfs01 backup]# ll /tmp/host_rsync
-rw-r--r-- 1 root root 371 May  6 16:12 /tmp/host_rsync
  • b 远程备份数据 scp

    scp -rp /etc/hosts root@172.16.1.41:/backup
    root@172.16.1.41‘s password:
    hosts 100% 371 42.8KB/s 00:00
    -r --- 递归复制传输数据
    -p --- 保持文件属性信息不变
    [root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync
    root@172.16.1.41‘s password:

  • c 替代删除命令

rm命令
[root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup
root@172.16.1.41‘s password: 
--delete   实现无差异同步数据
面试题: 有一个存储数据信息的目录, 目录中数据存储了50G数据, 如何将目录中的数据快速删除
rm /目录/* -rf
  • d 替代查看文件命令 ls
[root@backup ~]# ls /etc/hosts
/etc/hosts
[root@backup ~]# rsync /etc/hosts
-rw-r--r--            371 2019/05/06 11:55:22 hosts

3、3种传输数据模式

  • 1.本地(local) 相当于cp命令 但cp是全量 rsync是增量

rsync	   [OPTION...]	      SRC...	    [DEST]
  • 2.远程Shell模式

借助类似ssh隧道传输数据,适合不同的机器之间复制。

异地拷贝,相当于scp,区别scp是远程全量拷贝)

pull,拉:从远端拉取到本地。

语法:

rsync    [OPTION...] [USER@]HOST:SRC...         	[DEST] 
rsync命令	参数选项	 [认证用户]@[主机地址]:[源路径]	 本地路径

push,推:从本地推到远端。

语法:

rsync	    [OPTION...]   SRC... 	 [USER@]HOST:[DEST]         
rsync命令  	参数选项	本地路径 [认证用户]@[主机地址]:[目标路径]

示例

rsync -avz /opt/ root@192.168.100.17:/opt/
  • 3.rsync守护进程模式

该复制使用系统用户进行存在安全隐患,而使用普通用户进行又会导致权限不足

因而使用守护进程模式 定义一个虚拟用户

步骤:

  • 下载安装软件

  • 编写配置文件

  • 创建rsync服务的虚拟用户 创建备份目录并修改属主属组信息

  • 创建备份服务认证密码文件

  • 启动备份服务

1.安装

 yum install -y rsync 

2.配置配置文件

##全局模块
uid = rsync                                #访问/backup的用户
gid = rsync                                #访问/backup的用户组
port = 873                                 #监听端口
fake super = yes                           #3.12版本以后   无需让rsync以root身份就可以存储
use chroot = no                            #关闭假根目录   就是限制不能出指定的目录
max connections = 200                      #并发连接数
timeout = 300                              #超时时间
ignore errors                              #忽略错误
read only = false                          #可读写
list = false                               #不能(列表,就是列出模块)
hosts allow =172.16.1.0/24                 #内网网段。
hosts deny = 0.0.0.0/32                    #什么网段不让连。
auth users = rsync_backup                  #认证虚拟用户(客户端连接使用的用户)。
secrets file = /etc/rsync.password         #认证虚拟用户密码文件。
##局部模块
[backup]                                   #模块标签
comment = "backup dir by oldboy"           #注释
path = /backup                             #备份的路径

说明:

  • 1.fake super

rsync在进行推送到服务端时 ,需要将文件所属进行修改 ,默认文件权限为原本文件权限 但是chgrp命令只有root可以使用 因此使用伪权限 或者在客户端推送的时候,将权限改为服务端rsync指定的用户

  • 2.list = false

如过不为false 客户端可以看到模块 容易导致危险

[root@rsync ~]# rsync -avz /etc/passwd rsync_backup@192.168.100.13:: backup          "backup dir by oldboy"
  • 3.黑白名单
hosts allow =172.16.1.0/24  #内网网段。

hosts deny = 0.0.0.0/32     #什么网段不让连。

默认情况下 白名单高于黑名单 (即为白名单允许 黑名单禁止 结果为允许)

3.创建rsync服务的虚拟用户与备份目录

[root@rsync ~]# useradd -M -s /sbin/nologin rsync
[root@rsync ~]# mkdir  /backup  
[root@rsync ~]# chown -R rsync.rsync /backup

4.创建备份服务认证密码文件

[root@rsync ~]# 
echo "rsync_backup:1" > /etc/rsync.password 
chmod 600  /etc/rsync.password    ##一定且必须为600  否则会认证失败

扩:

文件不能有空格 查看空格命令

cat -A   或vim 里   set list 

5.启动服务

systemctl start rsyncd

systemctl enabled rsyncd

测试

[root@rsync ~]# rsync -avz /etc/passwd rsync_backup@192.168.100.13::backup      

提示:

在使用rsync命令对目录数据进行本地或远程复制时,目录名称后面是否加“/”,产生的复制效果是不一样的。 目录后面不加“/”,会将/oldboy_dir目录及目录下面的文件内容一并复制到tmp目录中;如果目录后面加“/”, 会将/oldboy_dir目录下面的文件内容复制到tmp目录中,但oldboy_dir目录本身没有被复制.

参数:

-a                         #归档模式传输,等于tropgDl
-v                         #详细模式输出,打印速率,文件数量等
-z                         #传输时进行压缩以提高效率
#以上为常用参数  包括如下的限速
-r                         #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t                         #保持文件时间信息
-o                         #保持文件属主信息
-p                         #保持文件权限
-g                         #保持文件属组信息
-l                         #保留软连接
-P                         #显示同步的过程及传输时的进度等信息
-D                         #保持设备文件信息
-L                         #保留软连接指向的目标文件
-e                         #使用的信道协议,指定替代irsh的shell程序
--exclude=PATTERN          #指定排除不需要传输的文件模式  可绝对  可相对
--exclude-from=file        #文件名所在的目录文件(即要排除的文件名写到一个文件里)
--bwlimit=100              #限速传输(默认传输为全速  会拉满带宽,导致业务中断    单位M)
--partial                  #断点续传
--delete                   #让目标目录和源目录数据保持一致

强制数据一致性

--delete用法

对于同一个文件或者文件夹 上传文件与服务段对比 多增少删

[root@clinet~]# rsync -avz /opt rsync_backup@192.168.100.13::backup --delete 

免密方法:

方法1:认证密码文件

[root@clinet~]# echo "1" > /etc/rsync.password 
[root@clinet~]# chmod 600 /etc/rsync.password ##非必需 只是为了保证安全 
[root@clinet~]# rsync -avz /opt rsync_backup@192.168.100.13::backup  --password-file=/etc/rsync.password

方法2:

[root@clinet~]#  echo ‘ export RSYNC_PASSWORD=1‘ >>/etc/bashrc 
[root@clinet~]#  tail -1 /etc/bashrc 
 export RSYNC_PASSWORD=1
[root@clinet~]# . /etc/bashrc 
[root@clinet~]# echo $RSYNC_PASSWORD
1

4.rsync工作原理

技术图片







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

svn 结合rsync 的代码发布系统

配置 rsync 报错

saltstack+git+rsync发布代码

配置rsync+inotify进行资源或代码同步

rsync

Rsync