rsync介绍

 




rsync 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息、实现数据的备份迁移特性。Rsync软件适用于unlxlinuxwindows等多种操作系统平台。可以实现本地或者异地备份

rsync包含的功能




1、rsync包含cp功能

命令 参数 源文件 目标文件

[root@backup caojiaoyue]# ls /tmp/
[root@backup caojiaoyue]# rsync -r /caojiaoyue/ /tmp/
[root@backup caojiaoyue]# ls /tmp/
cao  jiao  yue
[root@backup caojiaoyue]# ls
cao  jiao  yue
[root@backup caojiaoyue]#

2、rsync包含rm功能

要实现rm功能其实涉及到一个无差异同步。其原理是创建一个空目录。然后把这个空目录去同步要删除的目录。注意如果删除但个文件就实现不了。只能删除单个文件的内容

[root@backup /]# ls /caojiaoyue/
1  2  3
[root@backup /]# ls kowenj
[root@backup /]# rsync -r --delete kowenj/ /caojiaoyue
[root@backup /]# ls /caojiaoyue/
[root@backup /]#

注意源必须要是空目录必须加上/

错误写法rsync -r --delete 源目录 目标目录 这样是会把源目录复制到目标目录的

正确写法rsync -r --delete 源目录/ 目标目录

一般情况还是用rm吧

3、rsync包含ls功能

[root@backup /]# rsync /etc/
drwxr-xr-x        4096 2017/05/05 09:19:13 .
-rw-------           0 2017/05/03 08:30:18 .pwd.lock
-rw-r--r--       12288 2017/05/04 12:22:51 .rsyncd.conf.swp
-rw-r--r--        4439 2016/04/12 15:56:23 DIR_COL

4、rsync包含scp功能

scp传输法

[root@backup /]# scp   /caojiaoyue/* 10.0.0.31:/root/
[email protected]'s password:  注意这里提示输入的密码是接收这些文件机器root用户的密码
ca                                                                                     100%    0     0.0KB/s   00:00   
ca1                                                                                    100%    0     0.0KB/s   00:00   
ca2                                                                                    100%    0     0.0KB/s   00:00   
[root@backup /]#

但是scp是全量传输,也就是不管对方机器上有没有你传输的文件。你都会传过去。万一有文件名字是一样的。但是内容不一样的话。就会覆盖掉。

rsync传输法

[root@caojiaoyue ~]# rsync -r -e "ssh -p 22" /root/caojiao 10.0.0.11:/tmp
The authenticity of host '10.0.0.11 (10.0.0.11)' can't be established.
RSA key fingerprint is 01:9a:da:25:04:f2:79:cb:d5:0d:f2:31:6b:8a:fa:f8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.11' (RSA) to the list of known hosts.
[email protected]'s password:
[root@caojiaoyue ~]#

命令 参数  源文件 IP:目标文件 

注意rsync传输文件是增量的,也就是说 目标机器和源机器上共有的不会发。只发没有的。从而大大提高了效率

有没有想过你可以传输文件给别的机器。那么你也可以从别的机器拿数据啊。官方解释为拉和推(pull 和 push)

其实可以这样理解 如果目标文件在你的机器上那么就是从别人的机器上拿过来啊。如果目标文件在别人机器上那么肯定就是从你机器上发过去啊

                                          从别人机器 上拿文件

                                          命令 参数    IP目标文件   源文件

                                          发送给别人机器上

                                          命令 参数  源文件 IP目标文件

5、rsync守护进程方式传输(工作中常用的。通过守护进程方式实现实时备份等等)

第一步配置rsync服务端的配置文件

注意机器上以前没有做过守护进程方式的传输。默认是没有配置文件的需要你去创建在编辑的

