Linux 同步工具rsync 文件目录同步,增量备份的手段之一

一、rsync介绍

   rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

它的特性如下:

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜像。 [1] 

 

二、使用rsync

rsync同步工具的常用选项:

  • -n:测试同步过程,不做实际修改
  • --delete:删除目标文件夹内多余的文档
  • -a:归档模式,相当于-rlptgoD
  • -v:显示详细操作信息
  • -z:传输过程中启用压缩/解压

0.安装:

centos: yum -y install rsync xinetd

 ubuntu: apt install rsync xinetd
#rsync服务通常基于超级守护进程xinetd管理的方式来实现,因此需要事先安装rysnc和xinetd 

1.rsync同步基本操作

     1)同步整个目录

rsync -a /boot /opt 

                    [root@svr7 opt]# rsync -a /boot /opt 

                    [root@svr7 opt]# ls /opt

                       boot             

     2)将目录下的文件同步到被同步目录

实际上就是加'/'与不加'/'的区别

rsync -a /boot/ /opt/

                    [root@svr7 opt]# rsync -a /boot/ /opt/

                    [root@svr7 boot]# ls
                         config-3.10.0-862.el7.x86_64
                         efi
                         grub
                         grub2 

   

2.验证 -a、-v、-n、--delete 选项的含义

        1) 验证-a选项

         当同步对象是文件夹时,若缺少-a或-r选项则文件夹会被忽略,即同步失败

           [root@svr7 opt]# mkdir /test

            [root@svr7 opt]# touch /test/a.txt  

           [root@svr7 opt]# rsync /test/  /opt
              skipping directory boot 

            [root@svr7 opt]# ls    //无文件

            [root@svr7 opt]# rsync /test/a.txt  /opt       //不加选项只能以文件为同步单位,不能以目录

            [root@svr7 opt]# ls    

              a.txt

            [root@svr7 opt]# rm -rf /opt/*                         //清空文件夹

            [root@svr7 opt]# rsync -a /test/ /opt            //-a 也可以替换成-r  效果是一样的

            [root@svr7 opt]# ls
               a.txt

          当目录1中的数据出现权限、归属、修改时间等变化时,若文件内容不变默认不会同步,若希望目录2也同步这些变化,也需要-a选项。            

             [root@svr7 test]# ll /opt /test
               /opt:
             -rw-r--r-- 1 root root 0 8月   1 09:54 a.txt

               /test:
             -rw-r--r-- 1 root root 0 8月   1 09:53 a.txt
             [root@svr7 test]# chmod o+x /test/a.txt       //修改文件权限
             [root@svr7 test]# ll /test/a.txt
             -rw-r--r-x 1 root root 0 8月   1 09:53 /test/a.txt        

             [root@svr7 test]# rsync /test/a.txt /opt       //不加-a选项 进行同步
             [root@svr7 test]# ll /test /opt              
              /opt:  
             -rw-r--r-- 1 root root 0 8月   1 10:00 a.txt      //opt下a.txt权限没有变化

              /test:
            -rw-r--r-x 1 root root 0 8月   1 09:53 a.txt      

             [root@svr7 test]# rsync -a  /test/a.txt /opt          //加入-a选项
             [root@svr7 test]# ll /opt /test
              /opt:    
             -rw-r--r-x 1 root root 0 8月   1 09:53 a.txt          //权限变化

             /test:
            -rw-r--r-x 1 root root 0 8月   1 09:53 a.txt
      

        

 结论:   只要做rsync同步操作,都需要加上-a选项,事实证明任何情况下加-a 都是适用的

    2) 验证-v选项        
            添加-v选项时,可以看到操作细节信息

             [root@svr7 opt]# rsync -av /test/  /opt
              sending incremental file list
              ./
              a.txt

              sent 106 bytes  received 38 bytes  288.00 bytes/sec
              total size is 0  speedup is 0.00
 

      3) 验证-n选项

             将-n、-v选项合用,可以模拟同步过程,显示需要做哪些操作(但并不真的同步)。                               

            [root@svr7 opt]# rm -rf /opt/*        //删除文件下内容,避免干扰测试 

            [root@svr7 opt]# rsync -avn /test/ /opt
             sending incremental file list
              ./
              a.txt

             sent 99 bytes  received 25 bytes  248.00 bytes/sec
             total size is 0  speedup is 0.00 (DRY RUN)
             [root@svr7 opt]# ls          //无文件 

 

     结论: -n 选项仅仅用于测试,与-v选项连用模拟同步过程     

