假如你是一位运维工程师,你很大概谋面临几十台、几百台甚至上千台处事器,除了批量操纵外,情况同步、数据同步也是必不行少的技术。
说到“同步”,不得不提的利器就是rsync,本日就来说说我从这个东西中看到的同步的艺术。
[不带任何选项]
$ rsync main.c machineB:/home/userB
1 只要目标端的文件内容和源端纷歧样,就会触发数据同步,rsync会确保双方的文件内容一样。
2 但rsync不会同步文件的“modify time”,每每有数据同步的文件,目标端的文件的“modify
time”老是会被修改为最新时刻的时间。
3
rsync不会太存眷目标端文件的rwx权限,假如目标端没有此文件,那么权限会保持与源端一致;假如目标端有此文件,则权限不会跟着源端改观。
4 只要rsync有对源文件的读权限,且对方针路径有写权限,rsync就能确保目标端文件同步到和源端一致。
5
rsync只能以登岸目标端的账号来建设文件,它没有本领保持目标端文件的输主和属组和源端一致。(除非你利用root权限,才有资格要求属主一致、属组一致)
[-t选项]
我们常常这样利用-t选项:
$ rsync -t main.c machineB:/home/userB1 利用-t选项后,rsync总会想着一件事,那就是将源文件的“modify time”同步到方针呆板。
2
带有-t选项的rsync,会变得更智慧些,它会在同步前先比拟双方文件的时间戳和文件巨细,假如一致,则就认为双方文件一样,对此文件就不再采纳更新行动了。
3
因为rsync的智慧,也会反被智慧误。假如目标端的文件的时间戳、巨细和源端完全一致,可是内容刚巧纷歧致时,rsync是发明不了的。这就是传说中的“坑”!
4 对付rsync自作智慧的环境,办理步伐就是利用-I选项。
[-I选项]
我们常常这样利用-I选项:
$ rsync -I main.c machineB:/home/userB
1 -I选项会让rsync变得很乖很诚恳,它会挨个文件去提倡数据同步。
2 -I选项可以确保数据的一致性,价钱即是速度上会变慢,因为我们放弃了“quick check”计策。(quick
check计策,就是先查察文件的时间戳和文件巨细,依次先解除一批认为沟通的文件)
3 无论环境如何,目标端的文件的modify time总会被更新到当前时刻。
【-v选项】
这个选项,简朴易懂,就是让rsync输出更多的信息,我们可以举一个例子:
$ rsync -vI main.c machineB:/home/userBmain.c
sent 81 bytes received 42 bytes 246.00 bytes/sec
total size is 11 speedup is 0.09
你增加越多的v,就可以得到越多的日志信息。
$ rsync -vvvvt abc.c machineB:/home/userBcmd= machine=machineB user= path=/home/userB
cmd[0]=ssh cmd[1]=machineB cmd[2]=rsync cmd[3]=--server cmd[4]=-vvvvte. cmd[5]=. cmd[6]=/home/userB
opening connection using: ssh machineB rsync --server -vvvvte. . /home/userB
note: iconv_open("ANSI_X3.4-1968", "ANSI_X3.4-1968") succeeded.
(Client) Protocol versions: remote=28, negotiated=28
(Server) Protocol versions: remote=30, negotiated=28
[sender] make_file(abc.c,*,2)
[sender] flist start=0, used=1, low=0, high=0
[sender] i=0 abc.c mode=0100664 len=11 flags=0
send_file_list done
file list sent
send_files starting
server_recv(2) starting pid=31885
recv_file_name(abc.c)
received 1 names
[receiver] i=0 abc.c mode=0100664 len=11
recv_file_list done
get_local_name count=1 /home/userB
recv_files(1) starting
generator starting pid=31885 count=1
delta transmission enabled
recv_generator(abc.c,0)
abc.c is uptodate
generate_files phase=1
send_files phase=1
recv_files phase=1
generate_files phase=2
send files finished
total: matches=0 hash_hits=0 false_alarms=0 data=0
generate_files finished
recv_files finished
client_run waiting on 14318
sent 36 bytes received 16 bytes 104.00 bytes/sec
total size is 11 speedup is 0.21
_exit_cleanup(code=0, file=main.c, line=1031): entered
_exit_cleanup(code=0, file=main.c, line=1031): about to call exit(0)
[-z选项]
这是个压缩选项,只要利用了这个选项,rsync就会把发向对端的数据先举办压缩再传输。对付网络情况较差的环境下发起利用。
一般环境下,-z的压缩算法会和gzip的一样。
[-r选项]
我们在第一次利用rsync时,往往会碰着这样的囧境:
$ rsync superman machineB:/home/userBskipping directory superman
假如你不特别汇报rsync你需要它帮你同步文件夹的话,它是不会主动包袱的,这也正是rsync的懒惰之处。