|
|
Rsync(remote synchronize) 是一个远程数据同步工具,可以使用“Rsync算法”同步本地和远程主机之间的文件。
+ ?- f" b: d( C7 k! n5 `4 Qrsync的好处是只同步两个文件不同的部分,相同的部分不在传递。类似于增量备份,6 o$ C9 d* J# a4 |) }
这使的在服务器传递备份文件或者同步文件,比起scp工具要省好多时间。* z- T: A& y: A2 Y) l$ a
OS:ubuntu server 10.04
0 k1 A5 E, q- e/ D9 G# m# jserver:192.168.64.128
$ |5 H* j% w/ \5 ?2 v( t+ K& I% Xclient:192.168.64.145
. c5 n' H/ O) D- Y6 tserver4 y" O* \% ]$ k7 ]6 q
1.ubuntu server 10.04默认已安装rsync,rsync服务默认不是启动的,我们要修改下面的文件。
3 T! d, t" T7 W$sudo vi /etc/default/rsync% V5 e4 z, z& H: F9 P- M
RSYNC_ENABLE=true #false改true! O7 e+ ` v7 q" s
2.修改配置文件
2 @+ b/ I" p* b- J [6 X$sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc #已默认安装的软件,默认不启动的似乎都要这么做
2 h8 I! x' Q( U( B6 M; C; C我们先来查看一下这个文件* Y+ ~7 G0 f% \
$sudo cat /etc/rsyncd.conf0 C/ \5 |" d; R9 K0 u" b, T, v8 f4 @
0 F. L0 J N1 o. z$ v0 M- t
# sample rsyncd.conf configuration file2 T: k% S# a J+ K( m
/ }9 R. k) w/ W. b# K, P: e# GLOBAL OPTIONS: b3 [! v, M7 B$ x: w% H- _3 }
4 s' p7 _; N% c+ |! T
#motd file=/etc/motd #登录欢迎信息
; G% |, t- ~+ J2 l7 \4 `- d# C#log file=/var/log/rsyncd #日志文件
6 A8 R0 H+ F5 u, G5 \4 A# for pid file, do not use /var/run/rsync.pid if
9 O) t: `9 I4 A6 i) P" j# you are going to run rsync out of the init.d script.
3 {8 C a) [! B2 F" r0 spid file=/var/run/rsyncd.pid/ u4 W$ k" B2 y6 w$ ^" S2 p2 W
! z( _8 p6 R4 w8 K0 @$ A
#指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。! U2 S$ r9 \# N; O! }0 U
#syslog facility=daemon
; [ k3 R9 }1 J0 A: _2 m% ^# z, Z R* i2 S' K( y5 |/ b- x
#自定义tcp选项,默认是关闭的 ~4 Z, t5 m% ^$ N- t
#socket options=
" f; x K8 F0 U7 E: u6 z
, a3 ]0 |) b, t4 _2 v/ _+ A#以下是模块信息,我们可以创建多个模块
3 {/ K# W5 h2 {: ^6 H# MODULE OPTIONS. Y- @5 W. w0 x: R
7 P5 g9 K" G @9 Y$ `- ~8 V6 ~[ftp]
. r5 f% ?8 C& {/ I
6 i9 C% s4 G% b: `3 S5 o$ A3 f" G comment = public archive #模块描述
* X" o4 e+ v" u _- X0 @ path = /var/www/pub #需要同步的路径
F7 x8 q9 L( p/ j e0 w0 P use chroot = yes #默认是yes|true,如果为true,那么在rsync在传输文件以前首先chroot到path参数指定的目录下。这样做的原因是实现额外的安全 防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接指向的目录文件。
) ?2 j9 v. b" z- N p# max connections=10 #最大连接数& A: z" X6 \1 l% |, _
lock file = /var/lock/rsyncd #指定支持max connections参数的锁文件。 N/ [- O: K9 y+ G- K" S4 h
# the default for read only is yes...
) i" e3 o- ^7 n) f5 O+ h2 V read only = yes #只读选项
& V, ?. ]9 w4 D+ p- P list = yes #客户请求时可用模块时是否列出该模块
$ d' }6 w- V: h) Q( P2 {$ [ uid = nobody #设定该模块传输文件时守护进程应该具有的uid, t1 F" M. `8 [" @- M( l9 }: a
gid = nogroup #设定该模块传输文件时守护进程应具有的gid,此项与uid配合可以确定文件的访问权限
! l9 b$ e1 _: C) K+ v4 Y# exclude = #用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中 指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是 exclude还是include #这个我的理解是排除目录中不需同步的文件
% K' a+ U' z# l }8 l3 i# exclude from = #可以指定一个包含exclude模式定义的文件名
: K9 F% h# R$ @6 e6 @9 w) L# include = #与exclude相似
* a4 p7 q- Y+ J7 Y0 ]! t4 m# include from = #可以指定一个包含include模式定义的文件名
: V0 c1 a) V1 y# \# auth users = #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)
% @3 ]& k9 D# O9 g" F( g* j/ }# secrets file = /etc/rsyncd.secrets #该文件每行包含一个username:password对,以明文方式存储,只有在auth users被定义时,此选项才生效。同时我们需要将此文件权限设置为0600
: ?% `. X: F! [1 s+ e strict modes = yes #该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true4 {7 X, M* \8 F# T4 e
# hosts allow = #允许的主机/ J+ Q1 z2 \3 Q' h
# hosts deny = #拒绝访问的主机
! c' X* ^! _6 W, W$ x ignore errors = no #设定rsync服务器在运行delete操作时是否忽略I/O错误
6 I2 X; v1 Q8 S" k ignore nonreadable = yes #设定rysnc服务器忽略那些没有访问文件权限的用户
* j6 J, a' q6 E/ Y) E) F) E transfer logging = no #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中
5 S% H8 s8 ~9 d8 n1 q! u' F3 v( d* {2 P# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #设定日志格式& `/ E# ], P% ?% ?" i
timeout = 600 #超时设置(秒)$ p+ N, B; ~% M+ \. |7 D: o
refuse options = checksum dry-run #定义一些不允许客户对该模块使用的命令选项列表
5 |$ s6 ?" M0 ^1 ~ dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩
# P/ J, j6 t( }) u: _
# x: A {; d" h# K% V( \2 m& E; j
" k5 _! m9 l& B2 C& t% U [1 W; c日志格式选项列表:
" S; u7 \% l( i/ p* i%h:远程主机名
+ W9 U- W) I$ C5 u%a:远程IP地址" k. X. }5 J; |* R
%l:文件长度字符数4 a( k- R; n) m9 j, o- e; \/ O6 p
%p:该次rsync会话的进程id1 {1 @( g/ d; e/ Z
%o:操作类型:"send"或"recv"、”del.”2 J7 g$ E7 f: Y P; D- y' S8 p
%f:文件名
5 |* Q3 q! @' K+ { {+ ~# m%P:模块路径" w$ g |$ l+ d
%m:模块名' ~. D7 v: G8 k3 v: l
%t:当前时间
/ ^( y7 t7 n* \3 x6 {0 d%u:认证的用户名(匿名时是null)6 E' k) G! Q `: n$ d; I" R
%b:实际传输的字节数
/ J P6 m& a$ Y Z* H' m%c:当发送文件时,该字段记录该文件的校验码
9 L. y' [7 ^5 D3 g. J0 q
* a. y }% `; o% s0 h下面我们来定义自己的conf文件
2 ]* @1 W0 n1 W% |1 K, M0 G9 j, X, |+ E" F1 Y8 Z3 o
# sample rsyncd.conf configuration file
, [" q9 U5 g# m# z# GLOBAL OPTIONS
x; k4 b$ o# d% Z/ w) f7 Z8 G#motd file=/etc/motd% P1 T& S# r( |% i" _, F
log file=/var/log/rsyncd
7 g% {. r7 q# C; Q* r/ |# for pid file, do not use /var/run/rsync.pid if6 s8 A4 V E5 {8 q! D
# you are going to run rsync out of the init.d script.
& z* n: U+ l# s1 y" {: M" C. C pid file=/var/run/rsyncd.pid. v6 c% d' f" k0 \4 ]& e% E. R f
syslog facility=daemon
6 f5 K% D, P4 r6 K#socket options=
4 p4 Z& }# n+ L9 h" n3 p8 `# MODULE OPTIONS" h5 S7 W1 S7 u# \2 j$ r" u
[my_rsync_bk] #名字可以任意命名,只要客户端的rsync命令一致
5 [1 D' w" H9 p! I# U( J comment = public archive2 t4 |1 V0 h. n- r9 n+ |
path = /home/rsync_bk #指定路径,如果没有这个目录自己建。
" U8 r, ~- Z; [4 K: | ` use chroot = no9 n( }% L& {8 t
# max connections=10
( S5 x z3 O/ s, Z lock file = /var/lock/rsyncd3 L. Z( L3 a% Q# a
# the default for read only is yes...5 w$ F6 f1 b! s& k6 K# r" T
read only = yes
) I4 s+ p( g, b list = yes/ C8 m; }7 {. r) p$ [' Z/ c
uid = nobody
+ _) Z; d4 y/ w1 a7 o4 [- d. X gid = nogroup
* O, Y0 `: [1 Z& r* I! D# exclude =
: G! Y( p- |5 I' u$ L# exclude from = # h: `; O$ x: ~% K( I, X/ C z A
# include =
: j; e& L# ?) v% @3 v# include from =
4 C. @) X3 ~3 V8 ?2 q. B6 h auth users = liu_rsync #rsync连接时的用户名,要和客户端rsync的命令一致
- s/ F3 t) x8 @) k7 T secrets file = /etc/rsyncd.secrets #这里是保存密码的地方,如果屏蔽掉就不用密码了) l9 j3 P. _1 C; D
strict modes = yes
d3 J8 h; B& s+ x) T hosts allow = 192.168.64.145 #运行的客户端ip
2 \, S4 m+ s% n! X f; m, |+ X# hosts deny =1 b# X' Z4 e- Y/ ]& o/ A
ignore errors = yes
* m7 }: t3 R3 v1 r ignore nonreadable = yes
! Z, ]- v( Q: n" b; ], M8 w transfer logging = yes
# @& p& C4 E3 h: B: k log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.4 h) K/ @% i6 ?2 h5 W3 J1 j
timeout = 6009 a) `2 M! |+ ]% R4 B- S& M% N
refuse options = checksum dry-run
( D1 ~+ t% I" w- Y dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
N2 ~7 t7 c& P* E% u( u; m9 X7 t+ w+ D, c9 S7 k' Q5 B+ ]
: e; R7 j3 R4 N O: {' E
创建一个密码文件. L& L4 s( W& b" R* g& ]
$sudo vi /etc/rsyncd.secrets, h) L! J( n4 G- q0 U
liu_rsync:123; C! |$ v# \3 ?, B @1 n3 ]
$sudo chmod 0600 /etc/rsyncd.secrets ! k" H$ F# w- D4 ~
' q" P$ V- }: n& k2 N7 t3 h启动rsync
}& M% i1 i8 k) a+ n' [! J4 Bsudo /etc/init.d/rsync start
E* J. x/ w5 u P" L E
. O& o% l+ I7 Gclient& ^7 z- p- i+ B: l: j
我们再来看一下客户端的操作,一般客户端不需要进行特殊的配置,直接同步即可& a) d7 W3 x% Q3 [6 D8 j- x
rsync -vzrtopg --progress liu_rsync@192.168.64.128::my_rsync_bk . #.为当前目录,在服务端touch一个文件,同步后就会出现,当然你也可以指定一个位置比如/databk,需注意所建立的权限!8 `0 [% E& [6 E" l+ Q4 q( i
% ^; Z* g# x8 y5 C8 u2 Z
我们把这个同步工作交给crontab去执行。首先我们要创建一个密码文件2 G! W: }8 Y2 S
$sudo vi /etc/rsync.pwd输入123,保存 #密码要一致
2 i+ u& T ]" }' }
# \9 F$ [+ E7 P7 V2 v! a A!注意:下面这两步操作是必须的,没有足够权限同步就会不成功,ls -l 你所指向的目录
& Z4 t! q' A" Msudo chmod 0600 /etc/rsync.pwd+ Z" K) Q. {2 c2 f2 F3 e8 |1 o" A
sudo chown 普通用户:普通用户组 /etc/rsync.pwd
2 S) I! M! Y2 c) e; v! G* Z8 X; l/ o- a0 g, i
然后我们打开crontab,使它自动同步. ~! I# F7 {7 i9 M1 |, i
$crontab -e
+ G- R5 l2 j8 V, U8 A& E; q3 u- n* * * * * rsync -a --password-file=/etc/rsync.pwd liu_rsync@192.168.64.128::my_rsync_bk /databk ! ?4 p! \$ c: h! {+ h$ `
crontab随机启动 sudo vi /etc/rc.local9 x [# E5 {. d
参数说明:, q: d! T' H3 L4 W; e/ F$ V2 }; v
-v verbose,即详细模式
" u6 w' e" z% a! n% i; N-z 压缩
+ @8 l S6 c0 l% L5 [$ x-r recursive 递归
; I2 {# J: I6 a" i-topg 保持文件原有属性,一般不用加
0 g( F' t( c2 E" i2 z r5 N --progress 用来显示详细进度情况' i; K! N6 h! G" v# S- [0 n3 X; m
--delete 表示如果服务器删除了一个文件,客户端也应对应删除0 L) A9 m6 N% k$ Q) X$ b8 L( w
--exclude="*.sh" 表明不包括某些文件+ {% i$ }: S1 r) a/ o% K* T) w5 k
--password-file=/etc/rsync.pwd 指定所使用的密码文件
5 O$ f! i: k2 g) m最后一项是需要同步的目录
8 N" F" Q9 ^3 v Z) e2 ]注意指定使用的密码文件中只需要有密码,不要有用户名。& a* A) o- H7 Y
------------------------------------------------------------------------
# }; h6 L _$ P, U2 ~1.在本地机器上对两个目录同步
! d: E; v0 H* U3 Z9 Z$ rsync -zvr filename1 filename2
; o( a2 ^; ^- b% P4 R( x0 `3 X8 @5 f
上述代码是将filename1中的文件与filename2中的文件同步,如果将filename2中的文件同步到filename1中,修改代码为:( X+ E; ` ?- b, Y
$ rsync -zvr filename2 filename1+ l8 `' m( \0 {( N6 M' y0 R
1 W+ Z# ~8 ]9 K
2.使用rsync –a 同步保留时间按标记
& E$ {% ?. x) C8 `. X! s$ rsync -azv filename1 filename2
' [2 H9 |$ ~# P1 a/ y' \
3 ?, \3 `1 f o& A* B& ^使用上述命令,将filename2中新同步的文件的时间与filename1中的创建的时间相同,* d* Y& Z. T- g0 i$ I8 V( W
它保留符号链接、权限、时间标记、用户名及组名相同。" Z0 a& I5 P0 U
3.从本地同步文件到远程服务器
$ b4 [& s" e* K( A+ w1 e$rsync -avz filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
2 r1 M% j* o$ ]! R! B5 e7 g3 s4 ~8 i, X! M! D9 O1 K
上述命令是将本地的filename1同步到远程192.168.0.1的主机上。
( I4 G0 R/ k- `- V注意:如果远程主机的端口不是默认的22端口,假如是3000端口,上述的命令修改为,
) u1 Q6 y, f: d6 m$ s$ rsync -avz '-e ssh -p 4000' filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
2 t, k" `6 f3 g }9 |* w2 `, W8 y8 }1 Z4 k
4.将远程服务器的文件同步到本地8 N4 P" q9 M1 r3 G4 D' ^# c Y
与步骤3类似,只是将filename1与远程服务器的位置对换一下,: w: u6 K5 F \ g* G& W
$rsync -avz ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1. @; U( M3 E( B; p9 E+ a; u
0 Y5 E( J5 Q% {" {6 Z
同理如果端口不是22,使用以下命令% @% I( q9 I7 i4 R$ ^
$ rsync -avz '-e ssh -p 4000' ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1 * x/ s- s/ E/ `% f. K
5 d3 R8 h; _6 _0 ?( P' G+ H, R参考:http://www.eduicc.com/read-24.html
+ }, h' `7 a. T, i( y5 ? http://jordy.easymorse.com/?p=273) p) r7 p6 v$ |# C2 h
% J/ C% J" K4 o0 S. s* }: Z5 _+ B
+ b) n( {8 C; d. h! S
9 x) g7 k! X9 g( i) R# q, s
& }8 Z5 F5 @. c! M t6 e
服 务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服务器来提供下载服务。当一台服务器上的文件更新后,其它的服务器也 需要更新,而且 在更新的时候应该是只对新增或是修改过的文件进行更新,否则会造成网络带宽和时间的浪费。rsync就是能有效的保持文件及目录的一致的 优秀软件。
( O7 S; A: _5 D4 X( b% A2 G rsync,remote synchronize
7 O0 Y" ]2 x" T6 D& A 顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。rysnc的官方网站:http://rsync.samba.org/,可以从上面得到最新的版本。当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。你的Linux里并没有安装rsync,你可以按以下的安法自行安装:
! @! x" |0 S3 y; S, W 一、安装过程3 b; r: g( ?6 O, N
1.下载rsync
' _, y' [% W( k1 O5 D 目前(2003年9月)最新的rsync版本是2.5.6,从rysnc的官方网站上下载一个回来:
* N1 Z7 @' Y4 a9 R" k1 ? # wget http://ftp.samba.org/ftp/rsync/rsync-2.5.6.tar.gz & |% O1 Y+ ]* R4 e! [0 h9 z& C
% P! t2 A e+ c8 z: B; f) ?' x' g* S
2.解压
7 G1 J: F$ R/ N# r7 c # tar -xzpvf rsync-2.5.6.tar.gz" V0 v3 \" j7 i) C) k
3 I+ \3 M3 Q. C' f1 V1 O* y 3.编译安装
# w: q& G/ J$ a5 ~ # cd rsync-2.5.6/
, v7 ~9 Y( W: `7 e0 a # ./configure --prefix=/usr/local/rsync
1 f+ ]" R6 ?: h% X! w& J4 d # make7 s& c$ b! q" B$ y& T+ Z
# make install
) ?$ @5 d. @7 b3 |) k 以上过程没有出现的话就安装好了,现在就有rsync命令可以用了,rsync命令放在
" T3 C, d- `* ?! y8 B0 D6 i/usr/local/rsync/bin。用rsync命令可以去运行有rsync服务的服务器上抓取资料。
: M! w6 f! d: @& b 如果要把当前的机器变成一台rsync服务器的话,就需要继续进行一些配置了。
- {/ w0 P$ v# E3 ?: y& f6 n3 m% \/ G" O
二、配置rsync服务! H9 A8 s) K5 K1 w: J5 t, w
配置一个简单的rsync服务并不复杂,你需要修改或建立一些配置文件。
2 V/ ? ]( k& \, X$ | 1.rsyncd.conf6 u- s5 C0 j/ J5 L. \' a
# vi /etc/rsyncd.motd
5 R( y# F3 L$ e) w' C6 k" j4 ~ rsyncd.con是rsync服务的主要配置文件,它控制rsync服务的各种属性,下面给出一个 W9 N6 ]: h* P% q
rsyncd.conf文件的例子:9 A( }, x O8 k* R! @
#先定义整体变量
4 E3 h" N. p( t2 N secrets file = /etc/rsyncd.secrets
7 _6 _& X0 B" q. f+ R motd file = /etc/rsyncd.motd% x& \* P) z% r% a4 d5 @ C3 \0 ?
read only = yes
# m" j5 Q/ D" j1 F: k: n1 ^0 O list = yes) V+ } c4 _* B) g; P# p+ \
uid = nobody
, D7 ^- i6 p+ f gid = nobody; j U+ `/ ?' X4 L, {0 u D) k
hosts allow = 192.168.100.90 #哪些电脑可以访问rsync服务
6 M( {: s Y" O3 ?9 G5 ]. V hosts deny = 192.168.100.0/24 #哪些电脑不可以访问rsync服务
4 `) K+ w, d, c) K max connections = 2( U. B# u9 s0 u1 }. j
log file = /var/log/rsyncd.log- j: w3 k- c. o0 l1 z
pid file = /var/run/rsyncd.pid X: v3 D& H# b4 r
lock file = /var/run/rsync.lock. k# o2 s& l" Q0 k* E$ j! v
#再定义要rsync目录! W* R$ j( k. y# s1 z
[terry]* u7 O6 Y( ^. h! i0 s) a" P2 g
comment = Terry 's directory from 192.168.100.21
3 i& P' T; ]. _8 h. }3 } path = /home/terry* [) G) X7 G/ D5 Z
auth users = terry,rsync$ m3 E! C2 S$ L; ^
[test]" @ k& m, o, Y! b$ e6 x
comment = test rsync- t0 f. Z6 N6 n6 S( q% X0 C% f+ k1 J
path = /home/test. |( P: E; B+ B c" y2 x$ ~
在上面的配置文件中,限定了192.168.100.0/24这个子网中,只有192.168.100.90的机器可以来访问这台rsync服务器的 rsync服务。配置文件的后面部分定义了两个rsync的目录,terry目录是只有知道terry、rsync两个账号的人才能使用的,而text目 录是无需账号就可以访问的。rsync在定义目录时还提供了一些其它选项,可以作更严格的控制。1 W$ D" k4 f( _' d9 b1 X& n
2 e0 }/ s$ `) ^4 f" C1 }* |+ r
2.rsyncd.secrets
' h/ E9 b1 V' y! Y& x- N # vi /etc/rsyncd.secrets
; y* r f3 U- r3 k9 P8 S rsyncd.secrets是存储rsync服务的用户名和密码的,它是一个明文的文本文件,下面给出一个rsyncd.secrets文件的例子:
N- `; ]. C1 d" l4 _; i terry:12345, e3 g$ n4 p* W
rsync:abcde1 U4 V1 N. h# k- y& o
因为rsyncd.secrets存储了rsync服务的用户名和密码,所以非常重要,因此文件的属性必须
6 b; _* y! @) ?+ |3 T- h; L- ]设为600,只有所有者可以读写:
6 Y$ @) Y: v+ P2 t0 L # chmod 600 /etc/rsyncd.secrets- d! F! U6 e7 N% l; F4 d
$ Y6 A% }7 u5 ?. O2 j
3.rsyncd.motd: Z7 D+ k3 O9 q) e/ F6 x( W5 p
# vi /etc/rsyncd.motd
+ z$ R3 o4 X. z T8 ~' m rsyncd.motd记录了rsync服务的欢迎信息,你可以在其中输入任何文本信息,如:
" ?3 { n4 s7 \5 g0 J' V2 k) B* S Welcome to use the rsync services!
p$ c$ u9 ]: v. S: f% _7 f9 @1 L$ C/ Q- @
4.services
, a. K2 _9 n! }) ?: Q3 S' \ # vi /etc/services& _" a( P, ~9 p+ R: e3 ` x: r
services并不是rsync的配置文件,这一步也可以不做。而修改了services文件的好处就在于' j/ o k) M, q4 e, m; y1 {
系统知道873端口对就的服务名为rsync。修改services的方法就是确保services中有如下两行,7 j* X5 [- g- q) L
没有的话就自行加入:
0 e9 @! H0 ?9 e, T$ \ rsync 873/tcp # rsync
7 `- n- E; f/ d' l' c rsync 873/udp # rsync
7 S- J) m. E- G- L0 F# g# p) [& T 5./etc/xinetd.d/rsync; p* u# c: Z2 X
# vi /etc/xinetd.d/rsync# ^- r3 C; }! G; W
建立一个名为/etc/xinetd.d/rsync文件,输入以下内容:
5 t% q# U5 D s5 V0 @* Y3 {' N service rsync
4 X- C5 ] E7 `+ R! v {6 m: ~( p! V6 Y. ^7 S
disable = no7 j) C. [+ K$ m6 q2 I: m: x* Y7 |
socket_type = stream" \; x7 ?4 c4 W. T+ R9 F& j
wait = no
3 T1 o1 s$ i1 y user = root6 q2 r% D: e1 P7 X6 @# f- e
server = /usr/local/rsync/bin/rsync; }4 C, g+ v6 K5 M% @. y2 R
server_args = --daemon
8 k" O' g' O" f% U" z' a; ] log_on_failure += USERID. G: M3 Z4 {8 S# E/ }
}: A% ]1 X/ v6 d+ g
保存后,就可以运行rsync服务了。输入以下命令:
M2 j0 ]. D* i: ~# m' P0 l. \ # /etc/rc.d/init.d/xinetd reload
( r( L: T9 @# l4 K. B% v0 p 这样rsync服务就在这台机器上(192.168.100.21)运行起来了,接下来就是如何来使用它了。. ^5 f) ?; P8 q! K N$ D
1 k' {( Q& E O/ o0 I& i
三、rsync命令的用法
" B( w3 N( O$ B 在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很/ i8 a$ g: z `. T1 g, K3 r2 k, e
多功能选项,下面就对介绍一下常用的选项:
& L3 F! V. K% S. r6 J5 ^ rsync的命令格式可以为:
- w' |% ?; }* I9 }6 o 1. rsync [OPTION]... SRC [SRC]... [USER@]HOST : DEST]5 V A) _0 j5 I' [) M2 G) f
2. rsync [OPTION]... [USER@]HOST:SRC DEST]2 g% o# j7 L1 p# x2 B; H u+ N
3. rsync [OPTION]... SRC [SRC]... DEST]
7 }% C7 B; w' H, N7 @& { 4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
3 I* X* u5 m: P- I# F/ @ 5. rsync [OPTION]... SRC [SRC]... [USER@]HOST :: DEST]5 T$ M) i, c% u
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
$ @% p* _ s6 X& V( F$ h/ G) H0 e4 c: h- Y/ t. L# e( I
rsync有六种不同的工作模式:
- x# w6 }6 X3 l) R3 u1 | 1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
# P" `6 T/ y# I8 ` 2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST. @( h: f+ O n: M
路径地址包含单个冒号":"分隔符时启动该模式。
0 o! l9 q7 ^- `' m" X) Q) b 3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC
" k1 R5 U( @* H" x" X4 Q地址路径包含单个冒号":"分隔符时启动该模式。
+ h3 F" S! P5 R! r 4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
7 h1 S: V7 d# E$ j1 P/ ?' i. | 5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
4 O8 ]- `3 p* d, A 6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。* [/ E4 _* [ ^) v# F
下面以实例来说明:' ~ p) A6 N: X* z; p+ k
# rsync -vazu -progress terry@192.168.100.21:/terry/ /home! m5 y# {) r$ P; O6 l2 b' `! m5 H
v详细提示
. c3 T# {4 f5 N8 J5 ]" c7 u a以archive模式操作,复制目录、符号连接+ z7 j8 o2 t* D
z压缩) w0 t2 V6 f9 O5 D
u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时- ]2 S6 R& E# {2 i6 J) Z
-progress指显示1 m: @& w4 t, C! I6 t- r
以上命令是保持客户机192.168.100.90上的/home/terry目录和rsync服务器上的terry目录同
$ b, p' P# ?. z2 Z步。该命令执行同步之前会要求你输入terry账号的密码,这个账号是我们前面在rsyncd.secrets
: X( X r2 } |6 u文件中定义的。如果想将这条命令写到一个脚本中,然后定时执行它的话,可以使用--password-file
& ?* [" ^- ?( e5 u" d8 M, ~' O5 M选项,具体命令如下:
3 o8 `6 a3 K9 w( M' i& l3 d& G( d # rsync -vazu -progress --password-file=/etc/rsync.secret' o$ B5 y; c$ j+ ~; k8 V
terry@192.168.100.21:/terry/ /home
. w) e2 [( f* x0 q8 T 要使用--password-file选项,就得先建立一个存放密码的文件,这里指定为/etc/rsync.secret。
/ h, I) L6 F1 ~" n) V其内容很简单,如下:1 {# J: x. v/ K7 k) o# i
terry:12345
; Y( e! Y2 ^5 Q# A! ]" A 同样要修改文件属性如下:
! y, i2 C, w+ T q+ P # chmod 600 /etc/rsyncd.secrets, m4 A# x) m4 ~( T
! Z9 d, G8 D4 D3 p1 D/ v1 K5 E 四、利用rsync保持Linux服务器间的文件同步实例
' N5 k! d. c3 ]9 z" E 现在假设有两台Linux服务器A(192.168.100.21)和B(192.168.100.90),服务器A中的
7 [! L* s0 \- m9 U1 m" d* f% ]/home/terry和服务器B中的/home/terry这两个目录需要保持同步,也就是当服务器A中文件发生
; P5 q+ ?. [# i* }2 z改变后,服务器B中的文件也要对应去改变。/ l* {1 A) x7 T/ ?" f3 C
我们按上面的方法,在服务器A上安装rsync,并将其配置为一台rsync服务器,并将/home/terry d+ e1 W& z! [# j
目录配置成rsync共享出的目录。然后在服务器B上安装rsync,因为B只做客户端,所以无需配置。
8 D1 }* z. T6 Y* n, G- m$ l然后在服务器B,建立以下脚本:9 B6 ^6 y2 }5 w& f4 I, c; z' D
#!/bin/bash8 _- _! s, S" @7 R# L
/usr/loca/rsync/bin/rsync -vazu -progress --delete. H" V) [5 T4 c4 I" Z& P5 V+ n
--password-file=/etc/rsync.secret terry@192.168.100.21:/terry/ /home4 `6 H& |* O3 l
将这个脚本保存为AtoB.sh,并加上可执行属性:
( `+ S) L8 w5 T # chmod 755 /root/AtoB.sh+ ?* ]- }# \+ G' r& }0 _
然后,通过crontab设定,让这个脚本每30分钟运行一次。执行命令:
K2 t* Y& l. A. } # crontab -e4 J9 N7 I' r( D( ~( Q( r( ^
输入以下一行:
# x" H! \0 F( W% ]9 o# g+ P 0,30 * * * * /root/AtoB.sh4 z( ^ c2 t; H' E7 T
保存退出,这样服务器B每个小时的0分和30分时都会自动运行一次AtoB.sh,AtoB.sh是负责
' \6 f* s( c- s# j保持服务器B和服务器A同步的。这样就保证了服务器A的所有更新在30钟后,服务器B也一样取: W' x+ H: h, W
得了和服务器A一样的最新的资料。
. ? P% I* l8 w/ [$ Z" Z7 V8 C: p4 w. x' X% I
五、其它应用, a* i$ s" J" S9 k2 |' y" n; M
rsync除了同步文件及目录之外,还可以利用它来实现对远程网站的远程备份。如果再结合脚本和Crontab就能实现定时自动远程备份。其可以实现与商业化的备份和镜象产品的类似效果,但完全免费。' Q3 H; t3 { u+ s
4 x1 _9 i3 o, Z3 Y 附:rsync有六种不同的工作模式:
" ]0 r7 m; T! t" E 1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。0 l) R- \+ n: V% f. N" B+ |
2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST
0 {" H d) R: ^, e路径地址包含单个冒号":"分隔符时启动该模式。: O9 S7 b# G+ O l9 F- l
3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC
& b$ A+ _" v q) N3 O) H地址路径包含单个冒号":"分隔符时启动该模式。5 m% M2 w8 q' R a" q5 U
4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。 L% A: v3 q- K; L/ k l" F) |+ e
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
/ g& C4 c2 G3 l& r 6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。7 P! O8 I$ X% Y; C
' ] e: F5 o0 t% z
+ W! |* ^1 J+ q% t& S: A
& c" `* t6 k/ L. v1 R5 c o1 Q1 S9 [4 P( _8 }
) h6 G n3 |. G. g
$ o% {1 ?! W$ E0 l, M$ j
- L) c1 M; q: l3 ^, B: Y& l9 @5 p% B1 k x& e$ y) c0 z
3 Q' q3 l! n# e, [( k8 n* e& Z 前段日子在网上找rsync daemon的filter等过滤规则的详解,怎么也找不到,哥一怒之下,决定自己动手翻译,于是有了本文…
/ G6 x8 R2 h. o0 M" M6 G 本文内容翻译自rsync的官方文档:http://rsync.samba.org/ftp/rsync/rsync.html,以及http: //rsync.samba.org/ftp/rsync/rsyncd.conf.html,非完整的全文翻译,并且按照我的需要,对原文的相关章节或 条目进行了适当的重新编排。官方文档发布日期:26 Mar 2011。
D) O; l$ K% D% T9 F4 m
+ e; b2 H, M" N/ ~0 y$ \# f rsync是Unix/Linux系统中一款优秀高效的镜像同步和远程数据备份工具,它可以把本地文件拷贝到远程主机,或从远程主机拷贝文件到本地,也可以在本地的两个目录之间进行拷贝,但不支持两个远程主机之间的互相拷贝。' z6 J! E7 o( _
# l a- O% q9 p! v& X3 [- f& h2 `: b1 L" s# x1 _; L. u
关于rsync的工作方式:
w; L3 C" ?0 y rsync连接远程主机进行同步或备份时有两种途径:使用远程shell程序(如ssh或rsh)进行连接,或使用TCP直接连接rsync daemon。
& K% {8 |& x. O8 Y! L" ~ 当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
% V6 z4 Q* o; K. {8 y) c2 s 特别的,如果只指定了源路径,而没有指定目的路径,rsync将会显示源路径中的文件列表,类似于使用命令ls -l。( g$ K7 L# ?; t# a5 T
, o2 p$ I. l+ u7 E
rsync把本地端看作client,把远程端当成server。注意:不要把server与rsync daemon混淆!daemon一定是server,而server却不一定是daemon,也可能是远程shell的衍生进程。# `) z* j" l0 F- b' M9 p
至于什么是daemon,以及远程shell衍生daemon,下文会有说明。6 X _6 D$ o3 l4 h' U0 r
3 C/ M0 u2 x6 n3 W# s
; T6 A- E+ u! X! }8 o 关于rsync的安装:' e( }5 J+ {0 R) L
rsync安装方式是最常规的./configure && make && make install,只是要注意:源机器和目标机器都要安装。4 I5 U0 Q" l9 }) Y, G4 x1 T9 d. ~
v; R% i7 V& `# `: W
8 @# d! s! H5 g: T 关于rsync的启动:: n6 A. ?/ _" s. i- d3 v
前面说过rsync在进行同步或备份时,有两种途经连接远程主机:使用远程shell,或使用TCP连接远程daemon,可以把它们分别称之为shell模式和daemon模式。只有daemon模式才有启动rsync一说。. ]0 z$ B/ A) ^8 Y+ N4 j0 _# |
如果使用shell模式,rsync安装完成后就可以直接使用了,无所谓启动,也不需要任何配置文件。远程传输时一般使用ssh作为传输工具,当然,也可以使用参数-e来指定一个远程shell。
) b: A1 |9 g; o, \- r 如果使用daemon模式,就无需远程shell了,但必须在一台机器上启动rsync daemon,默认端口873.
C$ w6 N0 V( I" u; F% R+ o
( h& S9 i% |, Q: w 你可以经由inetd启动daemon,或者作为一个独立进程启动daemon,或者由rsync client通过远程shell启动daemon。
% h: ~/ W2 S1 E' s& h6 J6 v$ E! R 1)如果把它作为一个独立进程来启动,只需要运行命令:rsync --daemon即可;/ I3 s ^/ m1 s k/ u& R. t8 Y& d0 T6 j
2)如果通过inetd来运行,要修改两个文件:/etc/services和/etc/inetd.conf:
' u. u7 w# u8 b; J 在/etc/services文件中添加如下行:rsync 873/tcp" T; n' I9 _ `7 k. l% h) u
在/etc/inetd.conf中添加:rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon, z* K; O9 b: L& a# B$ { p) h
注意把/usr/bin/rsync换成你的rsync安装目录!然后重启inetd服务,使配置文件生效。
1 H: V# Z; f( h' ^2 A$ m1 P1 p) h
7 h$ \' q: o0 o$ b5 [; c 关于由client通过远程shell启动daemon,官方文档中有一个条目:USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION。
6 q' N# L* b" V 条目中说,rsync支持这种用法:使用远程shell连接host,然后衍生出一个single-use “daemon”服务器,来读取远程用户家目录下的配置文件。从用户的角度看,通过远程shell连接而启用的daemon传输,它的命令行语法跟正常的 rsync daemon传输是一样的,唯一不同的是,你必须在命令中使用--rsh=COMMAND来明确远程shell程序。如下例:
) r# b' l) h5 b3 G+ @$ L% ^ rsync -av --rsh=ssh host::module /dest/ O3 i7 ^8 b. m% C( t
译者注:虽然官方文档中说这种用法在某些情况下很有用,但我觉得很别扭。
- }% }, Q$ T$ f( f- a( o g. }/ Y' d* @; ?8 i. k/ k
当rsync作为daemon运行时,它需要一个用户身份。如果你希望启用chroot,则必须以root的身份来运行daemon,监听端口(1024 以下,默认873),或设定文件属主;如果不启用chroot,也可以不使用root用户来运行daemon,但该用户必须对相应的模块拥有读写数据、日 志和lock file的权限。
9 D% ^( J% N/ B- [6 P5 @$ G2 t 当rsync以daemon模式运行时,它还需要一个配置文件:rsyncd.conf。修改这个配置后不必重启rsync daemon,因为每一次的client连接都会去重新读取该文件。6 P; S- n! w% Y
译者注:关于配置文件rsyncd.conf的设定,后面会有详细的参数解释。
A) @, o- Y" }2 ?/ Y. E& M, m
; L% g5 \2 H" R% X# H3 x 关于rsync的两种模式:
+ a" |0 Y( e3 c 该部分额外的内容来自IBM官方网站上的一篇文章。该文章把rsync的运行模式扩展成了四种,但我认为rsync官方文档的两种模式的划分更加合理一些。' I& e; J& s$ [& p/ V3 y
所谓rsync daemon,就是在一台机器上永久运行的rsync进程。在任何一台安装rsync的机器上运行rsync --daemon,则这台机器上运行的rsync就是rsync daemon。我们可以把文件发送给daemon,也可以向daemon请求文件。
# Y% m; C, M) y7 g6 m0 q a, ? daemon模式非常适合创建中心备份服务器,或项目存储库。
8 [5 s/ f2 L" K, H" [& u2 v 两种模式的区别前面已经说过,shell模式在源路径和目的路径中使用一个冒号,而daemon模式使用两个冒号。
' t, _ f" n2 P, ]" v9 ]. T! Q7 S( `: s9 e7 D7 J7 }1 O" D& f9 C1 D
关于rsync命令的语法:
& I) X+ [ q3 C% Y0 S( y7 y) l# o& r+ v; F7 l+ S: Y( O9 u
本地拷贝: rsync [选项] SRC… DEST,在本地进行复制操作 shell模式: rsync [选项] [user@]Host:SRC… [DEST],拉动作,从远程主机拉文件到本地 rsync [选项] SRC… [user@]Host:DEST,推动作,把本地文件推送到远程主机 daemon模式: rsync [选项] [user@]Host::SRC… [DEST],拉动作 rsync [选项] rsync://[user@]Host [:port]/SRC… [DEST],仍然是拉动作 rsync [选项] SRC... [user@]Host::DEST,推动作 rsync [选项] SRC...rsync://[user@]Host [:port]/DEST,仍然是推动作
8 B4 k% F0 `& T' R% e/ U 官方文档的举例:) Z7 z3 Q! p* C! a" V6 l
1)rsync -t *.c foo:src/. A# u- V: X9 M$ ]- C
把当前目录中所有以.c结尾的文件传输到机器名为foo的src目录中。如果某些文件已经在远程主机中存在,则跳过该文件。
9 j- v7 ?0 k ~5 b& w: W; C 2)rsync -avz foo:src/bar /data/tmp
) C7 ~, D% G& C, g 从机器名为foo的远程主机上把/src/bar目录及其下所有文件传输到本地机器的/data/tmp目录中。注意:源路径src/bar的最后没有斜杠”/”!1 `* E. z3 Q* @( D9 R$ }6 b
源路径的最后是否有斜杠有不同的含义:有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身!
( D1 t! @( ~ D" u 目的路径的最后有没有斜杠,对传输没有影响。
- f+ C- B* ]6 ~4 D: } 3)rsync -av host:file1 :file2 host:file{3,4} /dest/
( j$ p7 z A+ K. _0 d9 f3 p' G' l, r rsync -av host::mod/file{1,2} host::mod/file3 /dest// [' G! @4 G" O- x' ^
rsync -av host::mod/file1 ::mod/file{3,4}
: y4 r. p b, T$ y+ b 这个例子是rsync更高级一点的用法,使用rsync同时传输多个指定文件。
; Q6 y% C7 M9 F+ z rsync可以一次传输多个指定的文件,方法是添加多个远程主机参数,或忽略主机名。如上例。/ F6 }# T/ y6 h9 b. K
. S- j* \5 y4 V% Q1 U' _ 关于rsync命令中的选项:! ~9 J, d" ]0 ~
上面例子中提到了一些选项,rsync的选项有很多,请参考官方文档。常用的选项如下:! h4 |, J& P4 Z* t' d4 ^% F
( Z0 ^, q5 C% ~; w
-a:归档模式,保持文件的所有属性,相当于-rlptgoD -r:递归模式 -e:指定一个远程shell -z:文件传输时进行压缩处理 --delete:镜像中常用,删除DEST中那些SRC中不存在的文件
! ` _( l3 ?# v! Q* k daemon也有一些常用选项,下面会有介绍。
: S6 q0 E$ ]# Q: e
& E9 F& F! f* v! K, d; y client如何连接rsync daemon:: S% M( L; t7 B( }1 p1 ]$ O: p
上面第3个例子已经给出了client连接daemon的语法示例。但是官方文档又把本条目单独列了出来,提醒我们在连接rsync daemon时要注意的几点:
$ z& g1 [0 l, {' t2 ^ 1) daemon模式中的源路径,即SRC,实际上是模块的名称1 E, ~ }- U7 v5 e3 p! f2 Y# N. _
2) 如果未在双冒号::后面指定源路径,则rsync会列出daemon上所有可能的模块
3 G! [% B+ m+ W) n4 H! g 3) 不要使用--rsh(-e)参数1 L1 I W3 h% k
4) 有些模块可能需要密码认证,你可以使用--password-file选项,来指定密码文件7 g- j7 g& M- G
* f% l: K0 l8 m1 G 启用一个rsync daemon来接受client的连接:) ^# Z/ R! b) E
除--daemon外,rsync daemon启动时还有其它一些常用选项:2 X7 U& {# X u* y5 f* ]
--daemon:
0 M: q6 {& N3 K( d" u 使rsync作为一个daemon运行。daemon有两种启动方式,前面已经说过。对client发出的每一次连接请求,daemon会读取配置文件rsyncd.conf,然后做出相应的回应。
2 Q& E, Q9 s$ {: p$ D" e --bwlimit=KBPS:1 a) ~/ }- }; q/ M5 H4 c" S
指定daemon每秒传输的最大千字节。client在请求连接时也可以指定一个--bwlimit值,但该值不能大于daemon端的设置。
* N8 z, T4 ?$ ~+ p --config=FILE:# P ]+ F& G4 a& W$ ]* A; ]2 _
指定daemon的配置文件。只有当rsync以daemon模式运行的时候,该选项才有效。默认的配置文件为/etc/rsyncd.conf,除非 daemon是通过远程shell运行,并且远程user非超级用户,这种情况下,配置文件rsyncd.conf默认存在于当前目录(在$HOME目录 中比较典型)。关于通过远程shell启用daemon,见上文。
$ J. [* c8 ~# P) H) p5 q --port=PORT:! M/ J, N# }4 D g# o
指定daemon监听的端口。
: J; t/ g% P1 Z" F* w' c* c* L0 C --log-file=FILE:2 A; b7 G, A4 J- H' i
该选项告诉daemon不要使用rsyncd.conf中指定的log文件,而要使用此处指定的文件。此选项很少用到
- y4 }" G t! ~
+ J" y/ }1 G" H& w7 }
! k6 t t$ u; P1 S& H9 Q- R) z/ g2 l. @; M' F7 `0 \3 x8 K1 e
rsync 远程数据同步工具详解; ]7 b5 _( I1 b( u& x6 s ]) O4 O! A
( b% S. O1 c2 S7 p% |" C
rysnc(remote synchronize)在CentOS系统默认安装在/usr/bin,此外rysnc在windows平台下也有相应版本。主页地址为: http://rsync.samba.org/# A0 E8 j h; o3 j
+ n* ~* o) \7 A$ j8 r3 ?& W. Brsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
6 T; t) B: N7 r% R5 h0 i" ~" \2 T, t
rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配 置文件。rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时rsync server会打开一个873端口,等待客户端去连接。连接时,rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
! g7 R, R# m B: v( R$ p" }, x5 t; `$ g# n8 `& g" F! y
------------------------------------------------------------------------------------------------------------------------------------------------------------
. z |, i! _9 ?: o+ t% n3 H9 }- B) B6 R; w4 A- O9 [
rsync的命令格式可以为以下六种: ' ]$ X' o( I% P: ~
4 y/ u8 @) o" ^/ Q& f% Y
rsync [OPTION]... SRC DEST
7 _. m6 b- I& o! i& Q rsync [OPTION]... SRC [USER@]HOST:DEST3 k; q( P; i; g4 L
rsync [OPTION]... [USER@]HOST:SRC DEST4 k0 j; _5 B4 t
rsync [OPTION]... [USER@]HOST::SRC DEST
" g3 E8 t% C8 ~. W" x rsync [OPTION]... SRC [USER@]HOST::DEST) D$ q4 v' w# t# s1 w- K
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
8 p! x. N7 }* C7 m9 m8 m4 D9 J9 f& u7 @9 ?! [. o
对应于以上六种命令格式,rsync有六种不同的工作模式:5 u/ e( r, |' E! z
# f& Y' F: S5 s4 m8 q0 f0 c0 e) r 1、拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
. A; U3 \; P! \1 c1 @% y 2、使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src- l! k0 c( i! g) D
3、使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data( o5 b- r' p: o# G m6 V3 i
4、从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack, |1 k' n" [5 {" L3 b5 o- s
5、从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www8 P' m4 f3 |4 a4 Y w L6 O
6、列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
4 ~& i& c& n" l7 L( c3 f
. ]2 W0 c% n' X, d* t5 v7 w1 brsync 命令常用参数
1 E M8 d0 v" r+ F-a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H / Q/ C3 b& f: a( G7 J
-r 子目录以递归模式处理4 U* v. z: o7 K4 r2 o$ S
-l 保持符号链接文件
% r- Y! q3 }* e5 ]$ u; O2 D2 T-H 保持硬链接文件
: v5 N9 I9 h! {/ R0 |-p 保持文件权限$ |2 X2 w; I* M7 Z
-t 保持文件时间信息
6 g0 S0 E, s, Q-g 保持文件归属组信息, N) q$ o( m% y! g$ A* V! _
-o 保持文件归属用户信息+ M" p& G3 K3 w% q$ [. C
-D 保持设备文件和特殊文件/ ]' M) L( Q4 M- w( M$ Q
-z 在传输文件时进行压缩处理) Z& P' ?* Y( c9 o, q
--exclude=PATTERN 指定排除一个不需要传输文件匹配模式' F6 ]$ l4 g/ E6 P
--exclude-from=FILE 从FILE中读取排除规则
2 S9 g2 {8 T$ c4 N2 I0 |--include=PATTERN 指定需要传输的文件匹配模式7 _! x0 B+ l) @) j% [; w, p/ t5 @
--include-from=FILE 从FILE中读取匹配规则
8 E% ^- r* @8 ~: y2 v1 L% V9 s--copy-unsafe-links 复制指向复制源路径目录以外的链接文件
! w; `' X. a! k--safe-links 忽略指向复制源路径目录以外的链接文件(默认)
5 ]" w) g- m5 C7 P1 R--existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件 ~0 T/ ?( }/ D H& Y4 e
--ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件& m% z/ o: x2 d9 F X) D8 C) p
-b 当有变化时,对目标目录中的旧文件进行备份
" ^( U5 H9 Y( b1 S3 ]9 R--backup-dir=DIR 与-b结合使用,指定备份路径- H; }4 p! _4 S) o4 b5 R
--link-dest=DIR 当文件未改变时在指定路径创建硬链接文件
( D/ O" Z& p D& G W7 @--delete 删除接收端还存在而保存端不存在的文件
4 O; g6 _( ^$ p; j2 K. Y--delete-before 接收端在传输之前进行删除操作(默认)
; I2 }2 v9 S4 p9 F9 |--delete-during 接收端在传输过程中进行删除操作
( o# k7 C* O/ H' c3 K* w6 }--delete-after 接收端在传输之后进行删除操作/ u1 q* y) t* m1 U/ c/ i0 [
--delete-excluded 接收端在传输同时进行删除操作3 a% W+ A: h, X4 g. Y
--e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh
2 j1 M3 V& G) v0 S# W( O) @7 w8 Q--ignore-erros 即使出现I/O错误也要进行删除; |4 b9 A* n' c3 G# x6 \1 J
--partial 保留因故没有完全传输的文件,以加快随后的再次传输( V7 G9 L4 a$ v( [. H3 Y( r
--progress 在传输时显示传输过程3 o; ?6 F3 ~1 Y, I& E/ q
-p 等价于—partial—progress
8 M$ K3 d2 @2 r; f--delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件8 l# N) ] [# a1 G. _9 q
-v,--verbose 详细输出模式: s5 F \; n& s' c, z. v- P
-q,--quiet 精简输出模式% C7 ~/ m7 {- Y" F* |1 k
-h,--human-readable 输出文件大小* d4 d# j; A& @4 h7 U0 [
-n,--dry-run 显示那些文件将要被传输/ L1 ]( z: x2 z5 m, s2 S
--list-only 仅列出文件而不进行复制# O X4 D# j2 r+ N- m; h7 B
--rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径# v7 T0 ?1 ~& ~
--password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令# Q1 ?; l" y3 h$ _" L( k
-4,-6 使用IPv4或者IPv6! K/ U7 F; G- F" a7 c* \
--version 打印版本信息' E( O7 t% e; x, Y! C: @
--help 显示帮组信息! W- F. z% e% `; J: P' I+ U
' n( b# {: u0 V$ i; v S
8 i: W# a, Z% W/ j
注意: 若用普通用户身份运行rsync命令,同步后的文件的属主将改变为这个普通用户身份;若用超级用户身份运行rsync命令同步后文件属性保持原来用户身份不变。若指定-tg但目标计算机没有指定用户和组,则复制的文件归入501用户 501组3 Z3 w! Y$ C+ ], R
$ `$ y7 S: w& e, d------------------------------------------------------------------------------------------------------------------------------------------------------------
& {6 x! n4 k% g9 b/ @" @, _; q }7 c, j3 V7 R
启动 rsync 服务
9 l; M+ ]1 a j$ m/ V7 u启动 rsync 服务 # q3 f* d% e; ?# \0 c4 K: i2 t2 y
vi /etc/xinetd.d/rsync 把disable = YES改成NO
2 K J4 b' k; h0 {service rsync k1 g, G% p. z. b3 Q
{
, c. B) B# I% i, A0 I9 `2 A$ ] disable = no2 D% d. u: N, }9 j# T
socket_type = stream8 z/ h" r/ Q. I8 I
wait = no
* h2 u$ t* o9 P' q( k$ B* z user = root% R7 O0 \+ j! h; {* _
server = /usr/bin/rsync1 _+ M. ?, ~: t: g- p. {4 h
server_args = --daemon
3 y: J. U( J! r, r) [) f7 v% M' P0 p log_on_failure += USERID" d" ?( f4 L0 ]8 x4 G
}2 p2 E* w: r$ T) d
+ J+ r( B2 ~1 X; s$ R6 S
( [2 S8 o7 P& E& r1 e" B/ K
: ~8 U$ B8 n2 ]0 m配置服务端 rsync
o5 M: }9 c, {# b: N" y9 Nrsync 服务器可以独立运行也可以由xinetd运行,CentOS默认以xinetd运行,同时默认监听873端口。需要创建rsync配置文件 vi /etc/rsyncd.conf
6 `" R/ w5 \8 ]* ?在文件中[module]之外的所有配置行都是全局参数,也可以在全局参数部分定义模块参数,模块参数主要功能定义哪个目录要被同步,可以根据需要来定义多个模块 uid = root $ i, T3 e9 V- `1 _
gid = root
1 S m! F: @* U2 q4 {2 M# smax connections = 10
( n! [3 H0 B0 K2 }2 S, J$ b) A! |+ r7 ause chroot = no
- J0 T2 K9 m' J6 Slog file = /var/log/rsyncd.log
; ~- v' i: G) }* n2 J5 x7 J' |pid file = /var/run/rsyncd.pid ; Z+ r: O6 ]1 [# E# V
lock file = /var/run/rsyncd.lock
5 S% n& j. @6 j$ g: u; B& @. N! `5 z& i/ X/ U; }* E% A9 ^ B; m
[tongbu]
! _' G% j2 D; X, q9 Z0 vpath = /opt/tongbu - Y" Z! X: g. n0 D9 g+ J- B
comment = hello world / x2 E) m, `/ J
ignore errors = yes
1 {1 \1 ~1 y( N2 m, v+ v( bread only = no # U% y) j) {5 A# H
hosts allow = 192.168.1.125 ( M- k" R0 o& |& X4 f/ I7 j, Z, s1 i
hosts deny = *
; X+ g% w. O( C" L4 p1 x3 U) |(可以匿名连接,不安全,详细参考以下)
* t( ~! G! E% o: \! v4 I2 i启动并设置随系统启动 rsync,要求 服务端和客户端都启动 ,否则使用的时候报错Connection refused
. T! `8 c: h. I3 Z' Z% \4 {( k) j2 G) ]! u0 Z
- H& Y$ N M9 H9 e1 U m
rsync --daemon –-config=/etc/rsyncd.conf 1 e$ K! g) p q! N
chkconfig rsync on& N" ?( P1 ]! r" c _! o1 i- r9 L# R2 Q
5 o/ i5 g6 w/ K* }# h
* k" _. ?, c w$ L1 _------------------------------------------------------------------------------------------------------------------------------------------------------------
: b r3 Q+ O: z2 x0 H2 ]5 j7 B l1 v% }* a2 o8 q. Q+ q
全局参数
! J \4 I2 n- ~/ k1 o& j# ~* Daddress 指定的服务器运行的IP地址。由xinetd运行时将忽略此参数1 }' D; `; f7 T
port 指定rsync守护进程监听端口号(默认873)。由xinetd运行时将忽略此参数
% A( \9 F, q0 k1 S( R! ymotd file 指定一个消息文件,当客户连接服务器时该文件内容将显示给客户+ W' u9 J5 o! {0 o, r( B; T
pid file rsync的守护进程将其PID写入指定的文件
! l+ F0 Z: a4 n0 e1 _. ]+ Q" |% dlog file 指定守护进程的日志文件,而不将日志发给syslog
0 r: A# z k7 a9 }& _syslog facility 指定发送日志消息给syslog时的消息级别3 a/ w0 Z' V# k$ q* f: j
socket options 自定义tcp选项
5 A% B+ U( F! R) u% k
8 P6 U. `% q8 T2 c* D: m% C基本模块参数
5 G6 c4 L$ A d, Epath 指定当前模块在rsync服务器上的同步路径,必须指定
% K* w: { l, A$ z+ xcomment 给模块指定一个描述/ _( B/ I# V: L; P, x# W
控制模块参数
5 ^( _0 \; p2 P4 Duse 默认为true,传输文件之前先chroot到path参数所指定的目录下,这样做实现额外的安全防护,但缺点需要root权限,并且不能备份指向path外部的符号链接所指向的目录文件
" C7 U) `/ t" ]* ^/ }uid 制定该模块已指定的UID传输文件. V# `# f" o- H3 b
gid 指定该模块已指定的GID文件$ S, |" p" q/ L. v u" E
max connections 限制最大连接并发数以保护服务器,超过限制则提示稍后操作4 v: y7 @+ l+ J1 Y5 @$ G. m
lock file 指定支持max connections参数的锁文件,默认/etc/run/rsyncd.lock
?3 c' t! r2 `3 L( Y: vlist 指定当客户请求列出可以使用的模块列表时(默认ture),该模块是否被列出。如果false,可以创建隐藏的模块
; t! ]) L9 n! k, ]. `7 y/ Gread only 是否也许客户上传文件,默认ture则不也许上传。为false并且服务器目录具有读写权限则允许上传6 g( ^! u* o: A
write only 是否也许客户上传文件,默认ture则不也许下载。为false并且服务器目录具有读写权限则允许下载
5 n& J E, Y$ N) e3 v3 E7 f, Xignore errors 指定rsync服务器在运行delete操作时是否忽略I/O错误! q& M1 i. u8 v
ignore nonreadable 指定rysnc服务器忽略那些没有访问文件权限的用户, w+ r/ ~8 N! S: U4 _- z
timeout 设定连接超时时间,单位为秒
( M x1 h- t# F% p3 X' n# z7 ndont compress 告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩' M& d, c+ @* M7 ^7 Z+ Y
refuse options 定义一些不允许客户对该模块使用的命令选项列表
+ |4 B, x% W8 W, y0 t( o, ]文件筛选模块参数 + m/ B$ b# j2 h* q% v1 y
exclude 指定排除的多个文件或目录,由空格隔开$ t& j9 Y: {: h+ S6 `$ M) B
exclude from 从指定文件中读取排除规则4 R2 e) L& ]& p
include 指定包含复制多个文件或者目录,由空格隔开
f( V6 d/ e, N! n7 m+ sinclude from 从指定文件中读取包含规则
2 e$ v: A* Z- Z用户认证模块参数 7 J! a: T7 R5 D; ^2 J, J
auth users 指定用户才允许连接该模块
7 h5 N: P3 N) u! a' Bsecrets file 指定一个口令认证文件,格式是 用户:密码,即指定用户和密码连接匹配才行,不匹配的话会提示ERROR: auth failed on module,不设置该参数则可以匿名连接。
+ O/ K+ k- a5 q2 H3 h( Ystrict modes 指定是否检测口令文件权限。rsync认证口令文件权限一定是600 a) P6 G2 ^ p6 J* w
访问控制参数
0 \+ I6 u+ \# h% ?) y# e- t6 E* bhosts allow 指定哪些IP可以访问该模块' i6 r7 W, g* y, I1 Z
hosts deny 指定哪些IP不可以访问该模块,*表示全部
( R' M! A" p% c1 I* W) h
7 w, }! Y; J; c7 z% U5 P |
|