4) 验证--delete选项

     rsync同步操作默认只是将目录1的数据同步到目录2,但如果目录2存在多余的文件却并不会去除,除非添加—delete选项。

        [root@svr7 opt]# ls  /opt      //查看opt和test目录 根据delete选项描述 同步之后opt下的b.txt 将被删除 
           b.txt
        [root@svr7 opt]# ls /test
           a.txt 

        [root@svr7 opt]# rsync -a --delete /test/ /opt         //添加delete选项 注意delete要加双-

         [root@svr7 opt]# ls  /opt       //再次查看 /opt下的b.txt被删除 而同步了test目录下的a.txt
          a.txt
        [root@svr7 opt]# ls /test
           a.txt 

   结论: 加delete选项后 目录1和目录2的数据完全同步,目录2下多余的文件将被删除

 

三、rsync+SSH同步

rsync+SSH远程同步操作:

  • rsync [...] user@host:远程目录 本地目录
  • rsync [...] 本地目录 user@host:远程目录

准备两台虚拟机svr7(192.168.4.7),pc207(192.168.4.207)    

1.列出远程主机的SSH资源

rsync [email protected]:/    

[root@pc207 ~]# rsync [email protected]:/                //列出根目录下文件
Warning: Permanently added '192.168.4.7' (ECDSA) to the list of known hosts.
[email protected]'s password:                                    //输入密码
dr-xr-xr-x          4,096 2019/08/01 09:53:13 .
lrwxrwxrwx              7 2019/01/26 12:33:13 bin
-rw-r-----          1,705 2019/07/17 09:56:21 etc.bak
-rw-r--r--             10 2019/07/23 14:20:46 file1
-rw-r--r--             10 2019/07/23 14:20:46 hdfile
lrwxrwxrwx              7 2019/01/26 12:33:13 lib
lrwxrwxrwx              9 2019/01/26 12:33:13 lib64
-rw-r-----          1,705 2019/07/17 09:56:30 named.bak
lrwxrwxrwx              8 2019/01/26 12:33:13 sbin
.............................

2. rsync+SSH同步操作

rsync -av -e "ssh -p 22" 同步目录 被同步目录

[root@svr7 opt]# ls /test      //主机svr7下一个文件
   a.txt 

[root@pc207 ~]# rsync -a  [email protected]:/test/  /opt     //将svr7下文件同步到 pc207的opt目录下,将远程目录同步到本机目录

Warning: Permanently added '192.168.4.7' (ECDSA) to the list of known hosts.
[email protected]'s password:                                    //输入密码

[root@pc207 ~]# ls /opt

    a.txt

[root@pc207 ~]# rsync -a  /opt/  [email protected]:/test/   //将本机文件同步到远程目录

 

3. rsync 免密模式 ,通过公钥 私钥,完成ssh,rsync无密码验证

  这里有 两台虚拟机AB,每台机器上有自己的私钥,A将公钥私钥给B就可以免密登录B机器了(但是B仍然无法免密登录A)

[root@svr7 /]# ssh-keygen       #一路回车
[root@svr7 /]# ls /root/.ssh/      #公钥  私钥生成位置

[root@svr7 /]# ssh-copy-id [email protected]  #传输公钥到虚拟机B

[root@svr7 /]# ssh [email protected]            #直接登录无需密码

[root@svr7 /]# rsync -a   /opt [email protected]:/opt -e 'ssh'   //将本地文件同步到远程 

 

四、增量备份 

这里只提一下思路,我们可以写一个sh脚本挂在后台(通过加&),使用inotifywait来监控要备份的文件,触发rsync的条件是该文件发生变化,或者通过对比前后变化的文件大小值,当大于某个值时进行备份,或者通过sleep控制间隙时间,两者的目的都是尽可能释放CPU和内存的占用。

另一种较简单,写一个定时任务即可,可以时每天的晚上12点或其他...

你可能感兴趣的:(Linux基础)