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