Linux-12-Rsync

Rsync是一款开源的,快速的,多功能的,可实现增量的本地货远程数据镜像同步备份的工具。

Rsync特性

1.支持拷贝特殊文件,如连接、设备等

2.可以有排除指定文件或目录同步的功能,相当于打包命令tar

3.可以做到保持原来文件或目录的权限、时间、软硬连接等所有属性不变

4.可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高

5.可以使用rcp、rsh、ssh等方式来配合传输文件,也可以通过socket连接

6.支持匿名或认证的进程模式传输,方便进行数据备份及镜像

 

Rsync命令及参数

rsync [OPTION...] SRC... [DEST]

 常用参数选项说明

-v (verbose) 详细模式输出,传输时的进度信息
-z (compress) 传输时进行压缩,--compress-level=NUM可按照级别压缩
-r (recursive) 对子目录进行递归,目录下的所有目录都同样传输
-t (times) 保持文件时间信息
-o (owner) 保持文件属组信息
-p (perms) 保持文件权限
-g (group) 保持文件属组信息
-P (progress) 显示同步的过程及传输是的进度
-a (archive) 归档模式,表示以递归方式传输文件,并保持文件属性,等于-rtopgDl
-e (rsh=COMMEND) 使用的信道协议,指定替代rsh的shell程序,如ssh
-D (devices) 保持设备文件信息
-l (links) 保留软连接
--exclude=PATTERN 指定排除不需要传输的文件模式

 

 

Rsync工作方式

1.本地数据传输(local-only mode)

rsync [OPTION...] SRC... [DEST]

1.rync是同步命令

2.[OPTION...]是同步时的参数选项

3.SRC是源,即待拷贝的文件、目录或分区

4.[DEST]是目的文件、目录或分区

 

实例

[test@C64-5-S ~]$ rsync -avz /etc /tmp
sending incremental file list
etc/
etc/.pwd.lock
etc/DIR_COLORS
etc/DIR_COLORS.256color

 

2.通过rcp、ssh等通道传输

拉取:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推送:rsync [OPTION...] SRC... [USER@]HOST:DEST

1.rync是同步命令

2.[OPTION...]是同步时的参数选项

3.[USER@]HOST...为Rsync同步的远程的连接用户和主机地址

4.SRC是源,即待拷贝的文件、目录或分区,和HOST之间用一个冒号连接

5.[DEST]是目的文件、目录或分区

 

实例

由于之前已经做过服务器间的免秘钥认证,所以这里直接执行命令就可以了

[syner@C64-5-S ~]$ rsync -avzP -e 'ssh -p 52113' syner@2.2.2.6:/home/syner/temp ~
receiving incremental file list
temp/
temp/tmp.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)

sent 34 bytes  received 114 bytes  296.00 bytes/sec
total size is 0  speedup is 0.00
[syner@C64-5-S ~]$ rsync -avzP ~/temp/ -e 'ssh -p 52113' syner@2.2.2.6:/home/syner/temp
sending incremental file list

sent 57 bytes  received 12 bytes  138.00 bytes/sec
total size is 0  speedup is 0.00

 

3.以守护进程方式传输数据

拉取:1. rsync [OPTION...] [USER@]HOST::SRC... [DEST]
     2. rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推送:1. rsync [OPTION...] SRC... [USER@]HOST::DEST
     2. rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

做之前要确保服务端S与客户端B、C之前双向的ssh key免秘钥已经配置好了

首先检查双向ssh免秘钥是否已经配置好

[syner@C64-5-S ~]$ ssh -p 52113 2.2.2.6 /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:79:36:89  
          inet addr:2.2.2.6  Bcast:2.2.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe79:3689/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60154 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30705 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14749577 (14.0 MiB)  TX bytes:26731727 (25.4 MiB)

[syner@C64-5-S ~]$ ssh -p 52113 2.2.2.7 /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:BA:45:99  
          inet addr:2.2.2.7  Bcast:2.2.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feba:4599/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:52654 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7334 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15527023 (14.8 MiB)  TX bytes:946738 (924.5 KiB)
[syner@C64-6-B ~]$ ssh -p 52113 2.2.2.5 /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CA:07:AA  
          inet addr:2.2.2.5  Bcast:2.2.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feca:7aa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81709 errors:0 dropped:0 overruns:0 frame:0
          TX packets:39786 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:30099514 (28.7 MiB)  TX bytes:27115850 (25.8 MiB)
