暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 rsync 在服务器之间复制数据

运维笔谈 2025-04-10
667


比如在服务器之间同步数据啊,备份啊,我们常用的工具是rsync,具体使用 `rsync` 的步骤参考如下(抛砖引玉)。


1. 配置SSH 免密登录配置


在源服务器生成 SSH 密钥(若未生成):

    #bash
    ssh-keygen -t rsa

    将公钥复制到目标服务器:

      #bash
      ssh-copy-id -i xxx.pub 用户名@目标服务器IP

        输入目标服务器密码后,后续 `rsync` 无需重复验证。



      2. 基本 `rsync` 命令格式

        #bash
        rsync [选项] 源路径 目标路径


        rsync常用选项:


        • - `-a`:归档模式(保留权限、属性等,相当于 `-rlptgoD`)。

        • - `-v`:显示详细传输信息。

        • - `-z`:压缩传输数据,节省带宽。

        • - `-P`:显示进度并支持断点续传(等同于 `--partial --progress`)。

        • - `--delete`:删除目标端多余文件(谨慎使用!)。

        • - `--exclude="模式"`:排除指定文件/目录。

        • - `--bwlimit=KBPS`:限制传输带宽(如 `--bwlimit=1000` 表示 1MB/s)。

        • - `-e "ssh -p 端口号"`:指定 SSH 端口(默认 22)。



        3. 常见场景示例


        示例 1:本地同步到远程

          #bash
          rsync -avz /本地/目录/ 用户名@远程IP:/目标/目录/


          注意斜杠:源路径末尾的 `/` 表示同步目录内容,否则同步目录本身。


          示例 2:远程同步到本地

            #bash
            rsync -avz 用户名@远程IP:/远程/目录/ /本地/目录/


            示例 3:排除特定文件/目录

              #bash
              rsync -avz --exclude="*.log" --exclude="tmp/" /源/目录/ 用户@远程IP:/目标/目录/



              示例 4:启用 `--delete` 严格同步

                #bash
                rsync -avz --delete /源/目录/ 用户@远程IP:/目标/目录/


                示例 5:指定 SSH 端口

                  #bash
                  rsync -avz -"ssh -p 2222" /源/目录/ 用户@远程IP:/目标/目录/


                  4. 安全操作建议


                  测试命令:使用 `--dry-run` 模拟运行,避免误操作:

                     

                    #bash
                    rsync -avzn --dry-run /源/目录/ 用户@远程IP:/目标/目录/

                    增量同步:`rsync` 默认仅传输变化部分,适合频繁同步。


                    日志记录:添加 `--log-file=路径` 记录同步详情。


                    5. 故障排查


                    • 权限问题:确保目标目录可写(检查权限或使用 `sudo`)。

                    • 连接失败:检查防火墙、SSH 端口及网络连通性。

                    • 文件不一致:用 `diff -r 目录1 目录2` 或再次运行 `rsync --dry-run` 对比。

                    文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论