Linux 远程同步:rsync
rsync 简介:
(1) rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件
(2) rsync 使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
(3) rsync 可以实现增量同步文件,也可以实现全量同步文件;可以实现本地同步文件,也可以实现远程同步文件
[root@localhost ~]$ yum install -y rsync # 要使用rsync实现远程同步,要求两端都安装rsync工具
rsync -avzP /etc/passwd /tmp/1.txt # 本地同步,表示把/etc/passwd文件同步到/tmp目录并改文件名为1.txt rsync -avzP /data/aaaa/ /tmp/bbbb/ # 本地同步,表示把/data/aaaa目录同步到/tmp目录并改目录名为bbbb,同步目录时,最好在末尾都加上/ rsync -avzP /etc/passwd 192.168.1.2:/tmp/1.txt # 远程同步,表示把/etc/passwd文件同步到远程192.168.1.1的/tmp目录并改名为1.txt rsync -avzP /etc/passwd 192.168.1.2::tmp/1.txt # 远程同步,表示把/etc/passwd文件同步到远程192.168.1.1的tmp模块的指定目录下并改名为1.txt
rsync 通过ssh的方式实现远程同步:
rsync -avzP /tmp/1.txt 192.168.1.2:/tmp/2.txt # 表示把本机的/tmp/1.txt文件同步到远程192.168.1.1的/tmp目录并改名为2.txt rsync -avzP 192.168.1.2:/tmp/2.txt /tmp/1.txt # 表示把远程192.168.1.1的/tmp/2.txt文件同步到本机的/tmp目录并改名为1.txt rsync -avzP -e "ssh -p 37" /tmp/1.txt 192.168.1.2:/tmp/2.txt # rsync默认是通过ssh服务连接并实现远程同步的,如果远程的ssh端口号不是22,可以通过该选项指定
rsync 通过服务的方式实现远程同步:
1. 服务端配置:
[root@localhost ~]$ cat /etc/rsyncd.conf uid=root # 指定模块以指定的UID传输文件 gid=root # 指定模块以指定的GID传输文件 use chroot=no # 自行百度,一般填no就行 max connections=3000 # 指定最大的客户端连接数 log file=/var/log/rsyncd.log # 指定日志文件路劲 pid file=/var/run/rsyncd.pid # 指定pid文件路径 lock file=/var/run/rsyncd.lock # 指定lock文件路径 log format= %t %a %m %f %b # 指定日志格式 syslog facility=local3 # 指定rsync发送日志消息给syslog时的消息级别 reverse lookup=no # 禁用守护进程端的反向查找 timeout=1200 # 指定传输超时时间 port = 3873 # 指定服务端监听的端口,默认是873 [tmp] # 指定模块名 path=/tmp # 指定模块对应的路径 comment=server # 模块的描述信息 list=no # 是否允许客户端查询服务端上开放的模块 read only=no # 如果是yes,则不能上传到该模块指定的路径下(即写操作) ignore errors=yes # 是否忽略错误 hosts allow = 192.168.1.2 # 允许远程同步的客户端 hosts deny = * # 拒绝远程同步的客户端 auth users = rsync # 指定同步时的认证用户,客户端必须通过 rsync -avzP 1.txt rsync@server_ip::1.txt 指定认证用户 secrets file = /etc/rsync.server # 指定同步时的认证密码文件,文件权限必须是600
[root@localhost ~]$ cat /etc/rsync.server # 配置认证密码文件,文件权限必须是600
rsync:54983254dgqdagrgfta
[root@localhost ~]$ chmod 600 /etc/rsync.server
[root@localhost ~]$ rsync --daemon # 以daemon方式启动rsync,会监听配置文件中指定的端口(3873)
2. 客户端同步文件:
[root@localhost ~]$ cat /etc/rsync.client # 配置认证密码文件,文件权限必须是600,注意格式与服务端的不同,只需要写密码即可 54983254dgqdagrgfta [root@localhost ~]$ chmod 600 /etc/rsync.server
[root@localhost ~]$ rsync -avzP --port=3873 --password-file=/etc/rsync.client 1.txt rsync@192.168.1.1::tmp/1.txt >> /tmp/rsync.log 2>&1
rsync 命令参数:
-a # 相当于使用-rtplgoD这些选项 -r # 如果同步目录要加上该选项,类似 cp 的 -r 选项 -v # 显示同步时的详细信息,让我们知道同步的过程 -l # 同步时保留软链接 -p # 保持文件的权限 -o # 保持文件的属主 -g # 保持文件的属组 -D # 保持设备文件信息 -t # 保持文件的时间属性 -L # 同步软链接的同时也同步软链接指向的源文件,如果加上该参数就不需要加上-l参数了 -P # 显示同步过程,比-v更详细,会显示同步的进度,显示同步的网络速率,显示同步了多长时间 -u # 如果目标文件比源文件新,则不同步 -z # 文件传输前先压缩再同步 -e # rsync默认是通过ssh服务连接并实现远程同步的,如果远程的ssh端口号不是22,可以通过 -e "ssh -p 3737" 来指定 --port # rsync服务端默认监听873端口,如果不是该端口要用--port=3873来指定 --timeout # 限制传输的超时时间,单位为秒,如 --timeout=1200 --bwlimit # 限制传输的网络速率,单位为KBytes,如 --bwlimit=3000 --delete # 如果dest存在src中没有的文件或目录,会把dest中src没有的文件删除 --exclude # 过滤指定文件,如 --exclude ".svn" 会把文件名包含 svn 的文件或目录过滤掉,不同步