[syner@C64-7-C ~]$ ssh -p 52113 2.2.2.5 /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CA:07:AA  
          inet addr:2.2.2.5  Bcast:2.2.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feca:7aa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81736 errors:0 dropped:0 overruns:0 frame:0
          TX packets:39805 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:30103541 (28.7 MiB)  TX bytes:27120153 (25.8 MiB)

配置服务端 

(1)编写配置文件

[root@C64-5-S ~]# vi /etc/rsyncd.conf

#rsync_config
uid=root
gid=root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[syner]
path = /home/syner
ignore = errors
read only = false
list = false
hosts allow = 2.2.2.6/32,2.2.2.7/32
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
exclude=/home
~
~

参数说明

uid = rootrsync使用的用户,缺省uid为-2,通常为nobody
gid = root

rsync使用的组(用户所在的组),缺省gid为-2,通常为nobody

use chroot = no

如果为true,daemon会在给客户端传输文件前“chroot to the path”,这是rsync安全的一个配置,

因为我们大多数都是在内网使用rsync,所以不配置也可以

max connection = 200设置最大连接数,默认为0,意思是无限制,负值为关闭这个模块
timeout = 400默认为0,永不超时,建议改为300-600(5-10分钟)
pid file = /var/run/rsyncd.pid

rsync daemon启动后将其进程PID写入此文件,如果这个文件已经存在,rsync进程不会覆盖该

文件,而是会终止

lock file = /var/run/rsyncd.lock指定lock文件来支持“max connection”参数,是得总连接数不会超过限制
log file = /var/log/rsyncd.log不设置或设置错误,rsync会使用syslog输出相关日志信息
ignore errors忽略IO错误
read only = false指定客户端是否可以上传文件,默认对所有模块都为true
list = false是否允许客户端查看可用模块列表,默认为true
hosts allow = 2.2.2.6/32指定可以连接的客户端主机名或IP地址或地址段,默认无此参数,即都可以连接
host deny = 0.0.0.0/32指定不可以连接的客户端的主机名或IP地址或地址段,默认无此参数,即都可以连接
auth user = rsync_backup

指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要再本地系统中存在,默认

所有用户无密码访问(anonymous rsync)

secrets file = /etc/rsync.password指定用户名和密码存放的文件,格式 用户名:密码 密码不超过8位
[syner]模块名称,需要用中括号括起来,起名没有特殊要求,但是最好是有意义的名称,方便维护
path = /home/syner在这个模块中,daemon使用的文件系统或目录,目录的权限要和配置文件中的权限一致
#exclude = /home排除指定文件或目录,相对路径

(2)配置用于rsync同步的账号、密码及账号文件权限

[root@C64-5-S ~]# echo "rsync_backup:syner" >/etc/rsync.password
[root@C64-5-S ~]# chmod 600 /etc/rsync.password 
[root@C64-5-S ~]# cat /etc/rsync.password 
rsync_backup:syner
[root@C64-5-S ~]# ll /etc/rsync.password 
-rw------- 1 root root 19 Sep 24 04:24 /etc/rsync.password

(3)以守护进程方式启动rsync服务

[root@C64-5-S ~]# rsync --daemon
[root@C64-5-S ~]# ps -ef | grep rsync|grep -v grep
root     11589     1  0 04:29 ?        00:00:00 rsync --daemon
[root@C64-5-S ~]# netstat -lnt| grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      
tcp        0      0 :::873                      :::*                        LISTEN 
[root@C64-5-S ~]# lsof -i tcp:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   11589 root    4u  IPv4  61287      0t0  TCP *:rsync (LISTEN)
rsync   11589 root    5u  IPv6  61288      0t0  TCP *:rsync (LISTEN)

可选参数

--daemon以守护进程方式启动rsync服务
--address绑定指定IP地址提供服务
--config=FILE更改配置文件路径,而不是默认的/etc/rsyncd.conf
--port=PORT更改其他端口提供服务,而不是缺省的873端口

(4)设置rsync服务开机自启动

[root@C64-5-S ~]# echo "/usr/bin/rsync --daemon">>/etc/rc.local 
[root@C64-5-S ~]# tail -3 /etc/rc.local 
/etc/init.d/rpcbind start
/etc/init.d/nfs start
/usr/bin/rsync --daemon

