zoukankan      html  css  js  c++  java
  • rsync 安装使用详解

    RSYNC软件介绍:

    rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:
    可以镜像保存整个目录树和文件系统。
    可以很容易做到保持原来文件的权限、时间、软硬链接等等。
    无须特殊权限即可安装。
    优化的流程,文件传输效率高。
    可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
    支持匿名传输,以方便进行网站镜象。
    软件下载
    rysnc的主页地址为:
    http://rsync.samba.org/
    目前最新版本为2.4.6。可以选择从原始网站下载:
    http://rsync.samba.org/ftp/rsync/

    一、下载、安装rsync

    #tar zxvf rsync-2.6.9.tar.gz
    #cd rsync-2.6.9
    #./configure --prefix=/usr/local/rsync
    #make 
    #make install 
    **** 正常安装RH的时候是带RSYNC的,运行文件放在/usr/bin/rsync 

    二、配置rsync server

    1、启动RSYNC
    #vi /etc/xinetd.d/rsync
    把原来的YES改成NO
    service rsync
    {
            disable = no
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon
            log_on_failure  += USERID
    }
    随系统启动RSYNC
    #chkconfig rsync on
    2、配置/etc/rsyncd.conf(需要手动生成)
    rsyncd.conf的参数写在上边就是全局参数和写在模块里的就是模块参数
    #vi /etc/rsyncd.conf
    全局参数
    uid = root                      //运行RSYNC守护进程的用户
    gid = root                      //运行RSYNC守护进程的组
    use chroot = no                 //不使用chroot
    max connections = 4             // 最大连接数为4
    strict modes =yes               //是否检查口令文件的权限
    port = 873                      //默认端口873
              
    模块参数
    [backup]                     //这里是认证的模块名,在client端需要指定
    path = /home/backup/         //需要做镜像的目录,不可缺少!
    comment = This is a test     //这个模块的注释信息 
    ignore errors                //可以忽略一些无关的IO错误
    read only = yes              // 只读   no:可读可写
    list = no                    //不允许列文件清单
    auth users = hening             //认证的用户名,这个名字是服务器端实实在在存在用户,如果没有这行则表明是匿名,此用户与系统无关
    secrets file = /etc/rsync.pas           //密码和用户名对比表,密码文件自己生成
    hosts allow = 192.168.1.1,10.10.10.10   //允许主机
    hosts deny = 0.0.0.0/0                  //禁止主机
    #transfer logging = yes
    注释:下面这些绿色文件是安装完RSYNC服务后自动生成的文件
    pid file = /var/run/rsyncd.pid      //pid文件的存放位置
    lock file = /var/run/rsync.lock     //锁文件的存放位置
    log file = /var/log/rsyncd.log      //日志记录文件的存放位置
    3、配置rsync密码(在上边的配置文件中已经写好路径) /etc/rsync.pas(名字随便写,只要和上边配置文件里的一致即可),格式(一行一个用户)
    账号:密码
    #vi /etc/rsync.pas
    例子:
    Hening:111111
    权限:因为rsync.pas存储了rsync服务的用户名和密码,所以非常重要。要将rsync.pas设置为root拥有, 且权限为600。
    #cd /etc
    #chown root.root rsync.pas 
    #chmod 600 rsync.pas
    3.rsyncd.motd(配置欢迎信息,可有可无)
    # vi /etc/rsyncd.motd
    rsyncd.motd记录了rsync服务的欢迎信息,你可以在其中输入任何文本信息,如:
    Welcome to use the rsync services!
    4、让配置生效
    #service xinetd restart

    如果报错:xinetd: 未被识别的服务,执行

    #yum -y install xinetd

    三、启动rsync server

     RSYNC服务端启动的两种方法
    1、启动rsync服务端(独立启动)
    #/usr/bin/rsync --daemon
    2、启动rsync服务端 (有xinetd超级进程启动)
    # /etc/rc.d/init.d/xinetd reload
    (reload一般只是从新读取一次配置文件。restart则是把进程停掉,从头启动一次。restart自然也就reload了。但是对于大型服务,restart可能不方便。)

    四、加入rc.local 

    在各种操作系统中,rc文件存放位置不尽相同,可以修改使系统启动时把rsync --daemon加载进去。
    #vi /etc/rc.local
    加入一行/usr/bin/rsync --daemon

    五、检查rsync

    #netstat -a | grep rsync
       tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN  

    六、配置rsync client 

    1、设定密码
    #vi /etc/rsync.pas
    111111
    修改权限
    #cd /etc
    #chown root.root rsync.pas 
    #chmod 600 rsync.pas
    2、client连接SERVER
      从SERVER端取文件
    /usr/bin/rsync -vzrtopg --progress --delete hening@192.168.0.217::backup /home/backup --password-file=/etc/rsync.pas
      向SERVER端上传文件
    /usr/bin/rsync -vzrtopg --progress --password-file=/root/rsync.pas  /home/backup hening@192.168.0.217::backup
      这个命令将把本地机器/home/backup目录下的所有文件(含子目录)全部备份到RSYNC SERVER(172.20.0.6)的backup模块的设定的备份目录下。
      请注意如果路径结束后面带有"/",表示备份该目录下的东东,但不会创建该目录,如不带"/"则创建该目录。
      RSYNC用法:
        rsync [OPTION]... [USER@]HOST::SRC  [DEST]              #从RSYNC SERVER备份文件到本地机器
        rsync [OPTION]... SRC [SRC]...      [USER@]HOST::DEST   #从本地机器备份文件到RSYNC SERVER
    3、自动运行
    1)vi /usr/local/rsync/time.sh     //制作脚本文件
    把下边的内容复制进去
    #!/bin/bash
    /usr/bin/rsync -vzrtopg --progress --delete hening@192.168.0.217::backup /home/backup --password-file=/etc/rsync.pas
    2) 定时执行

    crontab -e
    加入55 * * * * /usr/local/rsync/time.sh        //每55分运行一次time.sh脚本文件

    七、iptables

    iptables -A INPUT -p tcp -s ! 11.22.33.44 --dport 873 -j DROP

    如此, 只有 11.22.33.44 这个 client IP 能进入这台 rsync server。


    命令介绍:-rvlHpogDtS
    rsync命令参数
    -v表示verbose详细显示
    -z表示压缩
    -r表示recursive递归
    -t表示保持原文件创建时间
    -o表示保持原文件属主
    -p表示保持原文件的参数
    -g表示保持原文件的所属组
    -a存档模式
    -P表示代替-partial和-progress两者的选项功能
    -e ssh建立起加密的连接。
    --partial阻止rsync在传输中断时删除已拷贝的部分(如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上
    删除已拷贝的部分文件。)
    --progress是指显示出详细的进度情况
    --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
    --exclude不包含/ins目录
    --size-only 这个参数用在两个文件夹中的差别仅是源文件夹中有一些新文件,不存在重名且被修改过的文件,因为这种文件有可能会因为内容被修改可大小一样,而被略过。这个参数可以大大地提高同步的效率,因为它不需要检查同名文件的内容是否相同。
    --password-file来指定密码文件,内容包含server端指定认证用户的密码。
    这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
    hening@192.168.0.217::backup
    hening是指server端指定认证的用户
    192.168.0.217是指服务器端的ip
    ::backup 表示服务器端需要同步的模块名称;
    /home/quack/backup/$DATE是同步后的文件指存放在本机的目录地址。
    /var/log/rsync.$DATE是同步后的日志文件存放在本机的目录地址。
    注意

    不放/  则目录名也包含mirror,放 / 则只有目录里面的东西mirror了

    详见:http://blog.csdn.net/moqiang02/article/details/37938059


    实例总结流程:

    1.配置主控端
    # vim /etc/rsyncd.conf
    ###################################
    uid = nobody
    gid = nobody
    use chroot = no
    max connections = 4
    stirict modes = yes
    port = 873
    [backup]
    path = /usr/local/test/
    comment = This is a test
    ignore errors
    read only = false
    list = no
    hosts allow = 192.168.0.11
    hosts deny = 0.0.0.0/0
    auth users = bakweb
    secrets file =/etc/rsyncd.pw
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ###################################
    # vim /etc/rsyncd.pw
    ###################################
    bakweb:123456
    ###################################
    # cd /etc
    # chown root.root rsyncd.pw
    # chmod 600 rsyncd.pw
    启动rsync server
    # rsync --daemon
    查看端口873是否打开
    加入启动
    # echo "rsync --daemon" >>/etc/rc.local
    给/usr/local/test目录写权限
    # chown -R nobody.nobody /usr/local/test
    # chmod -R 770 /usr/local/test

    主控配置完成。

    2.客户端配置

    # vim /etc/rsyncd.pw
    ####################################
    123456
    ####################################
    # chown root.root /etc/rsyncd.pw
    # chmod 600 /etc/rsyncd.pw
    再使用命令直接更新到服务器数据文件就不需要密码
    rsync -vzrtopg --progress --password-file=/etc/rsyncd.pw  /usr/local/bin/ bakweb@192.168.0.10::backup

    注意:

    1.这里的backup名字为主控conf配置里面的[backup],一定要同名

    2.bakweb为主控conf配置里面的bakweb,可以随意命名,不是系统用户。


    配置完了之后,可能会遇到一些权限问题。以下就一些常见的权限问题进行解答:
    问题一:
    @ERROR: chroot failed
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端的目录不存在或无权限。
    创建目录并修正权限可解决问题。

    问题二:
    @ERROR: auth failed on module tee
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。
    提供正确的用户名密码解决此问题。

    问题三:
    @ERROR: Unknown module ‘tee_nonexists’
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器不存在指定模块。
    提供正确的模块名或在服务器端修改成你要的模块以解决问题。

    测试
    都配置完毕之后就是测试了。在FreeBSD机器上,输入命令
    rsync -vzrtop --delete /home/andrewy/etc test@192.168.21.41::backup --password-file=/etc/rsyncd.password
    查看同步效果。


    注意:我这里是直接以root进行操作。rsync以delete操作时要注意,它会完全同步这边的目录与服务器的目录中的文件,这样会产生一个后果,它会删掉服务器中多余的文件,这样做很危险,如果是线上机器,请慎之又慎,切记!

  • 相关阅读:
    困扰我的c++语法
    C++ primer第三章作业
    渔夫捕鱼问题
    JAVA输入输出
    Python学习5——抽象,涉及抽象和结构、函数的自定义、参数、作用域、递归
    牛顿迭代法计算平方根
    Python学习4——条件、循环及其他语句总结
    Python补充1——Python的简单推导
    Python补充2——Python单行注释、整段注释使用方法
    Python补充3——Python中的 split() 函数
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061208.html
Copyright © 2011-2022 走看看