共计 10810 个字符,预计需要花费 28 分钟才能阅读完成。
什么是 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/ root@192.168.1.201:/root/test
[root@nod1 ~]# ls test/
pam.d
[root@nod2 ~]# rsync -rl /root/rsyncdoc root@192.168.1.201:/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 root@192.168.1.201:/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 root@192.168.1.201:/root/test1
[root@nod1 ~]# ls test1/rsyncdoc/
fstab pam.d
root@nod2 ~]# rsync -rl –delete /root/rsyncdoc root@192.168.1.201:/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 rsync2@192.168.1.201::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 rsync2@192.168.1.201::opt /tmp/test
Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里
推荐阅读:
利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm
利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm
inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm
rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm
提问:每次都手动进行 rsync 命令来同步资源是不是觉得不太自动化,那能不能实现自动化同步呢?
自动化同步根据生产环境的不同,自动化同步的思想也应不同,这里列举两种场景来说明。
场景 1:当一服务器上的数据非常重要,需要定期对数据进行备份,并且想每次作的备份都想在服务器上的数据丢失后直接从备份数据中拿来就可以使用,那每次的备份就是对服务器数据做了一个镜像,即完成备份。那这样的场景我们可以用以下的脚本来完成。
[root@nod2 ~]# mkdir /etc/rsyncd
[root@nod2 ~]# vim /etc/rsyncd/autoback.sh
#!/bin/sh
#linux home backup
/usr/bin/rsync -avzP –delete –password-file=/etc/rsyncd/rsync2.passwd rsync2@192.168.1.201::home /data/$(date +’%m-%d-%y’) #这里的“–delete”可以省掉
[root@nod2 ~]# echo “111111” > /etc/rsyncd/rsync2.passwd
[root@nod2 ~]# chmod 600 /etc/rsyncd/rsync2.passwd
[root@nod2 ~]# chmod 755 /etc/rsyncd/autoback.sh
[root@nod2 ~]# crontab -e
5 11 * * * /usr/bin/run-parts /etc/rsyncd 1> /dev/null #在设定时间点用 run-parts 把 /etc/rsyncd 目录下的可执行文档抓取出来执行
格式为
分 时 日 月 周
[root@zhaochj rsyncd]# service crond restart
场景 2:如果是要保持两服务器的数据的一致性,每一次数据同步后,源与目标的数据都是一样 的,那只要适当的修改上边的脚本,把“$(date +’%m-%d-%y’)”删除即可。
什么是 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/ root@192.168.1.201:/root/test
[root@nod1 ~]# ls test/
pam.d
[root@nod2 ~]# rsync -rl /root/rsyncdoc root@192.168.1.201:/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 root@192.168.1.201:/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 root@192.168.1.201:/root/test1
[root@nod1 ~]# ls test1/rsyncdoc/
fstab pam.d
root@nod2 ~]# rsync -rl –delete /root/rsyncdoc root@192.168.1.201:/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 rsync2@192.168.1.201::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 rsync2@192.168.1.201::opt /tmp/test
Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里
推荐阅读:
利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm
利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm
inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm
rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm