RSync 远程同步工具的使用

时间:2023-01-27 10:06:20

转自:http://www.cnblogs.com/siqi/archive/2012/11/22/2783460.html

RSync 远程同步工具的使用

RSync实现文件备份同步:

简介:

remote synchronize:一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息, rsync是用 “rsync 算法”提供了一个客户机     和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。因为rsync是一款如此有用            的软件,所以很多Linux的发行版本都将它收录在内了

特性:

能更新整个目录
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;
能用rsh、ssh 或直接端口做为传输入端口;
支持匿名rsync 同步文件,是理想的镜像工具;
架设rsync服务器:

  1.安装:

复制代码

yum方式安装

源码方式,注意安装gcc

tar xvf rsync-xxx.tar.gz
cd rsync-xxx
./configure –prefix=/usr/local
make ;make install
复制代码
rsync的主要有以下三个配置文件(需要手工创建):
/etc/rsyncd.conf(主配置文件)

/etc/rsyncd.secrets(密码文件)
  格式:user1:passwd1
  出于安全目的,文件的属性必需是只有属主可读。
  chown root.root rsyncd.secrets  #修改属主
  chmod 600 rsyncd.secrets

/etc/rsyncd.motd
  定义rysnc服务器信息的,也就是用户登录信息,可以为空
  类似ftp的欢迎页面
  示例:Welcome to use the mike.org.cn rsync services!

rsyncd.conf配置文件示例:

复制代码

Distributed under the terms of the GNU General Public License v2

Minimal configuration file for rsync daemon

See rsync(1) and rsyncd.conf(5) man pages for help

This line is required by the /etc/init.d/rsyncd script

告诉进程写到 /var/run/rsyncd.pid 文件中

pid file = /var/run/rsyncd.pid

指定运行端口,默认是873

port = 873

指定服务器IP地址

address = 192.168.1.171

服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题

uid = nobody

gid = nobody

uid = root
gid = root

一个安全选项 详情自己去查查

use chroot = yes

read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项

read only = yes

在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开

limit access to private LANs

hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
hosts deny=*

max connections = 5
motd file = /etc/rsyncd.motd

This will give you a separate log file

log file = /var/log/rsync.log

This will log every file transferred - up to 85,000+ per user, per sync

transfer logging = yes

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

#指定文件目录所在位置
[home]
path = /home
list=yes #是否可以列出目录
ignore errors # #忽略IO错误

auth users必须是在服务器上存在的真实的系统用户,如果你想用多个用户以,号隔开,比如auth users = easylife,root

auth users = root
secrets file = /etc/rsyncd.secrets
comment = This is RHEL 4 data

exclude是排除的意思,也就是说,要把/home目录下的easylife和samba排除在外; easylife/和samba/目录之间有空格分开

exclude = easylife/ samba/
复制代码
模块定义什么呢?
  主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的 数据是通过path 指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的

启动rsync服务器:

/usr/bin/rsync –daemon –config=/etc/rsyncd/rsyncd.conf

–config用于指定rsyncd.conf的位置,如果在/etc下可以不写/usr/bin/rsync –daemon –config=/etc/rsyncd/rsyncd.conf
rsync有六种不同的工作模式:

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
  -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

  rsync中的参数

  -r 是递归
  -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
  -z 传输时压缩;
  -P 传输进度;
  -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
  -e ssh的参数建立起加密的连接。
  -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
  –progress是指显示出详细的进度情况
  –delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
  –password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

一些实例:

复制代码
//注:server为modul名[server]
//列出rsync 服务器上的所提供的同步内容
rsync –list-only root@192.168.145.5::server
//列出目录:
rsync –list-only root@192.168.93.149::server

//从服务端取数据(客户端只会增加文件);
rsync -avzP root@192.168.93.149::server rhel4home[本地目录]

//从服务端取数据(使客户端的文件和服务端完全一致,会删除客户端多余的文件);
rsync -avzP –delete root@192.168.93.149::server ./

//密码从文件中读取: 注意此时的密码文件里面只需要写密码不要写用户名 和服务端的文件是不同的
rsync -avzP –delete –password-file=/etc/rsyncd.secrets root@192.168.93.149::server ./

//客户端向服务端提交文件(只需要把目录更换位置即可)
rsync -avzP –delete –password-file=/kang/sercet ./ root@192.168.93.149::server
复制代码