zoukankan      html  css  js  c++  java
  • rsync

    rsync

    rsync

    rsync的备份方式是增量备份,只传输本地与目标相比更改多的文档,从而减少了备份时间,也避免保留多次完全备份而占用巨量存储空间。

    rsync支持在本地的目录之间执行同步,用法如下(源目录跟/符号表示被同步的是目录下的文档而不是整个目录):

    rsync [选项...] 本地目录1 本地目录2
    rsync [选项...] 本地目录1/ 本地目录2
    rsync也支持在本地与远程主机之间执行同步,以SSH服务器为例,用法如下(上行同步时,认证的用户必须对目标目录有写入权限):
    
    下行:rsync [选项...] user@host:源目录 本地目录
    上行:rsync [选项...] 本地目录 user@host:目标目录
    rsync常用的命令选项:
    
    -a:归档模式,相当于递归、保留权限等多个选项的组合
    -v:显示同步过程详细信息
    -z:传输过程中启用压缩
    -A:保留文件的ACL属性信息
    -n:测试同步过程,不做实际修改
    --delete:删除目标文件夹内多余的文档

    测试rsync上传、下载同步的基本用法
    测试rsync的命令选项-a、-v、--delete、-n的用途
    使用rsync从SSH服务器下载 /boot/ 目录
    使用rsync将本地的/etc/ 目录到上传到SSH服务器

    rsync 基本用法

    创建测试目录

    mkdir /opt/dir1 /opt/dir2
    ifconfig br0 > /opt/dir1/ip.txt
    mkdir /opt/dir1/dir1.1
    [root@Final ~]# ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 0

    验证-a归档选项、源目录后是否跟/的作用

    未添加-a选项时,当被同步的文档包含目录时,无法向下递归

    [root@Final ~]# rsync /opt/dir1 /opt/di2
    skipping directory dir1  //目录被跳过
    
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 0

    添加-a选项,再次执行上述同步,被同步的是整个/opt/dir1目录(末尾无/)

    [root@Final ~]# rsync /opt/dir1 /opt/dir2 -a
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 0
    drwxr-xr-x 3 root root 34 Jul  5 10:09 dir1  //作为整体被同步过来

    修改上述操作,将源目录携程/opt/dir1/,只同步此目录下的文档

    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 4
    drwxr-xr-x 3 root root  34 Jul  5 10:09 dir1   //上次同步过来的
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1 //分别独立被同步过来
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt //分别独立被同步过来

    验证--delete选项的作用

    在/opt/dir2/目录下添加测试文件3.txt,将测试子目录2.dir改名为3.dir,现在与/opt/dir1/目录的内容是不一致的:

    [root@Final ~]# cat /proc/cpuinfo > /opt/dir2/3.txt
    [root@Final ~]# mv /opt/dir2/
    3.txt   dir1/   dir1.1/ ip.txt  
    [root@Final ~]# mv /opt/dir2/dir1.1/ /opt/dir2/dir2.1
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 8
    -rw-r--r-- 1 root root 3848 Jul  5 10:19 3.txt
    drwxr-xr-x 3 root root   34 Jul  5 10:09 dir1
    drwxr-xr-x 2 root root    6 Jul  5 10:09 dir2.1
    -rw-r--r-- 1 root root  490 Jul  5 10:09 ip.txt

    未添加--delete选项时,rsync同步操作是单向的,只是把源目录的文档增量更新到目标目录,而目标目标残留的其他文档不会做任何处理

    [root@Final ~]# rsync -a /opt/dir1/ /opt/dir2
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 8
    -rw-r--r-- 1 root root 3848 Jul  5 10:19 3.txt
    drwxr-xr-x 3 root root   34 Jul  5 10:09 dir1
    drwxr-xr-x 2 root root    6 Jul  5 10:09 dir1.1  //新同步来的子目录
    drwxr-xr-x 2 root root    6 Jul  5 10:09 dir2.1
    -rw-r--r-- 1 root root  490 Jul  5 10:09 ip.txt

    若要保持两边一致,即删除“目标目录下有而源目录下没有”的文档,可以添加--delete选项。修改前一条操作如下,可以看到两个目录的内容完全相同(多余文档被删除):

    [root@Final ~]# rsync -a --delete /opt/dir1/ /opt/dir2
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt

    验证-v选项的作用

    未添加-v选项时,rsync同步操作是静默执行的,除非报错否则无屏幕输出:

    [root@Final ~]# rsync -a -v --delete /opt/dir1/ /opt/dir2
    sending incremental file list
    
    sent 101 bytes  received 13 bytes  228.00 bytes/sec
    total size is 490  speedup is 4.30

    验证-n选项的作用

    选项-n主要用来模拟同步过程,而并不会真正的执行,此选项通常与-v一起使用。比如说,可以先清空/opt/dir2/目录,然后rsync结合-nv选项来了解一下指定的同步会执行哪些操作

    [root@Final ~]# rm -rf /opt/dir2/*
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 0
    [root@Final ~]# rsync -a -nv --delete /opt/dir1/ /opt/dir2
    sending incremental file list
    ./
    ip.txt	//会同步
    dir1.1/	//会同步
    
    sent 110 bytes  received 26 bytes  272.00 bytes/sec
    total size is 490  speedup is 3.60 (DRY RUN)
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:	//实际上并未执行
    total 0
    

    把上述同步操作中的-n选项去掉,才会真正地执行同步操作

    [root@Final ~]# rsync -av --delete /opt/dir1/ /opt/dir2
    sending incremental file list
    ./
    ip.txt
    dir1.1/
    
    sent 644 bytes  received 46 bytes  1,380.00 bytes/sec
    total size is 490  speedup is 0.71
    [root@Final ~]# !ll
    ll /opt/dir1/ /opt/dir2/
    /opt/dir1/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt
    
    /opt/dir2/:
    total 4
    drwxr-xr-x 2 root root   6 Jul  5 10:09 dir1.1
    -rw-r--r-- 1 root root 490 Jul  5 10:09 ip.txt

    rsync+ssh

    将远程主机上的 /boot/目录下载备份到本地(选项-z表示压缩)

    服务端240 客户端254

    [root@Final pub]# rsync -az --delete root@192.168.10.240:/boot /bootbak
    root@192.168.10.240's password: 
    [root@Final pub]# ll /bootbak/
    total 4
    dr-xr-xr-x 5 root root 4096 May  8 16:08 boot

    将本地的/etc/selinux目录上传备份到远程主机

    [root@Final ~]# du -sh /etc/selinux/
    19M	/etc/selinux/
    [root@Final ~]# rsync -az /etc/selinux/ root@192.168.10.240:/opt/
    root@192.168.10.240's password:

    服务端240确认同步结果

    [root@node1 ~]# du -sh /opt/selinux/
    19M	/opt/selinux/ //确认同步结果

    rsync+rsync同步

    在rsync源端将/usr/src 目录发布为同步资源:共享名为tools,仅允许用户 ruser 以密码 pass 访问
    在rsync操作端测试 rsync+rsync下行同步

    建立同步账号文件

    [root@node1 ~]# chmod 600 /etc/rsyncd_users.db //严格权限,否则同步会失败
    [root@node1 ~]# cat /etc/rsyncd_users.db
    ruser:pass	//用户名:密码,每行一个用户
    othername:233

    建立 /etc/rsyncd.conf 共享设置

    [tools]	//定义共享名
    path = /usr/src	//被共享的目录位置
    comment = Rsync Share Test	//同步资源说明
    read only = yes            	 //只读                     
    dont compress = *.gz *.bz2 *.tgz *.zip   //同步时不再压缩的文档类型 
    auth users = ruser               	 //允许谁访问 
    secrets file = /etc/rsyncd_users.db //指定账号文件的路径
    在上述配置文件中,若不添加最后两行认证配置,则默认以匿名方式提供

    启用 rsync --daemon 服务端

    [root@node1 ~]# du -sh /usr/src/
    0	/usr/src/
    [root@node1 ~]# cp /boot/ /usr/src/ -rf
    [root@node1 ~]# du -sh /usr/src/ //确认待发布的同步目录
    97M	/usr/src/
    chmod 777 -R /usr/src/*
    systemctl start rsyncd
    
    yum  -y  install  xinetd
    chkconfig  rsync  on                  //打开rsync服务开关
    chkconfig  xinetd  on
    service  xinetd  restart              //通过xinetd启动

    rsync + rsync下行同步测试

    查看及列表同步资源
    查看远程主机提供了哪些同步资源:

    [root@Final ~]# rsync 192.168.10.240::
    tools          	Rsync Share Test  //共享名、共享说明
    列出指定同步资源下的文档:
    [root@Final ~]# rsync ruser@192.168.10.240::tools //浏览共享
    Password: 		//验证ruser用户的口令
    drwxr-xr-x             49 2019/07/05 13:53:08 .
    drwxr-xr-x              6 2018/04/11 12:59:55 debug
    drwxr-xr-x              6 2018/04/11 12:59:55 kernels
    drwxr-xr-x             81 2019/07/05 13:53:10 selinux

    rsync下行同步

    [root@Final ~]# rsync -avz ruser@192.168.10.240::tools/ /root/mysrc/ //下行同步,删除多余文件
    Password:  //验证密码pass
    
    [root@Final ~]# du -sh /root/mysrc/ //确认同步结果
    103M	mysrc/

    网站镜像同步

    yum install httpd -y
    [root@node1 ~]# systemctl restart httpd
    [root@node1 ~]# echo node1-rsyncd > /var/www/html/index.html
    [root@node1 ~]# curl 192.168.10.240
    node1-rsyncd

    建立rsync同步账号文件

    [root@node1 ~]# cat /etc/rsyncd_users.db
    ruser:pass	//原有用户可保留
    othername:233
    wuser:wpass	//添加同步账号
     chmod  600  /etc/rsyncd_users.db      //注意确认文件权限

    建立 /etc/rsyncd.conf 共享设置

    vim  /etc/rsyncd.conf
    [wwwroot]	//定义共享名
    path=/var/www/html	 //被共享的目录位置
    comment=Web DocumentRoot	//同步资源说明
    read only=yes	 //只读
    dont compress = *.gz *.bz2 *.tgz *.zip	 //同步时不再压缩的文档类型
    auth users= wuser	//允许谁访问
    secrets file = /etc/rsyncd_users.db  //指定账号文件的路径
    在上述配置文件中,若不添加最后两行认证配置,则默认以匿名方式提供。

    启用 rsync --daemon 服务端

    yum  -y  install  xinetd
    chkconfig  rsync  on                  //打开rsync服务开关
    chkconfig  xinetd  on
    service  xinetd  restart              //通过xinetd启动
    systemctl start httpd
    rsync wuser@192.168.10.240::wwwroot/ /var/www/html -az
    [root@Final html]# curl 192.168.10.254
    node1-rsyncd

    实现免交互的rsync同步操作

    创建用来验证的密码文件,并将权限设为600:

    [root@Final html]# chmod 600 /root/pwd.txt
    [root@Final html]# cat /root/pwd.txt 
    wpass

    执行免交互同步操作:

    [root@Final html]# rsync -az --password-file=/root/pwd.txt wuser@192.168.10.240::wwwroot/ /var/www/html/
    [root@Final html]# !cu
    curl 192.168.10.254
    node1-rsyncd

    配置计划任务

    service  crond  restart               //确保启动计划任务服务
    chkconfig  crond  on                  //设为开机自动运行
    crontab -e                              //添加计划任务
    0 */2 * * * rsync --password-file=/root/pwd.txt --delete -az wuser@192.168.4.5::webroot/  /var/www/html/

    补充使用rsync同步,服务和客户端需要安装软件包
    若rsync同步失败,确认下文件及目录权限,还有SELINUX是否关闭
    可以同步yum源及epel源
    镜像同步公网 yum 源上游 yum 源必须要支持 rsync 协议,否则不能使用 rsync 进行同步。
    centos 源:rsync://rsync.mirrors.ustc.edu.cn/centos/
    epel 源:rsync://rsync.mirrors.ustc.edu.cn/epel/

    rsync -vrt --bwlimit=3000 --exclude=debug/ rsync://rsync.mirrors.ustc.edu.cn/epel/7/x86_64/ /data/mirrors/centos/epel7/x86_64/
     rsync -vrt rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/ /data/mirrors/centos/7/os/x86_64/
  • 相关阅读:
    字符串匹配之BF算法
    python里的反射(自学习)
    python的super()以及父类继承
    @staticmethod
    @classmethod
    scrapy
    mongodb
    js注入提取伪元素选择器
    execjs
    base64解密
  • 原文地址:https://www.cnblogs.com/fina/p/11138178.html
Copyright © 2011-2022 走看看