rsync的配置文件是/etc/rsyncd.conf 注意名字一样。如果不是这个名字的话那么rsync是不知道你配置的那个文件是他的配置文件

                                vim /etc/rsyncd.conf 

           
           uid = rsync  执行用户的uid
           gid = rsync  执行用户的gid
           use chroot = no
           max connections = 200 最大连接数
           timeout = 300      超过时间如果客户端300秒没有发送文件的话就会自动断开
           pid file = /var/run/rsyncd.pid   存储这个服务的进程号文件
           lock file = /var/run/rsync.lock    锁文件  一个客户端没有传送另外一台传输不了。为了避免负载
           log file = /var/log/rsyncd.log  服务的日志文件
           ignore errors  忽略错误
           read only = false     是否为只读文件。当然不是啊 所以false (trep)
           list = false               模块列表是否可以让客户端看
           hosts allow =172.16.1.0/24   可以传输的ip段
           hosts deny = 0.0.0.0/32         不可以传输的IP段 
           auth users = rsync_backup    传输时候用的认证用户(理解为账号吧)
           secrets file = /etc/rsync.password  传输时候用的认证密码
           [backup]     模块名字
           comment = "backup dir by oldboy"
           path =/backup    存储的地址

配置文件里面文件地址等可以自己改

第二步我们刚刚配置文件不是指定了运行这个程序的用户吗。如果有就不用创建了。没有就创建吧(为了安全一般用不可以登陆的)

 useradd -s /sbin/nologin -M rsync 创建一个不可以登陆的用户

 id rsync 查看下

第三步创建一个存储的目录应为我们配置文件里已经写了为/backup就创建他吧

mkdir /backup

注意的是我们不是用rsync这个用户创建的目录。但是我们是用这个用户来运行,为了不发生权限问题我们把这个文件的拥有者和属组改成rsync

chown -R  rsync.rsync /backup   递归改因为这当你创建这个文件后他会生成一个的隐藏文件。比如点和点点

第四步创建一个存储密码的文件。因为我们配置文件已经指定了/etc/rsync.password所以我们就用它吧

echo rsync_backup:123456 >>/etc/rsync.password

rsync_backup是用户(即账号)123456就是密码。如果有多个用户或者密码的话换行写不要用逗号。但是前提是多个用户,要在配置文件里先申明

第五步密码文件创建好了。默认文件的权限是644 那么就是谁都可以看这个文件。这样的密码岂不是明文的。所以我们要把文件改成600或者400。只要拥有者有看的权限就好了。注意这个文件的拥有者不要是rsync了。如果改了的话。那传输也是会不成功的。这个文件的拥有者必须是root

第六步启动rsync这个守护进程

rsync --daemon

就可以实现客户端传输文件了

守护进程客户端传输文件

rsync 参数 源文件 用户@IP::目标文件

命令 参数 源文件 用户@IP::目标文件

和scp不同的收目标文件和IP用两个::分割

注意:守护进程方式不支持服务端向没有配置的客户端拿东西。因为客户端什么都没有配置。比如说账号密码等。非要拿的话,就变成了scp模式了

wKiom1kMQx6BGb5BAAA73hHXMRA673.png

还可以不输入密码模式传输,

原理是你把密码,放在一个文件中然后指定密码所在

命令 参数 源文件 用户@IP::目标文件 --passwrod-frel=存储密码的文件地址

注意存储密码的文件要改成000或者400或者600否则会报密码文件不能被其他用户访问的错

srync参数

--delete 实现无差异数据同步

----bwlimit=RATE实现数据传输过程中限速

-v详细模式输出,

-a归档模式,表示以递归方式传输文件。并保持所有文件属性,等于rtopgDl(有星的都包涵)

-r 对子目录以递归模式,即目录的所有文件都同样传输,注意是小写r  **

-t 保持文件时间信息     **

-o保持文件属主信息     **

-P显示同步的过程及传输的进度等信息

-p保持文件权限         **

-g保持文件属组信息     **

-D保持设备文件信息     **

-l保留设备软链接        **

-e使用的信道协议,例如指定ssh         -e “ssh -p 22”

--exclude=PATTERN 指定排除不需要传输的文件信息类似于tar的排除

-exclude-from=file 文件名所在的目录文件,既可以实现排除多个文件类似于tar的排除多个