1.Rsync介绍
rsync:remote sync,是类UNIX操作系统下的数据镜像备份工具。
rsync是基于C/S模式的,因此分为客户端和服务器端的配置。第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
运行 Rsync server 的机器也叫backup server ,一个 Rsyncserver 可同时备份多个 client 的数据;也可以多个 Rsync server 备份一个 client 的数据。
Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsyncserver 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。
Rsync 的基本特点如下:
1. 可以镜像保存整个目录树和文件系统;
2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
3. 无须特殊权限即可安装;
4. 优化的流程,文件传输效率高;
5. 可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
6. 支持匿名传输。
2.Rsync的安装
官网:http://rsync.samba.org
默认情况下,在RHEL6.3系统中已经提供了rsync软件,可以直接使用yum进行安装。
yum install -y rsync-*
通过rpm –qa | grep rsync查看系统中是否已经安装了rsync软件。
[root@server ~]#rpm -qa | grep rsync
rsync-3.0.6-9.el6.x86_64
[root@server ~]#
如果想使用最新版本的rsync软件包的话,可以到官网上下载最新的软件并予以安装。
下载:wget http://rsync.samba.org/ftp/rsync/rsync-3.1.0.tar.gz
解压:tar –zxvf rsync-3.1.0.tar.gz
[root@server opt]#ll
total 868
drwxrwxr-x. 10 rootroot 4096 Sep 29 04:55 rsync-3.1.0
-rw-r--r--. 1 root root 883901 Feb 8 11:14 rsync-3.1.0.tar.gz
[root@server opt]#
进入到解压目录:cd rsync-3.1.0
在该目录下,可以查看INSTALL和README文件查看该软件是如何进行安装的,根据提示进行操作。需要先安装gcc
[[email protected]]# ./configure
[[email protected]]# make
[[email protected]]# make install
安装位置在:/usr/local/bin/rsync
如果你的系统中已经安装了rsync的话,可以用which –a rsync来查看系统中有多少个rsync指令。
配置文件:/etc/rsyncd.conf。默认情况下,该文件是不存在的,需要手动创建。
3.Rsync的语法
1)Local: rsync [OPTION...] SRC... [DEST]
注释:本地复制
2)Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC...[DEST]
注释:将远程主机上的文件复制到本地。
Push: rsync [OPTION...] SRC...[USER@]HOST:DEST
注释:将本地的文件复制到远程主机上。
3)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
Usages with just one SRC arg and no DEST arg will listthe source files instead of copying.
注释:如果仅仅有一个SRC参数,没有DEST参数的话,则表示的是列出该目录下的内容。
USER:指定连接rsync服务器指定模块的用户名。
options:
rsync参数的具体解释如下:
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir=DIR 将备份文件(如~filename)存放在在目录下。
--suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 像对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中有而SRC中没有的文件
--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中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--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
-stats 给出某些文件的传输状态
--progress 在传输时显示传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
常用的选项为: avz
具体的options信息,可以用man rsync查看。
4. Rsync命令格式练习
1. Local: rsync [OPTION...] SRC... [DEST]
作用:本地主机进行文件复制。类似于cp。如果只有一个SRC参数,没有DEST参数,则表示列出该目录下的内容,类似于ls
[root@server tmp]#ll
total 0
[root@server tmp]# rsync -a /etc/hoststest
[root@server tmp]# rsync -a /tmp/
drwxrwxrwt 4,096 2014/02/08 12:14:09 .
-rw-r--r-- 158 2010/01/12 21:28:22 test
drwxrwxrwt 4,096 2014/02/08 09:24:42 .ICE-unix
drwx------ 4,096 2014/01/09 14:57:13 .esd-0
srwxrwxrwx 0 2014/01/09 14:57:13.esd-0/socket
[root@server tmp]#
2. Accessvia remote shell
Pull: rsync [OPTION...] [USER@]HOST:SRC...[DEST]
注释:将远程主机上的文件复制到本地。
Push: rsync [OPTION...] SRC...[USER@]HOST:DEST
注释:将本地的文件复制到远程主机上。
Pull:
[root@server tmp]# rsync -avz--progress [email protected]:/opt/scripts /tmp/
The authenticity ofhost '172.17.100.253 (172.17.100.253)' can't be established.
RSA key fingerprintis 39:e2:ac:ce:7e:96:0b:cf:c9:4d:00:90:97:f7:aa:f3.
Are you sure youwant to continue connecting (yes/no)? yes
Warning:Permanently added '172.17.100.253' (RSA) to the list of known hosts.
[email protected]'spassword:
receiving incrementalfile list
scripts/
scripts/1+n.sh
453 100% 442.38kB/s 0:00:00 (xfr#1, to-chk=14/16)
scripts/1.sh
203 100% 198.24kB/s 0:00:00 (xfr#2, to-chk=13/16)
scripts/case1.sh
439 100% 428.71kB/s 0:00:00 (xfr#3, to-chk=12/16)
scripts/echo-hello-world.sh
422 100% 412.11kB/s 0:00:00 (xfr#4, to-chk=11/16)
scripts/full-name.sh
373 100% 182.13kB/s 0:00:00 (xfr#5, to-chk=10/16)
scripts/function1.sh
416 100% 135.42kB/s 0:00:00 (xfr#6, to-chk=9/16)
scripts/hello.sh
450 100% 146.48kB/s 0:00:00 (xfr#7, to-chk=8/16)
scripts/menu.sh
292 100% 95.05kB/s 0:00:00 (xfr#8, to-chk=7/16)
scripts/select.sh
447 100% 10.39kB/s 0:00:00 (xfr#9, to-chk=6/16)
scripts/touch-3-files.sh
854 100% 19.39kB/s 0:00:00 (xfr#10, to-chk=5/16)
scripts/yes-no-1.sh
542 100% 12.31kB/s 0:00:00 (xfr#11, to-chk=4/16)
scripts/yes-no-2.sh
565 100% 5.11kB/s 0:00:00 (xfr#12, to-chk=3/16)
scripts/yes-no-3.sh
569 100% 4.75kB/s 0:00:00 (xfr#13, to-chk=2/16)
scripts/yes4.sh
319 100% 2.64kB/s 0:00:00 (xfr#14, to-chk=1/16)
scripts/yes5.sh
338 100% 2.68kB/s 0:00:00 (xfr#15, to-chk=0/16)
sent 300 bytes received 4,780 bytes 483.81 bytes/sec
total size is6,682 speedup is 1.32
[root@server tmp]#
[root@server tmp]#ll
total 8
drwxr-xr-x. 2 root root 4096 Jan 24 15:49 scripts
-rw-r--r--. 1 rootroot 158 Jan 12 2010 test
[root@server tmp]#
Push:
[root@server tmp]#rsync -avz /tmp/test [email protected]:/opt/
[email protected]'spassword:
sending incrementalfile list
test
sent 135 bytes received 34 bytes 48.29 bytes/sec
total size is158 speedup is 0.93
[root@server tmp]#
[root@server1 ~]#ll /opt/
total 8
drwxr-xr-x 2 rootroot 4096 Jan 24 15:49 scripts
-rw-r--r-- 1 rootroot 158 Jan 12 2010 test
[root@server1 ~]#
5. Rsync工作在daemon模式的配置
配置文件:/etc/rsyncd.conf(需要手动创建)
默认端口:873
配置文件rsyncd.conf由两部分组成:参数和模块。参数的格式是“name = value”,模块的格式是[module]。在该文件中以#开始的表示注释,以\结尾的表示是上一行的延续。value可以是yes/no,0/1,true/false。
启动服务的方式:/path/rsync –daemon
rsync可以通过xinetd这个superdaemon进行管理,也可以以stand alone的方式允许,如果以xinetd的方式进行管理的话,需要在/etc/services里面写入如下内容:
rsync 873/tcp
[root@server tmp]#grep rsync /etc/services
rsync 873/tcp # rsync
rsync 873/udp # rsync
如果以standalone的方式运行的话,需要用/PATH/rsync --daemon的方式启动服务。
rsyncd.conf配置文件的参数分为全局参数和模块参数。全局参数(G)是指在【module】前面的参数。模块参数(M)是指在模块里面使用的参数,也可以用于全局。
全局参数如下:
motd file:指定motd(message ofthe day)文件的位置。当客户端每一次连接时都会显示该文件中的内容,没有默认值。
pid file:存放rsync daemon服务的进程ID的文件名。
port:rsync服务的监听端口。默认为873.
address:rsync服务监听的地址。
syslogfacility(全局):指定 rsync 发送日志消息给 syslog 时的消息级别
注意:如果启用该选项就要关闭log file选项,默认情况下log file选项会被启用.
模块选项如下(G/M表示也可以用于全局):
comment:指定模块的描述信息。(G/M)
客户端测试:
[root@server1 ~]#rsync 172.17.100.254::
path:指定模块所映射的目录路径。
max connections:模块所允许的最大连接数。如果是0则表示没有限制,如果是负值则表示关闭该模块。(G/M)。如果用于全局,则表示所有模块的最大的连接数。
log file:指定日志文件的名称。(G/M)
lock file:指定锁定文件的位置。默认为/var/run/rsyncd.lock。(G/M)
read only:是否允许客户端上传。yes表示允许,no不允许。默认为no。
write only:是否允许客户端下载。yes表示不允许客户端下载,no允许客户端下载。
list:是否允许客户端列出该模块。yes允许,no不允许。
可以用如下方法查看服务器上的模块:
[root@server1 ~]#rsync 172.17.100.254::
uid:username或user ID。指定该模块以指定的用户传输文件
uid:groupname或group ID。指定该模块以指定的组传输文件
exclude:指定多个文件或目录(相对路径)不被同步,并将其添加到 exclude 列表中.多个文件(目录)用空格分隔.作用等同于在客户端命令中使用--exclude来指定模式.
include:该选项针对于exclude,即同步exclude中的哪个文件(目录),并将其添加到include列表中,覆盖了exclude指定的文件或目录。.多个文件(目录)用空格分隔.作用等同于在客户端命令中使用--include来指定模式.
exclude from:和exclude的作用一样,只不过是exclude是将排除的文件或目录作为value的,而excludefrom则是将排除的文件和目录写在文件中的,一行一个文件或目录。
include from:和include的作用一样,将包括的文件写在文件中。
authusers与secrets file:这两个选项只能组合使用
auth users指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块,这里的用户和系统用户没有任何关系,用户名和口令以明文方式存放在 secrets file 参数指定的文件中,格式为username:password,常用的文件名为:/etc/rsyncd.secrets
strictmodes:指定是否监测口令文件的权限.若为 yes 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件,默认为yes。也就是该文件的权限为600或400
hostsallow:用一个主机列表指定哪些主机客户允许连接该模块.不匹配主机列表的主机将被拒绝.也就是说如果指定hosts allow那么不在hosts allow指定中的主机都将都拒绝.
hostsdeny用一个主机列表指定哪些主机不能连接rsync模块.如果hosts allow和hosts deny同时指定一台主机,则以hosts allow为准.hosts allow和hosts deny的格式可以是x.x.x.x或x.x.x.x/n 或x.x.x.x/x.x.x.x的形式,也可以是主机名,要求能够被解析。
incomingchmod:设置用户上传文件到服务器端时权限。
outgoingchmod:设置用户从服务器端下载文件到客户端时的权限。
transferlogging:该选项开启则记录下载和上传操作
logformat通过该选项用户在使用transfer logging可以自己定制日志文件的字段.
其格式是一个包含格式定义符的字符串,但要注意log format使用要在transfer logging选项开启的时候才可以.
常用的如下:
%o表示服务端提供什么操作,比如是接收还是发送.
%a表示客户端的IP地址.
%m表示服务端的模块.
%P表示服务端模块指定的路径.
%f表示同步的文件.
%l表示同步文件的大小.
如:log format = [op]:%o [ip]:%a [module]:%m [path]:%P [file]:%f[size]:%l
ignoreerrors :可以忽略一些无关的IO错误
usechroot(全局/模块):若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下.这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件.
示例:
rsyncd.conf配置文件的内容:
[root@server ~]#cat /etc/rsyncd.conf
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsyncd.lock
log file =/var/log/rsyncd.log
port = 873
address =172.17.100.254
motd file =/etc/motd
[test]
comment = testmodule
path = /tmp
uid = root
gid = root
read only = no
write only = no
list = yes
auth users = frame
secrets file =/etc/rsyncd.secrets
strict modes = yes
use chroot = yes
transfer logging =yes
ignore errors
log format =[op]:%o [ip]:%a [module]:%m [path]:%P [file]:%f [size]:%l
[root@server ~]#
启动服务:rsyncd –daemon
观察监听端口:netstat –tunlp | grep rsync
[root@server ~]#netstat -tunlp | grep rsync
tcp 0 0 172.17.100.254:873 0.0.0.0:* LISTEN 12330/rsync
[root@server ~]#
查看客户端的模块名称和motd:
[root@server1 tmp]#rsync [email protected]::
==========================================
* This is a Test System , You Can Do *
* AnyThing In It Except shutdown *
* the System , Thanks ! *
==========================================
test test module
[root@server1 tmp]#
红色部分为MOTD消息。
×××部分为模块名称(test)和模块的说明信息(comment)
上传文件测试:
[root@server1 tmp]#rsync -avz /etc/hosts root@172.17.100.254::test
==========================================
* This is a Test System , You Can Do *
* AnyThing In It Except shutdown *
* the System , Thanks ! *
==========================================
Password:
@ERROR: auth failedon module test
rsync error: errorstarting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
[root@server1 tmp]#
出现这种问题是由于我们使用了非auth users,应该把root换成frame(auth users)。
测试:
[root@server1 tmp]#rsync -avz /etc/hosts [email protected]::test
==========================================
* This is a Test System , You Can Do *
* AnyThing In It Except shutdown *
* the System , Thanks ! *
==========================================
Password:
sending incrementalfile list
hosts
sent 199 bytes received 27 bytes 150.67 bytes/sec
total size is195 speedup is 0.86
[root@server1 tmp]#
上传成功。
查看log,这里定义的位置为/var/log/rsyncd.log,可以看到如下信息:
[op]:recv[ip]:172.17.100.253 [module]:test [path]:/tmp [file]:hosts [size]:195
这个就是我们使用log format所定义的日志格式,对客户端所做的操作就一清二楚。
如果要停止rsync服务的话,可以使用如下方法:
1.cat /var/run/rsyncd.pid #找到rsyncd的进程号
2.kill -9 rsync-pid #杀掉rsync的进程
3.rm –rf /var/run/rsyncd.pid #删掉存放rsync进程号的文件
注意事项:
客户端跟服务端密码文件不一定非要一样.就是说服务端的内容可写为 username:password
客户端的内容只写为 password,这样在客户端使用--password-file指定密码文件时,才不会报错,如果客户端和服务器端都使用同样的格式(username:password),会提示password mismatch的问题。