RSync实现文件备份同步

来源:互联网 发布:金融网络销售是安全吗 编辑:程序博客网 时间:2024/05/18 00:03

转自:http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html


架设rsync服务器比较简单,写一个配置文件rsyncd.conf。文件的书写也是有规则的,我们可以参照rsync.samba.org 上的文档来做。当然我们首先要安装好rsync这个软件才行;

1.rsync安装
sudo apt-get  install  rsync
2.配置rsync
  rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)
  (A)配置主配置文件(/etc/rsyncd.conf),该文件默认不存在,请创建它。
  touch -f /etc/rsyncd.conf  vim /etc/rsyncd.conf
  例如,我们要将备份服务器上面的/root/001/sirius_kai目录下面的内容,并且要其中的
  "assets/  nbproject/  protected/runtime/ protected/config/main.php"的目录和文件排除掉
# 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 scriptpid file = /var/run/rsyncd.pid   port = 873address = 192.168.0.79 uid = root   gid = root  use chroot = yes  read only = yes #limit access to private LANshosts allow=192.168.0.0/255.255.255.0hosts deny=*max connections = 5 motd file = /etc/rsyncd.motd#This will give you a separate log filelog file = /var/log/rsync.log#This will log every file transferred - up to 85,000+ per user, per sync#transfer logging = yeslog format = %t %a %m %f %bsyslog facility = local3timeout = 300[kai_home]path = /root/001/sirius_kailist = yes ignore errors auth users = rootsecrets file = /etc/rsyncd.secrets  comment = This is a test rsync configuration.exclude = assets/  nbproject/  protected/runtime/ protected/config/main.php
  (B)配置服务器信息文件(/etc/rysnc.motd)
  它是定义rysnc服务器信息的,也就是用户登录信息。
  比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 linuxsir.org ftp ……。 
  当然这在全局定义变量时,并不是必须的,你可以用#号注掉或删除。
  touch -f /etc/rysnc.motd  vim /etc/rysnc.motd
  在这里我们在文件中加入如下信息:
+++++++++++++++++++++++++++++++++++++++++++++++     Welcome to use the test rsync services!              1986------2013+++++++++++++++++++++++++++++++++++++++++++++++
  (C)设置密码文件(/etc/rsyncd.secrets)
  密码文件格式很简单,格式为
  用户名:密码
  touch -f /etc/rsyncd.secrets  vim /etc/rsyncd.secrets
  这里配置密码文件内容为:
root:rootadmin
  (D)修改配置文件属性
  #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!
  chown root.root /etc/rsyncd.secrets  #修改属主  chmod 600 /etc/rsyncd.secrets        #修改权限
3.rsyncd.conf服务器的配置详解
(A)全局定义
在rsync服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;
#告诉进程写到 /var/run/rsyncd.pid 文件中pid file = /var/run/rsyncd.pid  #指定运行端口,默认是873,您可以自己指定;port = 873 #指定服务器IP地址address = 192.168.0.79#服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 #如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。为了偷懒方便,可以使用root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。uid = nobody   gid = nobdoy  #用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。#缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试 use chroot = yes #read only是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;#如果要让客户端上传文件到服务器上,则需要将该选项设置为"no"read only = yes #在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 #客户端最多连接数max connections = 5   #motd file是定义服务器信息的,要自己写rsyncd.motd文件内容。当用户登录时会看到这个信息。motd file = /etc/rsyncd/rsyncd.motd#rsync服务器的日志log file = /var/log/rsync.log#这是传输文件的日志transfer logging = yeslog format = %t %a %m %f %bsyslog facility = local3timeout = 300
(B)模块定义
 模块定义什么呢?主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。
 这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path 指定的。
 我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的
下面是前面配置文件模块的例子:
#模块它为我们提供了一个链接的名字,在本模块中链接到了/root/001/sirius_kai目录;要用[name] 形式
[kai_home]#指定文件目录所在位置,这是必须指定的path = /root/001/sirius_kai#认证用户是root,是必须在服务器上存在的用户auth users = root   #list意思是把rsync服务器上提供同步数据的目录在服务器上模块是否显示列出来。#默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;list=yes   #忽略IO错误ignore errors  #密码存在哪个文件secrets file = /etc/rsyncd.secrets   #注释可以自己定义comment = This is a test rsync configuration.#exclude是排除的意思,也就是说,要把/root/001/sirius_kai目录下的目录nbproject和文件protected/config/main.php排除在外#各目录和文件之间用空格隔开exclude = nbproject/ protected/config/main.php
4.启动rsync服务器
#--config用于指定rsyncd.conf的位置,如果在/etc下可以不写rsync --daemon  --config=/etc/rsyncd.conf
5.通过rsync同步数据
(A)语法详解
在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项:
rsync的命令格式可以为:
1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST 
2. rsync [OPTION]... [USER@]HOST:SRC DEST 
3. rsync [OPTION]... SRC [SRC]... DEST 
4. rsync [OPTION]... [USER@]HOST::SRC [DEST] 
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST 
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

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来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
(B)一些实例
  1.查看服务器上有哪些可用的数据源
    rsync --list-only root@192.168.0.79::
  2.查看数据源kai_home下有哪些目录
    rsync --list-only root@192.168.0.79::kai_home
  3.同步数据源kai_home中的数据到当前目录的kai文件夹中(需要输入密码)
    rsync -avzP root@192.168.0.79::kai_home kai
  4.保持客户端数据与服务器端数据完全一致,如果客户端有服务器端没有的文件时,该文件会被删除
    rsync -avzP --delete root@192.168.0.79::kai_home kai
  5.使用密码文件将kai_home的数据同步到当前目录的kai文件夹中(不需要输入密码)
    rsync -avzP --delete --password-file=/root/rsyncd.secrets root@192.168.0.79::kai_home kai
  6.从客户端到服务器
    rsync -avzP --delete --password-file=/root/rsyncd.secrets /root/002/kai/  root@192.168.0.79::kai_home
  7.通过SHELL文件执行备份
    #!/bin/sh    cd /root/    # 创建密码文件    echo "rootadmin" > /root/rsyncd.secrets     # 增量备份    rsync -avzP --delete --password-file=/root/rsyncd.secrets root@192.168.0.79::kai_home /root/002/kai    # 完整备份    rsync -avzP --delete --password-file=/root/rsyncd.secrets root@192.168.0.79::kai_home "/root/002/$(date -d today +'%Y-%m-%d %T')"    echo "over!"