rsync概念、命令与配置

Rsync是Linux下的一款增量备份工具,使用特殊的算法和压缩传输,可以进行大量文件的高效率备份。本文主要介绍了rsync的基本概念,常用命令,和客户端的配置

安装

在使用rsync备份时,要求备份的源和目标机器都需要安装rsync。目前大部分Linux发行版中都安装了rsync,若未安装,Ubuntu可以运行

1
sudo apt-get install rsync

其它系统请自行查询安装命令。

Windows系统的安装请参考rsync专题中rsync在Windows中的使用

命令

rsync有六种工作模式:

  1. rsync [OPTION]… SRC DEST
  2. rsync [OPTION]… SRC [USER@]HOST:DEST
  3. rsync [OPTION]… [USER@]HOST:SRC DEST
  4. rsync [OPTION]… [USER@]HOST::SRC DEST
  5. rsync [OPTION]… SRC [USER@]HOST::DEST
  6. rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

option为可选的参数(见后文) 从SRC 拷贝到DESC,USER用户名,HOST目标机器Ip地址,PORT目标机器端口

1中SRC/DEST均为本地目录
2-3中SRC/DEST为本地和远程目录,USER为ssh用户名
4-6中使用rsync服务器,::后紧跟的是服务器模块名,非目录名,但是模块名可以加子目录,USER为服务器配置文件中的用户名

  1. 拷贝本地文件

    1
    rsync -avz /data /backup

    注意:/data会把整个data目录copy到backup目录下,形成/backup/data的结构,如果只需copy data内的内容而不复制data目录本身,应当使用rsync -avz /data/ /backup

  2. 通过ssh实现本地拷贝到远程机器

    1
    rsync -avz /data root@xxx.xx.xx.xx:/backup

    将通过root用户登陆远程机器,登陆方式是使用密钥的方式,所以在本地机器上,运行ssh-keygen -t rsa,一路回车(不要使用密码)会在你的用户目录 /.ssh/生成id_rsa和id_rsa.pub文件(若已经存在不需要再次生成),复制.pub文件到远程机器/.ssh/ 目录,运行

    1
    2
    cat id_rsa.pub >> authorized_keys
    chmod 700 authorized_keys
  3. 通过ssh将远程内容copy到本地机器

    1
    rsync -avz root@xx.xx.xx.xx:/backup/data/ /data

    同样是ssh登陆,需要完成模式2的配置才可以

  4. 通过rsync服务将远程内容拷贝到本地

    1
    rsync -avz datauser@xx.xx.xx.xx::modulename /data

    rsync和ssh方式的区别在于使用了双冒号,使用这种方式需要先在远程机器上配置rsync服务器,请参考rsync专题中rsync服务器的配置
    可以通过–password-file=xx 指定密码文件,客户端密码文件仅需写入对应的密码即可
    这种模式中,用户名datauser和模块modulename是在服务端配置文件中配置的

  5. 通过rsync服务将本地文件拷贝到远程机器

    1
    rsync -avz /data/ datauser@xxx.xx.xx.xx::modulename

    同上,需要配置rsync服务器

  6. 列出远程主机的文件列表

    1
    rsync -v rsync://datauser@xxx.xx.xx.xx/modulename

    or

    1
    rsync -v datauser@xxx.xx.xx.xx::modulename

可选参数

-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如
filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 即使出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

一般都使用azv选项

总结

阅读完本文,应当可以使用rsync在本地机器进行备份,和通过ssh方式与远程机器进行文件传输。其简要步骤如下:

  1. 本地和远程机器 安装rsync
  2. 本地生成ssh密钥,复制公钥到远程机器并配置
  3. 参考命令中的1~3进行备份

提示

  • 注意命令中的空格

  • 通过–exclude-from=/data/ignore.list 指定忽略列表文件,文件中,通过文件夹名,或者通配符指定忽略不传输的文件,一个典型的list可以为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    \*.jar
    \*.bak
    \*.sw?
    .#\*
    \*#
    \*~
    node_modules
    Data
    .git
    target
    temp
    tmp
    .idea
    log
Song wechat
扫一扫,关注微信公众号,订阅我的博客
扫码领红包,支持走一波