如果你是一位運維工程師,你很可能會面對幾十臺、幾百臺甚至上千臺服務器,除了批量操作外,環(huán)境同步、數(shù)據(jù)同步也是必不可少的技能。
說到“同步”,不得不提的利器就是rsync,今天就來說說我從這個工具中看到的同步的藝術。
[不帶任何選項]
我們經(jīng)常這樣使用rsync:
 代碼如下:
$ rsync main.c machineB:/home/userB
1 只要目的端的文件內(nèi)容和源端不一樣,就會觸發(fā)數(shù)據(jù)同步,rsync會確保兩邊的文件內(nèi)容一樣。
2 但rsync不會同步文件的“modify time”,凡是有數(shù)據(jù)同步的文件,目的端的文件的“modify time”總是會被修改為最新時刻的時間。
3 rsync不會太關注目的端文件的rwx權限,如果目的端沒有此文件,那么權限會保持與源端一致;如果目的端有此文件,則權限不會隨著源端變更。
4 只要rsync有對源文件的讀權限,且對目標路徑有寫權限,rsync就能確保目的端文件同步到和源端一致。
5 rsync只能以登陸目的端的賬號來創(chuàng)建文件,它沒有能力保持目的端文件的輸主和屬組和源端一致。(除非你使用root權限,才有資格要求屬主一致、屬組一致)
[-t選項]
我們經(jīng)常這樣使用-t選項:
 代碼如下:
$ rsync -t main.c machineB:/home/userB
1 使用-t選項后,rsync總會想著一件事,那就是將源文件的“modify time”同步到目標機器。
2 帶有-t選項的rsync,會變得更聰明些,它會在同步前先對比兩邊文件的時間戳和文件大小,如果一致,則就認為兩邊文件一樣,對此文件就不再采取更新動作了。
3 因為rsync的聰明,也會反被聰明誤。如果目的端的文件的時間戳、大小和源端完全一致,但是內(nèi)容恰巧不一致時,rsync是發(fā)現(xiàn)不了的。這就是傳說中的“坑”!
4 對于rsync自作聰明的情況,解決辦法就是使用-I選項。
[-I選項]
我們經(jīng)常這樣使用-I選項:
 代碼如下:
$ rsync -I main.c machineB:/home/userB
1 -I選項會讓rsync變得很乖很老實,它會挨個文件去發(fā)起數(shù)據(jù)同步。
2 -I選項可以確保數(shù)據(jù)的一致性,代價便是速度上會變慢,因為我們放棄了“quick check”策略。(quick check策略,就是先查看文件的時間戳和文件大小,依次先排除一批認為相同的文件)
3 無論情況如何,目的端的文件的modify time總會被更新到當前時刻。
【-v選項】
這個選項,簡單易懂,就是讓rsync輸出更多的信息,我們可以舉一個例子:
$ rsync -vI main.c machineB:/home/userB main.csent 81 bytes received 42 bytes 246.00 bytes/sectotal size is 11 speedup is 0.09
新聞熱點
疑難解答