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