• home > OS > Linux > Devops >

    Linux服务器同步文件夹方案:ssh rsync同步目录备份系统

    Author:zhoulujun Date:

    本地到远程:rsync -r ~ source pi@192 168 1 123:~ target,远程到本地:rsync -r pi@192 168 1 123: home pi remote ~ local 。rsync,可通过 LAN WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本

    linux同步文件,之前一直用tar 压缩文件夹,然后上传在解压。这个可以压缩节省传输时间。但是对传输时间与带宽没有要求,就可以使用文件同步技术。

    一般我们使用rsync有两种认证方式,

    • rsync-daemon方式,需要配置本地文件,灵活性一般

    • ssh方式,直接远程连接传输,简单粗暴


    rsync 远程同步

    rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本硬盘中的不同目录

    rsync 是用于替代 rcp 的一个工具,rsync 使用所谓的 rsync算法 进行数据同步,这种算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

    与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

    您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。

    rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,目前由http://rsync.samba.org维护。rsync 支持大多数的类 Unix 系统,无论是Mac、 Linux、Solaris 还是 BSD上 都经过了良好的测试。 CentOS系统默认就安装了 rsync 软件包。 此外,在 windows 平台下也有相应的版本,如 cwrsync 和DeltaCopy 等。

    注意,传输的双方都必须安装 rsync

    rsync本特性:

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

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

    • 无须特殊权限即可安装

    • 优化的流程,文件传输效率高

    • 可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接

    • 支持匿名传输,以方便进行网站镜象

    在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。

    基本用法

    将源目录同步到目标目录。

    rsync -r source destination

    多个文件或目录需要同步

    rsync -r source1 source2 destination


    远程同步

    rsync 除了支持本地两个目录之间的同步,也支持远程同步。它可以将本地内容,同步到远程服务器。

    从本地同步到远程

    rsync -r <local> <remote>

    # 默认SSH端口
    rsync -avz /home/bear/mydir root@114.215.183.37:/home/bear/workdir


     从远程同步到本地

    rcyn -r <remote> <local>

    # 默认SSH端口
    rsync -avzP root@114.215.183.37:/home/bear/workdir /home/bear/mydir

    当ssh为默认端口不为22,需要指定ssh命令。

    ssh

    早期 rsync 不使用 SSH 协议,必须需要用-e参数指定协议,后来才改的。所以,下面-e ssh可以省略。

    从本地同步到远程

    # 默认SSH端口
    rsync -avz -e ssh /home/bear/mydir root@114.215.183.37:/home/bear/workdir
    # 指定SSH端口
    rsync -avz -e 'ssh -p 5555' /home/bear/mydir root@114.215.183.37:/home/bear/workdir


     从远程同步到本地


    # 默认SSH端口
    rsync -avzP -e ssh root@114.215.183.37:/home/bear/workdir /home/bear/mydir
    # 指定SSH端口
    rsync -avzP -e 'ssh -p 5555' root@114.215.183.37:/home/bear/workdir /home/bear/mydir


    Rsync的参数详细解释

     -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                    显示帮助信息

    -----------------------------------


    参考文章:

    rsync参数详解、利用ssh、rsync 实现数据的定时同步 https://blog.51cto.com/colderboy/132054

    rsync 用法教程 https://www.ruanyifeng.com/blog/2020/08/rsync.html




    转载本站文章《Linux服务器同步文件夹方案:ssh rsync同步目录备份系统》,
    请注明出处:https://www.zhoulujun.cn/html/OS/Linux/LinuxDevops/8833.html