rsync 简介
rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。
rsync基本特性
• 在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
• 无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
• rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。
rsync命令
rsync 命令基本格式为:
1)本地使用:
rsync [OPTION…] SRC… [DEST]
2)通过远程 Shell 使用:
拉: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
推: rsync [OPTION…] SRC… [USER@]HOST:DEST
3)访问 rsync 服务器:
拉: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
推: rsync [OPTION…] SRC… [USER@]HOST::DEST
拉: rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
推: rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
其中:
SRC: 是要复制的源位置
DEST: 是复制目标位置
若本地登录用户与远程主机上的用户一致,可以省略 USER@
使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符
使用 rsync 服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符
当访问 rsync 服务器时也可以使用 rsync:// URL
“拉”复制是指从远程主机复制文件到本地主机(下载)
“推”复制是指从本地主机复制文件到远程主机(上传)
当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制
常用选项
注意:
在指定复制源时,路径是否有最后的 “/” 有不同的含义,例如:
• /home : 表示将整个 /home 目录复制到目标目录
• /home/ : 表示将 /home 目录中的所有内容复制到目标目录
基于ssh的rsync远程数据同步
192.168.76.150为服务器,192.168.76.156为客户端
1)在虚拟机中将/etc/hosts文件同步到新创建的/bak目录中
rsync -av /etc/hosts /bak
验证:
cd /bak
cd /etc
cat hosts
2)
3)筛选rsync的传输目标
rsync -av --delete /iso --exclude “profile.d/” --prigress root@192.168.76.156:/mnt/
4)使用 --exclude-from/–include-from 选项
当 include/exclude 的规则较复杂时,可以将规则写入规则文件。使用规则文件可以灵活地选择传输哪些文件(include)以及忽略哪些文件(exclude)。
• 若文件/目录在剔除列表中,则忽略传输
• 若文件/目录在包含列表中,则传输
• 若文件/目录未被提及,也传输
包含(include)和排除(exclude)规则的语法如下:
• include PATTERN 或简写为 + PATTERN
• exclude PATTERN 或简写为 – PATTERN
PATTERN 的书写规则如下:
• 以 / 开头:匹配被传输的跟路径上的文件或目录
• 以 / 结尾:匹配目录而非普通文件、链接文件或设备文件
• 使用通配符
• *:匹配非空目录或文件(遇到 / 截止)
• **:匹配任何路径(包含 / )
• ?:匹配除了 / 的任意单个字符
• [:匹配字符集中的任意一个字符,如 [a-z] 或 [[:alpha:]]
• 可以使用转义字符 \ 将上述通配符还原为字符本身含义
5)配置匿名服务器
yum install rsync -y
vi /etc/rsync.conf
配置防火墙规则
firewall-cmd --add-service=rsyncd --per
firewall-cmd --reload
firewall-cmd --list-all
启动并
启用服务
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
在客户端测试
rsync -av rsync://192.168.76.150:/iso /mnt/