增量传输只发送文件差异部分不整文件重传速度极快本地 / 远程同步支持本机目录、ssh 远程服务器同步保留文件属性权限、属主、时间、软硬链接、设备文件压缩传输传输时压缩节省带宽删除冗余文件可让目标目录与源完全一致支持断点续传、过滤文件、限速同步。回到顶部rsync工作原理rsync的高效性来源于其独特的增量传输算法分块校验将文件分成固定大小的数据块默认1024字节-65536字节校验和计算对每个块计算MD5校验和、滚动校验和rolling checksum差异比对比对两端文件的校验和找出差异块增量传输仅传输差异块和指令接收端重新组装文件回到顶部rsync传输模式rsync主要有三种传输模式本地传输模式本地文件/目录之间同步远程shell传输模式通过ssh/rsh通道传输守护进程模式传输通过rsync daemon服务传输回到顶部rsync数据流向根据数据流向的不同可以分为两种pull拉取远程数据到本地push将本地数据推送到远程回到顶部rsync安装一般Linux系统中会自带rsync服务如果没有到话可以进行安装CentOS/RHEL系列yum install -y rsyncUbuntu/Debian系列apt install -y rsync回到顶部rsync语法及参数语法本地同步模式rsync [选项] 源路径 目标路径远程同步模式本地 → 远程推送rsync [参数] 本地文件 user远程IP:远程路径远程 → 本地拉取rsync [参数] user远程IP:远程路径 本地路径守护进程模式rsync [参数] userIP::模块名 本地路径参数说明rsync 常用参数速查表参数 完整长参数 详细作用说明 使用场景 示例-a --archive 归档模式等价 -rlptgoD递归同步并完整保留文件所有属性本地/远程同步日常标配 标准同步必带rsync -avz src/ userip:/dst/-r --recursive 递归同步所有子目录及目录内文件 单独使用较少一般被 -a 包含-l --links 保留软链接本身不跟随软链接同步真实文件 备份程序目录、配置软链接环境-p --perms 保留文件读写执行权限rwx权限位 服务器配置、脚本备份避免权限丢失-t --times 保留文件原始修改时间戳 日志、代码备份方便对比文件变更-g --group 保留文件归属用户组 多用户服务器、业务数据同步-o --owner 保留文件属主仅root用户生效 系统全盘备份、服务器迁移-D --devices --specials 保留设备文件、管道、套接字等特殊文件 系统完整镜像备份-v --verbose 详细输出打印同步文件、操作日志 日常调试查看哪些文件被同步-vv --verbose --verbose 超详细日志输出底层校验、传输细节 同步异常、丢文件排错专用-z --compress 文件传输过程中压缩降低带宽消耗 远程ssh同步必加本地同步无需–delete - 严格对齐目录删除目标目录存在、源目录不存在的文件/目录镜像同步核心参数 定时镜像备份、发布文件同步示例rsync -avz --delete src/ dst/–excludexxx - 排除指定文件/目录支持通配符 排除日志、缓存–excludelogs/ --exclude.tmp–exclude-fromfile - 从外部文本文件读取多条排除规则批量过滤 大量过滤规则时使用–exclude-from/etc/rsync.exclude–includexxx - 强制包含指定文件必须配合 --exclude 使用规则顺序生效 排除目录但保留指定后缀–include.conf --exclude*–progress - 实时显示单文件传输进度、传输速度、已传输大小 大文件同步、长时间备份查看状态–bwlimit10000 - 传输带宽限速单位KB/s示例1000010MB/s 业务高峰期备份避免占满带宽-e ssh --rshssh 指定使用ssh作为远程传输通道rsync远程同步默认ssh可省略 自定义ssh端口必须搭配使用-e “ssh -p 2222” - ssh自定义端口连接远程服务器 远程主机ssh非22端口rsync -avz -e “ssh -p 2222” src userip:/dst–size-only - 仅对比文件大小判断是否同步忽略修改时间戳不校验时间 网络波动大、海量小文件快速同步-n / --dry-run --dry-run 模拟试运行仅打印将要执行的操作不真实修改目标文件 生产执行前校验规则、防止误删强烈推荐先测试虽然参数很多但是实际常用的只有下面几个-a-v-z–progress-n回到顶部实战案例本地同步模式将etc传输到/data00/rsync目录下进行传输我这里第一次进行传输是全量备份rootmaster:~# rsync -avz --progress /etc /data00/rsync/查看rootmaster:~# ll /data00/rsync/total 12drwxr-xr-x 119 root root 12288 Jul 9 17:59 etc测试对其目录测试–delete到使用在/data00/rsync/etc/目录下创建test1.txt文件然后使用rsync --delete进行传输查看test1.txt文件是否会被删除rootmaster:~# touch /data00/rsync/etc/test1.txtrootmaster:~# rsync -avz --progress --delete /etc /data00/rsync/sending incremental file listdeleting etc/test1.txtetc/etc/sysop/juno/log/juno.log5,110,947 100% 112.63MB/s 0:00:00 (xfr#1, to-chk423/2557)etc/sysop/juno/temp/healthd2/kernel_log_seq7 100% 0.16kB/s 0:00:00 (xfr#2, to-chk410/2557)etc/sysop/mongoosev3-agent/log/mongoosev3-agent.log222,852 100% 4.72MB/s 0:00:00 (xfr#3, to-chk377/2557)etc/sysop/mongoosev3-agent/plugin/driver/driver.log2,317,928 100% 27.98MB/s 0:00:00 (xfr#4, to-chk254/2557)etc/sysop/network/10.37.97.56/default.20260715_1.log6,579,780 100% 51.43MB/s 0:00:00 (xfr#5, to-chk183/2557)etc/sysop/network/10.37.97.56/error.20260714_0.log883,926 100% 6.53MB/s 0:00:00 (xfr#6, to-chk172/2557)sent 645,309 bytes received 532 bytes 1,291,682.00 bytes/sectotal size is 455,738,694 speedup is 705.65发现文件已经没有了rootmaster:~# ll /data00/rsync/etc/test1.txtls: cannot access ‘/data00/rsync/etc/test1.txt’: No such file or directory远程push模式这里默认你的ssh端口都是22且配置好了ssh密钥认证远程push模式就是将本地文件推送到远程服务器中将本地etc目录推送到远程/data00/rsync目录下传输rootmaster:~# rsync -avz --progress /etc root10.37.99.63:/data00/rsync/查看远程的文件rootmaster:~# ssh root10.37.99.63 ‘ls -l /data00/rsync/’total 12drwxr-xr-x 119 root root 12288 Jul 9 17:59 etc假设你的端口不是22需要指定端口-e “ssh -p 2222” 指定ssh端口rsync -avz --progress -e “ssh -p 2222” /local/ root10.37.99.63:/remote/远程pull模式这里默认你的ssh端口都是22且配置好了ssh密钥认证远程pull模式就是将远程文件拉取到本地将远程/etc目录拉取到本地rootmaster:~# rsync -avz --progress root10.37.99.63:/etc /data00/rsync/检查本地文件rootmaster:~# ll /data00/rsync/total 4drwxr-xr-x 113 root root 4096 Jul 10 15:41 etc补充rsync远程连接服务器时指定密钥或者密码rsync 远程传输底层依赖 ssh分两种场景密钥免密登录推荐、密码自动输入不推荐仅临时使用指定密钥传输rsync默认读取本地/root/.ssh/id_rsa文件如果是其它密钥文件可以使用-e “ssh -i 私钥路径” 指定私钥注意事项私钥文件权限必须严格chmod 600 /root/.ssh/id_rsa_bak否则 ssh 拒绝使用私钥路径写绝对路径避免相对路径识别失败远程服务器 ~/.ssh/authorized_keys 需填入私钥对应的公钥实现免密。示例携带私钥进行传输rsync -avz --progress -e “ssh -i /root/.ssh/id_rsa_bak” /data/file.tar root192.168.1.200:/backup/示例携带私钥及端口进行传输-p 指定ssh端口-i 指定私钥写在同一个ssh参数内rsync -avz --delete -e “ssh -p 2222 -i /root/.ssh/id_rsa_bak” /data/src/ root192.168.1.200:/data/dst/指定密码进行传输指定密码需要借用sshpass工具下载sshpass工具CentOS/RHELyum install sshpass -yUbuntu/Debianapt install sshpass -y直接输入密码直接明文写密码不建议生产命令历史会留存密码sshpass -p “你的SSH密码” rsync -avz [其他参数] -e ssh 源 userip:目标示例,指定密码sshpass -p “Admin123” rsync -avz --progress /data/logs/ root192.168.1.100:/log_bak/自定义端口密码sshpass -p “Admin123” rsync -avz -e “ssh -p 2222” /data/ root192.168.1.100:/dst/安全优化将密码放到文件中,避免明文出现在命令行echo “Admin123” /tmp/ssh.pwdchmod 600 /tmp/ssh.pwd-f 读取文件内密码sshpass -f /tmp/ssh.pwd rsync -avz /data/ root192.168.1.100:/dst/守护进程模式守护进程 daemon 模式可以理解成rsync 独立后台服务端口 873不依赖ssh端口也不依赖 ssh 账号适合定时批量备份分为服务端 (daemon) 和客户端。守护进程模式优势权限隔离单独模块控制读写不暴露系统账号限速、只读、IP 黑白名单、访问密码独立管理支持匿名 / 密码认证大量服务器集中备份场景首选独立 873 端口可防火墙单独放行守护进程配置步骤守护进程配置比较复杂下面来进行配置服务器配置rsync服务端备份的机器也就是将文件推送到这台机器上进行备份rsync客户端需要备份到机器该机器上的文件需要推送到服务端服务端配置步骤服务端下载安装rsyncCentOS/RHELyum install rsync -yUbuntu/Debianapt install rsync -y服务端修改配置文件rootmaster:~# cat /etc/rsyncd.conf全局配置字段#用户名uid rsync用户组gid rsync是否使用root传输yes表示是no表示否use chroot no只读开启/关闭true表示开启false表示关闭read only false最大连接数max connections 2000超时时间timeout 600pid文件pid file /var/run/rsyncd.pid并发锁文件lock file /var/run/rsync.lock日志文件log file /var/log/rsyncd.log是否忽略errorignore errors允许列出模块列表false代表不允许true代表允许list false访问验证用户虚拟账号非系统用户auth users rsync_backup密码文件secrets file /etc/rsync.password允许访问客户端IP多个逗号分隔0.0.0.0/0全部放行hosts allow 10.37.0.0/16拒绝客户端IP访问hosts deny 0.0.0.0/0自定义模块【data】客户端访问标识[data]# 模块注释comment huangsir devops rsyncd study# 同步根目录真实服务器路径path /data00/rsync/rsyncd单独模块是否只读优先级高于全局read only false不允许删除文件按需开启refuse options delete服务端创建备份目录、创建用户创建目录和配置文件中的自定义模块backup中的path对齐rootmaster:~# mkdir -p /data00/rsync/rsyncd创建用户和配置文件中的uid对齐rootmaster:~# useradd rsync -M -s /sbin/nologin检查用户是否存在rootmaster:~# id rsyncuid2005(rsync) gid2006(rsync) groups2006(rsync)给目录授权rootmaster:~# chown rsync:rsync -R /data00/rsync/rsyncd/检查rootmaster:~# stat /data00/rsync/rsyncd/File: /data00/rsync/rsyncd/Size: 4096 Blocks: 8 IO Block: 4096 directoryDevice: fe10h/65040d Inode: 8129044 Links: 2这里已经改变了Access: (0755/drwxr-xr-x) Uid: ( 2005/ rsync) Gid: ( 2006/ rsync)Access: 2026-07-15 14:24:20.403479958 0800Modify: 2026-07-15 14:20:43.432593738 0800Change: 2026-07-15 14:24:20.403479958 0800Birth: -服务端创建rsync密码文件并修改权限密码文件固定为rsync.password其里面的内容为[用户名:密码]用户名为配置文件中的auth users 配置的用户名是个虚拟账号rootmaster:~# echo ‘rsync_backup:1’ /etc/rsync.passwordrootmaster:~# cat /etc/rsync.passwordrsync_backup:1修改文件的访问权限权限rootmaster:~# chmod 600 /etc/rsync.passwordrootmaster:~# ll /etc/rsync.password-rw------- 1 root root 15 Jul 15 14:27 /etc/rsync.password启动rsyncd服务并检查端口是否开启rootmaster:~# systemctl start rsync检查状态rootmaster:~# systemctl status rsync● rsync.service - fast remote file copy program daemonLoaded: loaded (/lib/systemd/system/rsync.service; enabled; vendor preset: enabled)Active: active (running) since Wed 2026-07-15 14:29:41 CST; 10s agoDocs: man:rsync(1)man:rsyncd.conf(5)Main PID: 2810502 (rsync)Tasks: 1 (limit: 9830)Memory: 272.0KCGroup: /system.slice/rsync.service└─2810502 /usr/bin/rsync --daemon --no-detachJul 15 14:29:41 master systemd[1]: Started fast remote file copy program daemon.检查端口rootmaster:~# ss -lntup | grep 873tcp LISTEN 0 5 0.0.0.0:873 0.0.0.0:* users:((“rsync”,pid2810502,fd3))tcp LISTEN 0 5 [::]:873 [::] users:((“rsync”,pid2810502,fd5))tcp LISTEN 0 128 [::]:32873 [::] users:((“rpc.mountd”,pid735389,fd19))服务端本地测试执行语法 rsync [选项] [文件路径] 虚拟账号名远程IP::[自定义模块名称]rootmaster:~# rsync -avz --progress /etc/hostname rsync_backup10.37.97.56::dataPassword: # 这里输入文件中的密码sending incremental file listhostname7 100% 0.00kB/s 0:00:00 (xfr#1, to-chk0/1)sent 101 bytes received 43 bytes 57.60 bytes/sectotal size is 7 speedup is 0.05客户端操作