一、rsync简介
1. rsync介绍
rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。
除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
2. 认证方式
rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式,习惯使用ssh方式。
(1)rsync-daemon认证
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
注意:
rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
客户端启动不启动rsync服务,都不影响同步的正常进行。
(2)ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具,此时同步操作不在局限于rsync中定义的同步文件夹。
注意:
ssh认证方式, 不需要服务器和客户端配置rsync配置文件,只需要双方都安装rsync服务,并且也不需要双方启动rsync。
若rsync服务端SSH为标准端口,此时rsync使用方式如下:
# 将本机(10.7.2.230)上/root目录及目录下的文件同步到服务器10.7.2.231上的/root/backup目录下
# 在10.7.2.230上执行以下命令:
rsync -avuz /root root@10.7.2.231:/root/backup
# 带密码执行
sshpass -p '231机器root的密码' rsync -avuz /root root@10.7.2.231:/root/backup
- 若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定(如ssh端口号为10022),使用方式如下:
# 将本机(10.7.2.230)上/root目录及目录下的文件同步到服务器10.7.2.231上的/root/backup目录下
# 在10.7.2.230上执行以下命令:
rsync -avuz /root -e 'ssh -p10022' root@10.7.2.231:/root/backup
二、rsync安装
1. 源码安装
#(1)下载
wget https://download.samba.org/pub/rsync/src/rsync-3.2.3.tar.gz
#(2)解压并安装
tar -xvf rsync-3.2.3.tar.gz
#(3)编译安装
# 源码安装rsync时,其编译时所需要的gcc库文件尽量提前安装完毕
# 默认安装到/usr/local/目录下
./configure
make &&make install
#(4)设置开机启动
echo “/usr/local/bin/rsync --daemon -config=/etc/rsyncd.conf” >>/etc/profile
三、rsync使用
由于ssh方式不需要进行配置文件配置,只需要像scp一样执行命令即可,因此本文主要介绍该方式的使用,rsync-daemon方式可参考其他教程。
例如需求为:将10.7.2.230上的/root目录文件同步到10.7.2.231上的/root/backup下,可通过以下两种方式来实现:
将本地文件推送(上传)到远端
# 在本地服务器上执行
# rsync 命令参数 源文件目录 目的目录
rsync [OPTION] SRC [USER@]HOST:DEST
# 示例:在10.7.2.230上执行rsync,将/root目录文件同步到远程主机(10.7.2.231的/root/backup)上
rsync -avuz /root root@10.7.2.231:/root/backup
- 将远端文件拉(下载)到本地
# rsync 命令参数 源文件目录 目的目录
# rsync [OPTION] [USER@]HOST:SRC [DEST]
# 示例:主机10.7.2.231上执行rsync,将10.7.2.230上/root下的目录文件下载到主机10.7.2.231的/root/backup上
rsync -auvz root@10.7.2.230:/root /root/backup
#注意:
源目录加了斜线,效果就是将该目录下的内容传输到目标目录下
源目录不加斜线,效果就是将该目录传输到目标目录下
目标目录如果不存在,会自动创建目标目录