Rsync

作者: 大富帅 | 来源:发表于2018-12-24 13:01 被阅读22次

    rsync 语法

    rsync [OPTION]... SRC DEST
    rsync [OPTION]... SRC [USER@][host]:DEST
    rsync [OPTION]... [USER@]HOST:SRC DEST
    rsync [OPTION]... [USER@]HOST::SRC DEST
    rsync [OPTION]... SRC [USER@]HOST::DEST
    rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
    

    rsync 有几种传输方式:

    • 本地传输 rsync [OPTION]... SRC DEST
    • 使用一个远程shell程序(如rshssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
    • 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www

    rsync ssh传输

    rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
    

    这种方式通过使用-e ssh 指定了使用ssh方式传输,所以传输的时候就要user@host:/dir/ 方式传输,
    如果ssh 没有写user@ 是默认使用当前终端用户

    rsync -avP -e "ssh   -p 10087"  /data/bak/2017-08-29_17-32-35  10.13.114.111:/data/ 
    

    这个是指定SSH端口的传输,因为默认是端口22
    -a 递归复制所有文件,并保持文件时间所属用户权限; -e 是命令, 加个双引号把ssh 配置另外扩起来

    rsync 使用配置文件默认传输方式

    rsync其主配置文件为“/etc/rsyncd.conf”,我们可以通过这个配置文件来配置传输的用户和目录,这个是不同于ssh传输的,ssh使用的校验用户是linux的用户系统,这里的配置是独立的,需要另外配置用户名:密码
    rsync 配置/etc/rsyncd.conf插入如下内容:

    log file=/var/log/rsyncd.log
    port=8873
    list=false
    uid = nobody
    gid = nogroup
    max connections=4
    read only = false
    secrets file = /etc/rsync.password
    
    [trace_logs]
    comment = trace logs
    path = /home/project/zs-admin/data/
    hosts allow = 123.58.175.40 123.58.175.41 10.82.156.11 10.82.156.12
    auth users = rsync_backup
    
    [statistics_sync]
    comment = stat sync
    path = /home/project/nemu-statistics/activity/
    hosts allow = psigor-*-igor.i.nease.net psigor-*-storage.i.nease.net 123.58.175.40 123.58.175.41 10.82.156.11 10.82.156.12
    auth users = rsync_stat
    

    创建密码文件 /etc/rsync.password,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。

    echo "rsync_stat:abc123" > /etc/rsync.passwd
    chmod 600 /etc/rsyncd.passwd
    

    这上面定义了两个模块 [trace_logs] 和 [statistics_sync] ,分别定义了两个用户,用户传输的,而校验的密码也写到另外一个文件 /etc/rsync.passwd

    定义好以后,我们使用下面命令传输:

    rsync -avz --port=8873 /home/lidongwei/tmp/a.php rsync_stat@10.82.156.12::statistics_sync/data/
    Password:
    

    我们看到的目的地使用了rsync_stat@10.82.156.12::statistics_sync/data/, 这里要说明下:

    • 首先我们看到,我们指定了rsync监听的端口,配置文件里面定义的,默认是873, 而不是使用ssh的端口。
    • rsync_stat是我们在配置文件定义的用户名
    • 两个冒号::statistics_sync/data/ 这里表示使用了rsync自带的传输方式,而statistics_sync是我们在配置文件定义的模块名,它定义了我们目标位置目录:path = /home/project/nemu-statistics/activity/ ,::statistics_sync/data/ 表示我们要传输文件到/home/project/nemu-statistics/activity/data/ 目录
    • 输入的密码是我们在配置文件 /etc/rsync.password 定义的,格式是user:password,这里是rsync_stat:123456

    rsync 错误处理

    上面的例子使用 rsync 出错:rsync: chgrp "XXXX" failed: Operation not permitted
    这是因为我们使用了-a

    -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。

    而-o -g 分别代表保持文件所有者和组

    -o, --owner preserve owner (super-user only)
    -g, --group preserve group

    但是我们使用的是rsync_stat这个用户啊,没有权限修改文件的组和所有者。就会报错,解决方法:

    rsync -avz --no-o --no-g --port=8873 /home/lidongwei/tmp/a.php rsync_stat@10.82.156.12::statistics_sync/data/
    

    使用 rsync 出错:rsync: chgrp "XXXX" failed: Operation not permitted

    参考:http://man.linuxde.net/rsync
    https://segmentfault.com/a/1190000000444614

    相关文章

      网友评论

          本文标题:Rsync

          本文链接:https://www.haomeiwen.com/subject/xfzdkqtx.html