Linux学习之rsync详解

什么是rsync:
      rsync(remote sync) 是一个Unix及类Unix系统下的一个应用软件,是一个能实现主机与主机间数据远程同步的软件。rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次传送,完成一次镜像copy后,在发后对同样的目录进行rsync时它只传输源文件和目标文件之间不一致的部分,这样可以大大节约带宽,所以rsync可以执行完整备份或增量备份。更棒的是,在所有风格的 UNIX 上都可以使用 rsync,包括 Mac OS X,所以很容易连接任何系统。

rsync常见的3种工作模式:
      1、shell模式,也称为本地模式;使用方法与cp命令相似。
      2、远程shell模式,利用SSH执行底层连接和传输;使用方法与scp命令相似。
      3、服务器模式,rsync以守护进程方式运行,接收文件传输请求。在使用时,可以使用rsync命令把文件发送给守护进程,也可以向它请求文件。服务器模式非常适合创建中心备份服务器或项目存储库。
      4、列表模式,与“ls”相似,会列出源的内容。
注:远程shell模式和服务器模式的差异在于,后者在源和目标名中使用两个冒号 (:)


rsync的命令使用规范:(摘自manpage)
rsync is a file transfer program capable of efficient remote update  via a fast differencing algorithm.
rsync是一个高效可靠的文件传输程序,通过快速的差分算法实现数据的远程更新。
Usage: rsync [OPTION]... SRC [SRC]... DEST      本地模式的使用
 or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST    把本地资源通过一个特定的用户同步到远程主机上
 or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST  把本地资源通过一个特定的用户同步到一个以服务器模式工作的rsync服务器上,这里用了两个冒号,DEST是指rsync服务器的模块名
 or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
 or rsync [OPTION]... [USER@]HOST:SRC [DEST]
 or rsync [OPTION]... [USER@]HOST::SRC [DEST]
 or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect  to an rsync daemon, and require SRC or DEST to start with a module name.
使用一个冒号表示连接到远程shell,使用两个冒号和“rsync://”表示连接到一个以daemon运行的rsync服务器,以这种方式连接时“SRC”与"DEST"是模块的名称。


rsync命令的常用选项(OPTION):
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-l, --links 保留符号链结
-p, --perms 保留文件权限
-t, --times 保留文件时间戳
-g, --group 保留文件属组信息
-o, --owner 保留文件属主信息
-D, --devices 保留设备文件即特殊文件信息
-e, --rsh=COMMAND 指定替代rsh的shell程序
-z, --compress 对备份的文件在传输时进行压缩处理
--delete 删除目标目录下附加的文件,让目录目录与源目录保持一样
还可以使用两个选项监视传输的状态:--progress和--stats。
 --progress 显示进度条
 --stats 显示如何执行压缩和传输
实战演练部份:
实验环境:一台CentOS 6.4_x64主机和一台centos 5.10_x64 ,默认安装后rsync已安装,如果没有安装,用yum命令进行安装即可
          nod1 ip:192.168.1.201
          nod2 ip:192.168.1.200
          rsync软件版本:[root@nod2 ~]# rpm -qa rsync
rsync-3.0.6-9.el6_4.1.x86_64
[root@nod1 ~]# rpm -qa rsync
rsync-3.0.6-4.el5_7.1
      rsync的远程shell模式(可实现两个主机间目录、档案的同步):


            在nod2上准备要同步到nod1上的目录
[root@nod2 ~]# mkdir rsyncdoc
[root@nod2 ~]# cp -R /etc/pam.d rsyncdoc/
[root@nod2 ~]# ls rsyncdoc/
pam.d


1、我们需要把nod2上的rsyncdoc目录同步到nod1的/root/test目录下
[root@nod2 ~]# rsync -rl /root/rsyncdoc/ [email protected]:/root/test
[root@nod1 ~]# ls test/
pam.d
[root@nod2 ~]# rsync -rl /root/rsyncdoc [email protected]:/root/test1
[root@nod1 ~]# ls test1
rsyncdoc
  看见区别了吗?在同步目录时多了一个“/”与少一个“/”结果是不一样的。有“/”是同步rsyncdoc这个目录下的目录及档案,如果没有“/”是同步rsyncdoc这个目录。


