首页 > 代码库 > rsync

rsync

什么是rsync

rsync一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。

 

三种主要的传输数据的方式

1. 单个主机本地之间的数据传输

2. 借助rcp, ssh等通道来传输数据

3. 以守护进程(socket)的方式传输数据(需要服务端客户端配合, centos中自带了客户端)

 

单个主机本地之间的数据传输:

#将a目录内容同步到b目录
rsync -r a b

#将/etc/hosts文件复制到/tmp/目录下
rsync /etc/hosts /tpm/

 

借助ssh通道来传输数据:

#将a目录下内容复制到远程主机的~/b目录下
rsync -r a/ -e ssh -p 22 huangxm@192.168.0.138:~/b

#将目录a复制到远程主机的~/b目录下,注意与上面的区别
rsync -r a -e ssh -p 22 huangxm@192.168.0.138:~/b

它相当与scp命令,同时也需要手动输入密码;如果不想手动输入密码,可以使用sshpass, 这样我们就可以写入crontab,做到定时同步

#安装sshpass
yum install -y sshpass

#同步目录a和远程主机的目录b
rsync -r a/ -e sshpass -pgoitinfo ssh -p22 huangxm@192.168.0.138:~/b

 

常用参数

-v    详细模式输出,给出传输进度等信息

-z    压缩传输  --compress-level=NUM  指定压缩级别 1-9, 9是最大压缩级别

-a    以归档方式传输,保留文件属性

        -r    递归传输

        -t    保持文件时间信息

        -o    保持文件属主信息

        -p    保持文件权限

        -g    保持文件属组信息

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

        -D    保持设备文件信息

        -l      保持软链接

        这些参数加起来等于 –a

-e    使用的信道协议,如ssh

--exclude=PATTERN    指定排除不需要传输的文件

--exclude-from=FILE    排除FILE中记录的文件

--delete   保证两边数据完全一样,如果源里没有该文件,就在目标目录删除

说明:

-avz  相当于 –vzrtopgDl

生产环境中常用: –avz 或 –vzrtopg

 

守护进程模式:

安装服务端:

#yum install rsync

配置文件:/etc/rsyncd.conf

vim /etc/rsyncd.conf
uid = rsync                        #用户id
gid = rsync
use chroot = no                    #安全性,内网一般不考虑,设为no
max connections = 200              #最多有多少个客户端连接我
timeout = 300                      #超时时间,秒
pid file = /var/run/rsyncd.pid     #pid文件
lock file = /var/run/rsync.lock    #传输时会给文件加锁
log file = /var/log/rsyncd.log     #日志文件
[test]                             #模块
path = /test/                      #客户端来同步,就是同步该目录
ignore errors                      #传输过程中遇到错误,自动忽略
read only = false                  #可读可写
list = false                       #不允许列表
hosts allow = 10.0.0.0/24          #允许的IP段
hosts deny = 0.0.0.0/32            #拒绝
auth users = rsync_backup          #这是个虚拟用户
secrets file = /etc/rsync.password #虚拟用户对应的密码文件

 

创建系统用户rsync用来启动服务

useradd rsync -s /sbin/nologin
授权
chown -R rsync.rsync /test

 

在/etc/rsync.password中添加虚拟用户

echo "rsync_backup:1234" > /etc/rsync.password

用户名和密码用:分隔。

 

设置权限密码文件权限

chmod 600 /etc/rsync.password

 

启动服务端, 以守护进程方式

#rsync --daemon

端口: tcp 873

添加开机启动

echo "/usr/bin/rsync --daemon" >> /etc/rc.local

 

客户端:

客户端只需要密码文件,文件里只存放密码:

echo "1234" > /etc/rsync.password

设置文件权限:

chmod 600 /etc/rsync.password

从服务端拉取文件:

rsync -avz rsync_backup@10.0.0.7::/test /data --password-file=/etc/rsync.password

注意:test是指test模块,也就是服务端配置文件中的[test];而且有两个冒号。

或者使用rsync协议

rsync -avz rsync://rsync_backup@10.0.0.7/test  /data --password-file=/etc/rsync.password

往服务端推送文件:

rsync -avz /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password

 

排除指定文件和目录

排除文件a:

rsync -avz --exclude=a /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password

排除多个文件:

rsync -avz --exclude={a,b} /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password

也可以将要排除的文件和目录写入一个文件,一行一个:

vim excefile.conf

test.py
*.log
dir1

使用—exclude-from

rsync -avz --exclude-from=excefile.conf /data/ rsync_backup@10.0.07::/test --password-file=/etc/rsync.password

 

在服务端设置要排除的文件:

在配置文件中加上:

exclude=a b c/d      #c/d是指c目录下的d

重启:

kill `cat /var/run/rsyncd.pid`

rsync –daemon

 

服务器端共享多个目录

uid = rsync         #用户id
 gid = rsync
 use chroot = no     #安全性,内网一般不考虑,设为no
 max connections = 200    #最多有多少个客户端连接我
 timeout = 300     #超时时间,秒
 pid file = /var/run/rsyncd.pid     #pid文件
 lock file = /var/run/rsync.lock    #传输时会给文件加锁
 log file = /var/log/rsyncd.log     #日志文件
                       
 ignore errors     #传输过程中遇到错误,自动忽略
 read only = false   #可读可写
 list = false    #不允许列表
 hosts allow = 10.0.0.0/24   #允许的IP段
hosts deny = 0.0.0.0/32     #拒绝
auth users = rsync_backup     #这是个虚拟用户
secrets file = /etc/rsync.password    #虚拟用户对应的密码文件
                        
[test]       #模块
path = /test/    #客户端来同步,就是同步该目录
[data]
path = /data/

写配置文件时,尽量把相同的配置放到公共区域,自己特有的放到自己的模块下。

rsync