zoukankan      html  css  js  c++  java
  • 使用rsync命令提高文件传输效率

    众多数据库服务器的管理过程中,在不同服务器间的文件传输是免不了的。您可以使用scp命令或FTP方法完成文件的发送和接收,这篇文章我将给大家介绍另外一种方法,这就是rsync命令。
    rsync是文件传输程序,它的功能和算法描述可以参考维基百科中的介绍。
    参考链接:http://zh.wikipedia.org/zh-cn/Rsync

    rsync也分服务器端和客户端,使用man查看帮助信息,我们发现rsync有六种不同的工作模式:

           Local:  rsync [OPTION...] SRC... [DEST]

           Access via remote shell:
             Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
             Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

           Access via rsync daemon:
             Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
                   rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
             Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
                   rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

           List remote files: rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

      1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这

    种工作模式。
      2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器

    。当DST
    路径地址包含单个冒号":"分隔符时启动该模式。
      3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器

    。当SRC
    地址路径包含单个冒号":"分隔符时启动该模式。
      4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动

    该模式。
      5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启

    动该模式。
      6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信

    息即可。
    下面以实例来说明:
      # rsync -vazu -progress cnangel@10.1.6.160:~/works/ ~/works
      v:详细提示 
      a:以archive模式操作,复制目录、符号连接,等价于 -rlptgoD 。
      z:压缩
      u:只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
      -progress:指显示
      以上命令是保持客户机10.1.6.160上的$HOME/works目录和当前机器的$HOME/works目录同
    步。
    这经常是我们所说的镜像同步就是这么来的,如果断点续传呢?rsync完全可以做到这一点。man手册再次告诉我们:

    --partial
          By default, rsync will delete any partially  transferred  file  if  the  transfer  is
          interrupted. In some circumstances it is more desirable to keep partially transferred
          files. Using the --partial option tells rsync to keep the partial file  which  should
          make a subsequent transfer of the rest of the file much faster.

    --partial-dir=DIR
          A better way to keep partial files than the --partial option is to specify a DIR that
          will be used to hold the partial data (instead of writing it out to  the  destination
          file).   On  the  next  transfer,  rsync will use a file found in this dir as data to
          speed up the resumption of the transfer and then delete it after it  has  served  its
          purpose.

    默认的情况下,当rsync传输中断后,新的rsync传输将删除所有的未完成的残余文件片段,然后开始新的传输。而使用--partial后,将会进行我们所说的断点续传。
    值得注意的是-P这个参数是综合了--partial --progress两个参数,所以rsync的断点续传可以用下面的例子来说明:

    rsync -avzP /tmp/bigfile cnangel@10.1.6.160:/tmp/bigfile

    另外,还有两个参数也经常用到:
      t:修改次数
      r:递归方式
    我来通过实验给大家展示一下rsync命令的常用方法。
    这里我们演示使用的操作系统是Linux,rsync已经预装好。如果是AIX操作系统,需要单独在IBM网站下载安装包安装。

    演示场景:将secDB1服务器SRC目录下的内容同步传输到secDB2服务器DEST目录下,整个过程在secDB1服务器上来完成。

    1.在第一台主机的根目录下创建一个名为“SRC”的目录,作为我们传输演示的源目录。
    [root@secDB1 /]# mkdir /SRC

    2.在SRC目录中创建两个文件f1和f2
    [root@secDB1 /]# cd /SRC
    [root@secDB1 SRC]# touch f1
    [root@secDB1 SRC]# touch f2
    [root@secDB1 SRC]# ls -ltr
    total 0
    -rw-r--r-- 1 root root 0 Feb 21 10:37 f1
    -rw-r--r-- 1 root root 0 Feb 21 10:37 f2

    3.在第二台主机的根目录下创建一个名为“DEST”的目录,作为我们传输演示的目标目录
    [root@secDB2 /]# cd /
    [root@secDB2 /]# mkdir /DEST

    4.将secDB1服务器SRC目录下的内容同步传输到secDB2服务器DEST目录下
    [root@secDB1 SRC]# rsync -avzP /SRC/ -e ssh root@172.17.193.211:/DEST
    root@172.17.193.211's password:
    building file list ... done
    ./
    f1
    f2

    sent 162 bytes  received 70 bytes  42.18 bytes/sec
    total size is 0  speedup is 0.00

    5.验证第二台主机的DEST目录下是否有发送过来的文件
    [root@secDB2 /]# cd /DEST
    [root@secDB2 DEST]# ls -ltr
    total 0
    -rw-r--r-- 1 root root 0 Feb 21 02:37 f1
    -rw-r--r-- 1 root root 0 Feb 21 02:37 f2

    文件发送成功,目的达到。

    6.修改DEST目录下的f1文件内容,使之与源目录SRC中的f1目录不相同
    [root@secDB2 DEST]# echo "mod" > f1
    [root@secDB2 DEST]# cat f1
    mod
    [root@secDB2 DEST]# ls -ltr
    total 4
    -rw-r--r-- 1 root root 0 Feb 21 02:37 f2
    -rw-r--r-- 1 root root 4 Feb 21 02:59 f1

    7.再次将SRC目录下的内容向DEST目录同步
    [root@secDB1 SRC]# rsync -avzP /SRC/ -e ssh root@172.17.193.211:/DEST
    root@172.17.193.211's password:
    building file list ... done
    f1

    sent 114 bytes  received 48 bytes  46.29 bytes/sec
    total size is 0  speedup is 0.00

    注意,此时仅仅将有变化的内容f1同步到了DEST目录,这也是rsync命令的优势所在。

    8.在经过再次同步之后,此时DEST目录下的文件再一次与SRC目录下的内容保持一致。
    [root@secDB2 DEST]# ls -ltr
    total 0
    -rw-r--r-- 1 root root 0 Feb 21 02:37 f1
    -rw-r--r-- 1 root root 0 Feb 21 02:37 f2

    9.注意“/”符号带来的差别
    如果将“/SRC/”后面的“/”去掉,此时将会将SRC目录和目录的下的所有内容统统的发送到DEST目录下。
    [root@secDB1 SRC]# rsync -avzP /SRC -e ssh root@172.17.193.211:/DEST
    root@172.17.193.211's password:
    building file list ... done
    SRC/
    SRC/f1
    SRC/f2

    sent 166 bytes  received 70 bytes  67.43 bytes/sec
    total size is 0  speedup is 0.00

    10.使用rsync命令的联机帮助文档可以获得更多的提示信息
    [root@secDB1 SRC]# rsync -h
    ……此处内容省略……

    11.小结
    rsync在给我们传输文件提供另外一种途径的同时,也提高了我们的工作效率。在存在少量差异需要完成文件同步的场合下是不二选择。善用之。

    Good luck.

    secooler
    10.02.21

    -- The End --

  • 相关阅读:
    百度前端技术学院task35源代码——听指令的小方块3
    百度前端技术学院task34源码——会指令的小块2
    ManyToManyField 增加记录
    同一个页面多个按钮,根据按钮名字执行相应功能
    django 函数装饰器 变为 类装饰器
    script 跳出小窗口
    django 把函数装饰器变为方法装饰器
    modelform添加属性
    Cannot assign “A1”: “B1” must be a “C1” instance.
    Django form choices, placeholder
  • 原文地址:https://www.cnblogs.com/fatt/p/4550982.html
Copyright © 2011-2022 走看看