rsync

用处:

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。

  • 在使用 rsync 进行远程同步时,可以使用两种方式:
    • 远程 Shell方式(建议使用 ssh,用户验证由 ssh 负责)
    • C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
  • rsync 被称为是一个文件同步的快速方法,主要是因为其在同步文件时会检查文件之间是否有差异,它只同步存在差异或者不存在的文件,但是首次同步时速度依然很慢。

参数:

rsync有许多选项:
    -n: 在不确定命令是否能按意愿执行时,务必要事先测试;-n可以完成此功能;
    -v: --verbose,详细输出模式
    -q: --quiet,静默模式
    -c: --checksum,开启校验功能,强制对文件传输进行校验
    -r: --recursive,递归复制;
    -a: --archives,归档,保留文件的原有属性,等同于"-rtopgDl"。
    -p: --perms 保留文件的权限
    -t: --times 保留文件的时间戳
    -l: --links 保留文件的符号链接 
    -g: --group 保留文件的属组
    -o: --owner 保留文件的属主
    -D: --devices 保留设备文件
    -H, --hard-links 保留硬链结;
    -S, --sparse 对稀疏文件进行特殊处理以节省DST的 空间;
    -e ssh: 表示使用ssh协议作承载
    -z: 对文件压缩后传输
    --progress:显示进度条
    --stats: 显示如何执行压缩和传输
    --delete:删除那些DST中有而SRC没有的文件,即删除DST中多余的文件;
    --delete-excluded 同样删除接收端那些被该选项指定排除的文件。
    --delete-after 传输结束以后再删除。
    --ignore-errors 及时出现IO错误也进行删除。
    --max-delete=NUM 最多删除NUM个文件。
    --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
    --force 强制删除目录,即使不为空。
    --numeric-ids 不将数字的用户和组id匹配为用户名和组名。
    --timeout=time ip超时时间,单位为秒。
    -I, --ignore-times 不跳过那些有同样的时间和长度的文件。
    --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
    --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
    -T --temp-dir=DIR 在DIR中创建临时文件。
    --exclude=PATTERN 指定排除不需要传输的文件模式。
    --include=PATTERN 指定不排除而需要传输的文件模式。
    --exclude-from=FILE 排除FILE中指定模式的文件。
    --include-from=FILE 不排除FILE指定模式匹配的文件。
    --version 打印版本信息。
    --address 绑定到特定的地址。
    --config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
    --port=PORT 指定其他的rsync服务端口。
    --blocking-io 对远程shell使用阻塞IO。
    --compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
    --max-size  :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值
    (例如:"--max-size=1.5m")
    --min-size  :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
    --exclude   :指定排除规则来排除不需要传输的文件。
    --port      :连接daemon时使用的端口号,默认为873端口。
    --password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
    -W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
    --existing  :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
    --ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
    --remove-source-files:要求删除源端已经成功传输的文件。

使用:

1.拷贝本地文件

rsync -avz /home/feiyu/ /bak/

2.将本地机器的内容拷贝到远程机器

rsync -avz /home/jfy/ 192.168.12.24:/home/jfy/

3.将远程机器的内容拷贝到本地机器

rsync -avz 192.168.12.24:/home/jfy/ /home/jfy/
  • 注意:
    • rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录的内容,而不复制目录本身;
    • 没有斜线,则会复制目录本身;目标参数末尾的斜线没有作用;因此下面的命令
rsync -r /mydata/data /backups/ : 会把目录data直接同步至/backups目录中
rsync -r /mydata/data/ /backups/: 会把目录data/中的内容的同步至/backups目录中

配置rsync服务:

配置一个简单的rsync服务并不复杂,但是我们安装好rsync后,并没有发现配置文件,所以你需要手动建立一些配置文件。rsync可以经由xinetd启动daemon,或者作为一个独立进程启动daemon。如果把它作为一个独立进程来启动,只需要运行命令:rsync –daemon即可;但是我们一般将其作为超级守护进程使用。

xinetd:

  1. 独立启动的守护进程:stand-alone,每个特定服务都有单独的守护进程,这个处理单一服务的始终存在的进程就是独立启动的守护进程。
  2. 超级守护进程:多个服务统一由一个进程管理,该进程可以管理多个服务。
  3. Xinetd:即extended internet daemon,是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。Xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。

下面是安装步骤:

1.安装并启动xinetd

yum -y install xinetd 

2. 为rsync服务提供配置文件

  • 配置文件为/etc/rsyncd.conf,获取帮助的方式:man rsyncd.conf。
  • 配置文件需要定义一个全局配置和多个rsync共享配置。
[root@localhost ~]# cat  /etc/rsyncd.conf 
# Global Settings
# port = 873   端口号默认为873,可以不指定
uid = nobody  //指定当模块传输文件的守护进程UID
gid = nobody  //指定当模块传输文件的守护进程GID
use chroot = no  //使用chroot到文件系统中的目录中
max connections = 5   //最大并发连接数
strict modes = yes      #严格检查文件权限
pid file = /var/run/rsyncd.pid  //指定PID文件
lock file = /usr/local/rsyncd/rsyncd.lock  //指定支持max connection的锁文件,默认为/var/run/rsyncd.lock
log file = /var/log/rsyncd.log  //rsync 服务器的日志
 
# Directory to be synced
[mydata]          //自定义模块
path = /mydata/data    //用来指定要备份的目录
ignore errors = yes    //可以忽略一些IO错误
read only = no  //设置no,客户端可以上传文件,yes是只读
write only = no  //no为客户端可以下载,yes 不能下载
hosts allow = 192.168.0.0/16  //可以连接的IP
hosts deny = *   //禁止连接的IP
list = false       //客户请求时,使用模块列表
uid = root
gid = root	
auth users = myuser   //连接用户名,和linux系统用户名无关系
secrets file = /etc/rsyncd.passwd	//验证密码文件

说明(deny | allow 规则):

  1. 二者都不出现时,默认为允许访问;
  2. 只出现hosts allow: 定义白名单;但没有被匹配到的主机由默认规则处理,即为允许;
  3. 只出现hosts deny: 定义黑名单;出现在名单中的都被拒绝;
  4. 二者同时出现:先检查hosts allow,如果匹配就allow,否则,检查hosts deny,如果匹配则拒绝;如二者均无匹配,则由默认规则处理,即为允许;

3.创建密码文件

[root@localhost ~]# echo "myuser:mypass" >  /etc/rsyncd.passwd 
 
[root@localhost ~]# chmod 600 /etc/rsyncd.passwd     #权限必须为600

4.启动服务

[root@localhost ~]# service xinetd  start

5.使用方法 ( 后三种模式 )

  • 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
rsync -avz myuser@192.168.12.24::mydata /tmp/
#myuser为rsync服务器的一个用户
  • 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
rsync -avz install.log.syslog  myuser@192.168.12.24::mydata 
  • 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
rsync -avz myuser@192.168.12.24::mydata

扩展:

ssh免密登录:

ssh-keygen -t rsa  // ~/.ssh 生成密钥 生成的文件 id_rsa(私钥)、id_rsa.pub(公钥)
ssh-copy-id -p 822 jfy@192.168.12.24  //把公钥复制到想免密登录的服务器上 192.168.12.24