很早就知道使用rsync可以在linux和windows之间同步目录或文件,例如a服务器上的数据 同步到 b服务器上,而且下次同步时,只会对增量文件、删除文件、修改文件同步,使两个地方的数据保持一致,可以理解为两个地方的数据做镜像,只不过这个镜像不是时时的,而是运行一次rsync就镜像一次,一般用于数据的备份。 例如磁盘阵列数据的备份,网站数据的备份等,可以实现从 linux到linux,从linux到windows,从windows到linux,从windows到windows等各种方式。rsync备份比windows备份以及mirror备份有很多好处:不会有目录层数的问题,可以保持原来文件的权限、时间、软硬链接,传输效率高,可以做到差异镜像备份。
rsync分服务端和客户端,如果要将A服务器上的数据镜像备份到B服务器上, 那么A服务器上要运行服务端,B服务器上运行客户端,发起备份时是由客户端来发起,即从客户端发起命令将数据从服务端所在服务器备份到客户端所在服务器。
实际操作一个例子:
linux服务器 : 192.168.1.10
windows服务器: 192.168.1.20
要实现将 linux服务器上的 /home/data01 和 /data02两个目录及其中的文件备份到 windows服务器上的 d:\bak下。
操作方法:
1、在linux服务器上配置rsync服务端:
#rpm -qa|grep rsync (查看linux上是否已安装rsync)
#rpm -qa|grep xinetd (查看linux上是否已安装xinetd)
要使用rsync,rsync是必须要安装,默认的redhad已安装rsync,如果其他系统没安装请先行安装。xinetd默认也是安装的,但xinetd不是必须的,因为rsync可以独立启动,也可以由xinetd代为管理启动,两种方式启动都可以。
若无则安装,或者使用tar编译安装#rpm -ivh rsync-2.6.8-3.1.rpm或者yum install rsync(这是我使用的方法)yum install xinetd(这是我使用的方法)打开rsync服务
2、先定一下rsync通过什么方式启动,是独立启动还是通过xinnetd启动:(其实两种方式都可以)
下面分别说明两种启动方式:
1)通过xinetd服务启动rsync
修改/etc/xinetd.d/rsync文件,使其随xinetd启动而启动
vim /etc/xinetd.d/rsync
......将disable = yes 修改为 disable = no
disable = no
#chkconfig xinetd on
#chkconfig rsync on
启动rsync服务端:
/etc/init.d/xinetd restart
2)独立启动rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
判断rsync是否启动的方法:
如果是独立启动的rsync,可以查看进程 ps -ef | grep rsync
如果通过xinetd启动的rsync,没有rsync,那么就看看端口873是否已经起来 lsof -i :873 或者 netstat -an|grep 873
个人比较建议通过xinetd服务启动rsync。
下面我们要配置rsync的服务端配置文件:
首先我们需要配置rsync,打开配置文件/etc/rsyncd.conf(如果没有请创建它),修改相应的配置项,并增加以下内容:
uid = root # 备份以什么身份进行,用户ID(即用户名)
gid = root # 备份以什么身份进行,组ID(一般和用户名同)
#注意这个用户ID和组ID,如果要方便的话,可以设置成root,这样rsync几乎就可#以读取任何文件和目录了。
use chroot = no
max connections = 4 # 最大连接数为4,可以根据具体情况设置一般设置1-20
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[data01] # 指定认证的备份模块名
path = /home/data01 # 需要备份的目录
comment = BACKUP data01 # 注释
ignore errors # 忽略一些无关的IO错误
read only = true # 设置为只读
list = true # 不允许列文件
hosts allow=220.122.133.31 #允许连接的服务器ip,多个地址之间用空格隔开,如果允许所有,可以设置为*
hosts deny = 0.0.0.0/32
auth users = usrbak # 认证的用户名,如果没有这行,则表明是匿名
syslog facility = local5
secrets file = /etc/rsync.pass # 认证文件名,用来存放密码
[data02] # 指定认证的备份模块名
path = /data02 # 需要备份的目录
comment = BACKUP data02 # 注释
ignore errors # 忽略一些无关的IO错误
read only = true # 设置为只读
list = true # 不允许列文件
hosts allow=220.122.133.31 #允许连接的服务器ip,多个地址之间用空格隔开,如果允许所有,可以设置为*
hosts deny = 0.0.0.0/32
auth users = usrbak # 认证的用户名,如果没有这行,则表明是匿名
syslog facility = local5
secrets file = /etc/rsync.pass # 认证文件名,用来存放密码
这一段我们修改完成。
注意:如果同时还需要备份其它目录的话,可以直接在配置文件的后面继续增加一段配置内容。
然后为备份模块设置密码文件,如上例的密码文件为/etc/rsync.pass,使用编辑器创建这个文件,并输入用户名称和密码:
vi /etc/rsync.pass
输入以下内容:
usrbak:Ysnpkvte2enf #用户名usrbak 密码Ysnpkvte2enf 这里强烈建议将密码设置复杂一点,另外需要说明的是这个用户usrbak仅仅是为rsync备份时验证所用的,和linux的系统用户无关,即使linux上没有这个用户也没关系,这个用户随意设置,密码随意设置,只要在rsync客户端上运行rsync命令时输入这个用户的密码,验证通过就可以开始备份了。
这样,为rsync备份验证所用的用户usrbak设置了密码Ysnpkvte2enf。注意,出于安全目的,这个文件的属性必需是只有属主可读,否则rsync将拒绝运行。我们可以设置它的属性为600:
chmod 600 /etc/rsync.pass
设置rsync服务在系统启动时自动启动运行,可以通过setup工具来设置:
最后在服务器端我们需要启动rsync服务(目的是将刚才配置的conf立时生效):
/etc/init.d/xinetd restart 或者
/etc/init.d/xinetd reload (restart是重启自然新conf就会生效,reload是重新加载conf,新conf也会生效)
至此,服务器端配置完毕。 2、配置客户端
为了在Windows环境使用rsync工具,我们需要去下载cwRsync工具,这是一个rsync for windows的版本。
下载安装完成之后的目录结构类似下图所示:
现在我们可以在Windows环境下运行rsync工具了,我们先做一个测试看看是否能同步正常: C:\Program Files\cwRsync\bin>rsync -vzrtopg --progress --delete usrbak@192.168.1.10:/home/data01 /cygdrive/d/bak 上面这个命令行中-vzrtopg里的v是代表verbose(详细),z是代表zip(压缩),r是代表recursive(递归),topg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
应该可以看到:
password:
要求输入密码的提示,正确输入密码后就应该看到开始备份了。当然,也有可能出现类似下面的错误信息:
引起这种错误有几种可能性,一是你没有输入正确的用户名或密码,二是你的服务器端存储密码的文件没有正确的权限,也就是你的密码文件不是类似这样子的权限:-rw------- 1 root root
在备份完成之后,我们可以看到类似下图所示的状态:
如上,说明rsync客户端运行正常。
下面开始通过rsync客户端备份rsync服务端配置文件中的模块:
在rsync客户端的D盘根目录新建一个文件rsync.pass,里面的内容就是usrbak的密码:Ysnpkvte2enf,切记:客户端的密码文件中只有密码,服务端的密码文件中是 用户名:密码。
C:\Program Files\cwRsync\bin>rsync -vzrtopg --delete --progress usrbak@192.168.1.10::
data01 /cygdrive/d/bak/data01/ --password-file=/cygdrive/d/rsync.pass 注意 @ip后是两个冒号,表示data01是一个模块名,如果仅有一个冒号,就是具体的路径。对于模块名,服务器会到/etc/rsyncd.conf中查找路径; --delete可以根据需要决定是否加上,如果加上则服务端的数据删除后,下次同步后,客户端上的数据也会删除,如果不添加,则只会备份增加的数据,删除的数据不会删除。
上面的命令是备份data01模块的,如果还想备份data02,则再执行一次命令:
C:\Program Files\cwRsync\bin>rsync -vzrtopg --delete --progress usrbak@192.168.1.10::
data02 /cygdrive/d/bak/data02/ --password-file=/cygdrive/d/rsync.pass
如果要在客户端实现定时自动备份,可以建立一个批处理文件aa.bat:内容如下:
cd c:\program files\cwRsync\bin
rsync -vzrtopg --delete --progress usrbak@192.168.1.10::data01 /cygdrive/d/bak/data01/ --password-file=/cygdrive/d/rsync.pass
rsync -vzrtopg --delete --progress usrbak@192.168.1.10::data02 /cygdrive/d/bak/data02/ --password-file=/cygdrive/d/rsync.pass
然后将这个文件加入计划任务中即可。
附 rsync下载地址:
点击下载
|