关闭rsync服务

[root@C64-5-S ~]# pkill rsync

启动rsync服务

[root@C64-5-S ~]# rsync --daemon

也可以通过编写脚本当成服务进行控制

[root@C64-5-S ~]# vi /etc/init.d/rsyncd
#!/bin/sh
#author Paul
#
#rsync  start/stop rsync service

#
#chkconfig: 35 13 91
#description:this is rsync service management shell script
#process name:rsyncd

#source function library
. /etc/rc.d/init.d/functions

start(){
  rsync --daemon

  if [ $? -eq 0 -a `ps -ef | grep -v grep|grep rsync|wc -l` -gt 0 ];then
    action "Starting Rsync:" /bin/true
  else
    action "Starting Rsync:" /bin/false
  fi
}

stop(){
  pkill rsync
  if [ `ps -ef | grep -v grep | grep "rsync --daemon" | wc -l` -lt 1 ];then
    action "Stopping Rsync:`ps -ef | grep -v grep | grep rsync | wc -l` "/bin/true
  else
    action "Stopping Rsync:`ps -ef | grep -v grep |grep "rsync --daemon"|wc -l`" /bin/false
  fi
}

case $1 in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload)
    $0 stop
    $0 start
    ;;
*)

编译

[root@C64-5-S ~]# yum -y install dos2unix
Loaded plugins: fastestmirror, security
Setting up Install Process
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                   | 3.7 kB     00:00     
extras                                                                 | 3.4 kB     00:00     
extras/primary_db                                                      |  26 kB     00:00     
updates                                                                | 3.4 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package dos2unix.x86_64 0:3.1-37.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================
 Package               Arch                Version                    Repository         Size
==============================================================================================
Installing:
 dos2unix              x86_64              3.1-37.el6                 base               16 k

Transaction Summary
==============================================================================================
Install       1 Package(s)

Total download size: 16 k
Installed size: 18 k
Downloading Packages:
dos2unix-3.1-37.el6.x86_64.rpm                                         |  16 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : dos2unix-3.1-37.el6.x86_64                                                 1/1 
  Verifying  : dos2unix-3.1-37.el6.x86_64                                                 1/1 

Installed:
  dos2unix.x86_64 0:3.1-37.el6                                                                

Complete!
[root@C64-5-S ~]# dos2unix /etc/init.d/rsyncd 
dos2unix: converting file /etc/init.d/rsyncd to UNIX format ...

授权

[root@C64-5-S ~]# chmod 700 /etc/init.d/rsyncd 

加入自启动服务

[root@C64-5-S ~]# chkconfig rsyncd on
[root@C64-5-S ~]# chkconfig --list rsyncd
rsyncd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

这样就可以以服务的形式进行启停

[root@C64-5-S init.d]# /etc/init.d/rsyncd stop
Terminated
[root@C64-5-S init.d]# /etc/init.d/rsyncd start
Starting Rsync: [  OK  ]

配置客户端

配置rsync的密码(这里不需要账号了),并修改权限

[root@C64-6-B ~]# echo "syner" > /etc/rsync.password
[root@C64-6-B ~]# chmod 600 /etc/rsync.password 

测试

[syner@C64-6-B ~]$ tree
.
└── test
    └── test.txt

1 directory, 1 file
[syner@C64-6-B ~]$ rsync -avzP /home/syner/test rsync_backup@2.2.2.5::syner --password-file=/etc/rsync.password 
sending incremental file list
test/
test/test.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)

sent 106 bytes  received 31 bytes  274.00 bytes/sec
total size is 0  speedup is 0.00

在服务端检查是否推送到了

[syner@C64-5-S ~]$ tree
.
└── test
    └── test.txt

1 directory, 1 file

另一种推送语法

rsync -avzP /home/syner/test rsync://rsync_backup@2.2.2.5/syner --password-file=/etc/rsync.password 

抓取数据

[syner@C64-6-B ~]$ rsync -avzP rsync://rsync_backup@2.2.2.5:/syner  /tmp --password-file=/etc/rsync.password
[syner@C64-6-B tmp]$ rsync -avzP rsync_backup@2.2.2.5::syner /tmp --password-file=/etc/rsync.password 

 

P.S.在推送时可以加--delete参数,意思是如果我推送目录中没有的,远端目录也应该没有(即删除多余项目),这样做可以保证rsync两端目录保持高度一致。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值