rsync 远程同步工具

前言:rsync是类unix系统下的数据镜像备份工具,可以镜像保存整个目录树和文件系统,可以很容易做到保持原来文件的权限、时间、软硬链接等等。
rsync同样属于C/S架构模型,服务端守护进程始终监听于873端口
对比rsync命令与scp命令的优劣性

  • rsync有六种不同的工作模式介绍

    • 1:拷贝本地文件;类似于cp命令 
      • rsync grub.conf /data/
    • 2:使用一个远程shell程序(如rsh、ssh)将本地拷贝到远端主机的某个目录下 
      • rsync -avz grub.conf root@192.168.23.12:/data
    • 3:使用一个远程shell程序(如rsh、ssh)将远端主机的文件拉到本地的某个目录下 
      • rsync -avz root@192.168.23.12:/data/grub.conf /tmp/
    • 4:将远程rsync服务器中的文件拷贝到本地目录 
      • /usr/bin/rsync -avz --delete nfs@192.168.23.26::data /data/ --password-file=/etc/rsync.password
    • 5:将本地目录文件拷贝到远程rsync服务器中(非常重要) 
      • /usr/bin/rsync -avz --delete /data/ nfs@192.168.23.26::data --password-file=/etc/rsync.password
    • 6:列出远程机的文件列表, 这类似于rsync传输
  • rsync命令格式

(一) Local:  rsync [OPTION...] SRC... [DEST]

例如: rsync -avz /root/ /tmp/ # 将/root目录下的所有文件拷贝到/tmp目录下,默认是增量拷贝
例如: rsync -avz --delete /root/ /tmp/ # 增加--delete选项,指明在增量拷贝的基础上全量拷贝,也就是说/root目录下有的文件,/tmp目录下要有,/root目录下没有的文件,/tmp目录下要将文件删除。最后表现为/tmp目录的文件与/root目录的文件一样


(二)Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

例如:rsync -avz --delete -e "ssh -p 22" /tmp/ 192.168.23.26:/tmp # 通过ssh加密,使得192.168.23.26主机上的/tmp目录下的所有文件与本机的/tmp目录下的文件一样
说明: 如何是本地拉取的话,如命令格式所示,源地址与目标地址需要调换一下位置


(三)Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

例如:rsync -avz --delete /tmp/ rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password # 在daemon模式下,客户端将本地的/tmp目录下的所有文件推送到192.168.23.26主机的backup模块指定的目录中去
例如:rsync -avz --delete rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password /tmp/ # 这就是将远端的拉倒本地的/tmp目录下
  • 重要选项介绍
-a: --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v: --verbose 详细模式输出
-r: --recursive 对子目录以递归模式处理
-z: --compress 对备份的文件在传输时进行压缩处理
--delete :无差异拷贝
--exclude=somefile 指定排除不需要传输的文件模式

  • rsync的启动方式分
1:以守护进程的方式启动
/usr/bin/rsync --daemon

2:托管给xinetd服务,由xinetd代为管理
编辑 /etc/xinetd.d/rsync文件
将disable = no改为disable = yes
重启xinetd服务
此时可以看到xinetd服务监听在873端口上

  • rsync服务端配置(必须掌握)
0:创建一个/data目录,用来指定接受rsync客户端推送的文件
mkdir /data

1:编辑/etc/rsyncd.conf主配置文件
# 指定访问本地共享目录的属主和属组,当客户端连接到服务端,那么进程就以这里指定的uid和gid运行
uid = rsync
gid = rsync
# 不禁锢
use chroot = no
# 指定服务端最大并发连接数量
max connections = 2000
# 指定超时时长
timeout = 900
# 指定程序的pid路径
pid file = /var/run/rsyncd.pid
# 指定日志路径
log file = /var/log/rsyncd.log
# 指定文件系统锁路径
lock file = /var/run/rsyncd.lock
# 指定推送时出现错误忽略
ignore errors
# 指定客户端可以向服务端推送数据,因此必须是可读写
read only = false
# 关闭远程列表
list = false
# 指定允许连接rsync服务端的网络地址
hosts allow = 192.168.23.0/24
hosts deny = 0.0.0.0/32
# 启用虚拟用户(无需是系统用户),虚拟用户的意义在于用户名和密码认证
auth users = hello
# 指定用户名和密码的文件,这个文件里面的用户名就是auth users指定的用户名,然后给个密码就好
secrets file = /etc/rsync.password
#transfer logging = yes
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# 指定一个模块,用来指定接受客户端推送的文件
[data]
path = /data
comment = shared remoted NFS directory /data


2:创建一个rsync, 设置/data目录的属主为rsync,创建虚拟用户和密码
useradd rsync -s /sbin/nologin -M # 在rsync服务端一个rsync用户,不能登入,不创建家目录
chown -R rsync /data # 修改/data目录的属主为rsync,这样rsyncd进程就能够向目录里面写数据
echo "hello:123456" > /etc/rsync.password # 由于在/etc/rsyncd.conf主配置文件中指定了客户端登入的用户名以及密钥文件路径,那么根据路径创建用户密码即可
chmod 600 /etc/rsync.password # 修改密码文件的权限,注意,这里的客户端和服务端的/etc/rsync.password文件的权限都需要修改,且文件的属主和属组都是root,因为没有禁锢root。

3:配置rsync服务配置进程文件/etc/sysconfig/rsyncd
OPTIONS="--address=192.168.23.12" # 将rsync服务监听到固定的IP地址上
  • rsync客户端配置(必须掌握)
1:创建同步时候使用的密钥文件
echo "123456" > /etc/rsync.password

2:修改密钥文件的权限为600
chmod 600 /etc/rsync.password

2:手动同步本地的/data/目录的所有文件到rsync服务端
/usr/bin/rsync -avz --delete /data/ hello@192.168.23.12::data --password-file=/etc/rsync.password
原文地址:https://www.cnblogs.com/liu1026/p/7588229.html