2、删除nod1上/root/test1/rsyncdoc/pam.d/passwd文件,再执行1中的rsync命令,passwd文件会存在吗?
[root@nod1 ~]# rm -f test1/rsyncdoc/pam.d/passwd
[root@nod2 ~]# rsync -rl /root/rsyncdoc [email protected]:/root/test1
[root@nod1 ~]# ls test1/rsyncdoc/pam.d/ | grep passwd
passwd
可见passwd被同步过来,与cp命令的区别是rsync只是同步了这一个文件,如果复制syncdoc这个目录到目标,那全部的文件都会被覆盖,当然passwd这个文件也会被复制过来,但两者实现的原理不一样,由于rsync只是同步了一个文件,那效率当然要比cp的效率高。
3、在nod1上复制/etc/fstab文件到/root/test1/rsyncdoc目录下,请问再执行1中的rsync命令后,fstab文件是否存在?
[root@nod1 ~]# cp /etc/fstab test1/rsyncdoc/
[root@nod1 ~]# ls test1/rsyncdoc/
fstab pam.d
[root@nod2 ~]# rsync -rl /root/rsyncdoc [email protected]:/root/test1
[root@nod1 ~]# ls test1/rsyncdoc/
fstab pam.d
root@nod2 ~]# rsync -rl --delete /root/rsyncdoc [email protected]:/root/test1
[root@nod1 ~]# ls test1/rsyncdoc/
pam.d
                  可见在不加“--delete”这个参数时,同步后目标目录下的fstab档案是存在的,但有“--delete”这个参数后,会删除目标中多余的文件,目标目录和源目录保持完全相同。


          rsync的服务器模式:(以服务器模式运行时,客户机与服务器间的数据传输是明文传输,可加入用户验证机制,只能用在一些对安全性要求不高的场景)
nod1 ip:192.168.1.201作为服务端,nod2 ip:192.168.1.200作为客户端。


          服务器端的配置:
                  [root@nod1 ~]# mkdir /etc/rsyncd
[root@nod1 ~]# echo "This is a rsync server." > /etc/rsyncd/rsyncd.motd
[root@nod1 ~]# echo "rsync1:111111" > /etc/rsyncd/rsyncd.secrets
[root@nod1 ~]# echo "rsync2:111111" >> /etc/rsyncd/rsyncd.secrets
[root@nod1 ~]# cat /etc/rsyncd/rsyncd.secrets
rsync1:111111
rsync2:111111
[root@nod1 ~]# chomd 600 /etc/rsyncd/rsyncd.secrets  #这一步很重要,不然不能完成同步操作
[root@nod1 ~]# vi /etc/rsyncd.conf


uid = root
gid = root
use chroot = yes
read only = yes
hosts allow=192.168.1.0/255.255.255.0
max connections = 5
motd file = /etc/rsyncd/rsyncd.motd
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[home]
path = /home
list = no
ignore errors
auth users = rsync1
secrets file = /etc/rsyncd/rsyncd.secrets
comment = linuxsir home
exclude = samba/
[opt]
path = /opt
list = yes
ignore errors
auth users = rsync2
secrets file = /etc/rsyncd/rsyncd.secrets
                  [root@nod1 ~]# rsync --list-only 192.168.1.201::    #列出本地服务器哪些模块可以同步(配置文件中"list = yes")
This is a rsync server.
opt      linuxsir opt


          客户端同步操作:
                  [root@nod2 ~]# rsync -avzP [email protected]::opt /tmp/test
This is a rsync server.
Password:
输入密码后即可完成同步。


提问:如果想让客户端进行同步时不用手动输入密码,能自动的进行同步,这该怎样配置?
[root@nod2 ~]# echo "111111" > rsync2.passwd
[root@nod2 ~]# chmod 600 rsync2.passwd
[root@nod2 ~]# rsync -avzP --password-file=rsync2.passwd [email protected]::opt    /tmp/test

 

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

推荐阅读:

相关推荐