rsync那些事兒

1.關(guān)于rsync

rsync是remote synchronize的簡稱志电,是一款遠(yuǎn)程同步軟件导俘,在項目中多有用到。其采用的rsync算法(酷殼上有一篇介紹rsync核心算法的博文rsync的核心算法)提供了一種比較快速的方法用于客戶機(jī)和遠(yuǎn)程文件服務(wù)器同步。

rsync的特點(diǎn)是安裝和配置都比較方便,然后同步文件時能夠保持符號鏈接憨琳,硬鏈接,權(quán)限旬昭,文件時間篙螟,文件歸屬等數(shù)學(xué)。安全性方面則提供了密碼问拘、讀寫權(quán)限控制和IP權(quán)限控制遍略。

2.rsync安裝和配置

由于我用的是ubuntu,已經(jīng)預(yù)裝了rsync骤坐,所以就不用安裝了绪杏。我的配置文件是/etc/rsyncd.conf,配置如下纽绍,更詳細(xì)的配置介紹參見rsyncd.config

read only = yes
list = yes
uid = nobody
gid = nogroup

pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.secrets
log file = /var/log/rsync.log

[test]
comment = Welcome
path = /home/ssj/rsynctest
hosts allow = 127.0.0.1 10.211.55.11
auth users = rsynctest

其中read only設(shè)置同步目錄只讀蕾久,uid和gid為同步采用的用戶和用戶組。pid file和log file為pid文件和日志文件存放地址顶岸。

test為同步目錄腔彰,path為同步目錄叫编,注意該變量后面加注釋如#XXX之類辖佣,加了會報chroot錯誤。另外搓逾,hosts allow是限制同步的ip卷谈,多個ip空格分隔。auth users和secrets file分別是認(rèn)證的用戶和密碼文件霞篡。其中secrets file權(quán)限必須為600世蔗,否則會同步會出錯端逼,格式為用戶名:密碼,這里的用戶名不一定是系統(tǒng)用戶污淋,可以隨便取名顶滩,比如我的是rsynctest:testpasswd

3.rsync同步命令

rsync同步有兩種模式寸爆,一種通過遠(yuǎn)程shell如ssh進(jìn)行連接礁鲁,另外則是通過TCP直接連接rsync服務(wù)器。因為使用ssh等同步需要設(shè)置ssh對應(yīng)端口赁豆,比較麻煩點(diǎn)仅醇,我一般都是采用直接連接rsync服務(wù)器這種方式。同步的命令最常見的就是下面這樣:

rsync -avz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/

其中rsynctest是我同步的用戶名魔种,10.211.55.11是我的rsync服務(wù)器的ip析二。運(yùn)行命令然后輸入密碼就行了。如果不想每次都輸入密碼节预,可以加上參數(shù)--password-file=/etc/rsyncd.secrets叶摄,其中rsyncd.secrets是你rsync客戶端機(jī)器上的文件,權(quán)限也要600安拟,內(nèi)容格式跟rsync服務(wù)器的不一樣准谚,這里只需要密碼testpasswd即可。--progress顯示同步的進(jìn)度去扣,--delete則是刪除rsynctarget中多余的文件柱衔。

這幾個選項avz很常用,其中v是verbose愉棱,z是壓縮唆铐,a相當(dāng)于rlptgoD,其中r是遞歸同步目錄奔滑,如果不加-r而是用-d艾岂,則只會同步對應(yīng)的目錄,而不會同步目錄下面的文件朋其;l同步符號鏈接王浴,p同步文件保持權(quán)限不變,t保持文件時間梅猿,g保持文件所屬組氓辣,o保持文件所屬用戶,D保持設(shè)備文件袱蚓。一般情況用avz就可以了钞啸。另外還有個選項-P也會常用,表示保持部分同步的文件,如果同步中斷体斩,可以續(xù)傳梭稚。

另外有個地方要注意下,就是在同步一個子目錄的時候絮吵,比如我同步rsynctest/testdir這個目錄弧烤,如果命令是這樣rsync -avz rsync://rsynctest@10.211.55.11/test/testdir rsynctarget/,因為testdir后面沒有加"/",則同步結(jié)果就是rsynctarget目錄下面會有一個testdir目錄蹬敲,即rsynctarget/testdir這樣扼褪。如果命令是````rsync -avz rsync://rsynctest@10.211.55.11/test/testdir/ rsynctarget/```,那結(jié)果就是把testdir目錄下面的文件全部同步到rsynctarget目錄下粱栖,rsynctarget目錄下面不會有testdir這個目錄话浇。

4.實(shí)例

為了方便,我建了個目錄用來做rsync測試闹究。目錄rsynctest中的內(nèi)容如下:

root@ubuntu:/home/ssj/rsynctest# ls -la
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 28 ssj    ssj     4096 Mar  7 16:13 ..
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 test.txt

其中softlink.txt是test.txt的符號鏈接幔崖,link.txt是test.txt的硬鏈接,而outer.txt是上一級目錄的outer.txt的硬鏈接渣淤。

同步的目標(biāo)目錄rsynctarget的內(nèi)容如下:

root@ssj-mbp ssj#ls -la rsynctarget/
total 8
drwxr-xr-x   3 65534  65534   102  3  7 17:15 .
drwxr-xr-x@ 94 ssj    staff  3196  3  6 23:38 ..
-rw-r--r--   1 root   65534     7  3  7 17:15 myfile.txt

采用不同的參數(shù)赏寇,同步的結(jié)果會不一樣。

1)不用-a參數(shù)价认,也不用-og等嗅定,命令如下:

rsync -rpvz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

由于用了--delete,則原來rsynctarget中的myfile.txt會被刪除用踩,由于沒有加-l渠退,則符號鏈接文件outer.txt和softlink.txt沒有同步過來。同步后脐彩,硬鏈接test.txt被當(dāng)做一個新文件了碎乃,沒有保留硬鏈接關(guān)系,如果要保留惠奸,需要加上-H選項梅誓。此外,文件所有者也不是原來的nobody:nogroup了佛南,如果需要保留梗掰,要加-og參數(shù)。該命令同步后嗅回,rsynctarget目錄內(nèi)容如下:

root@ubuntu:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 root root 4096 Mar  7 17:31 .
drwxr-xr-x 29 ssj  ssj  4096 Mar  7 17:31 ..
-rw-r--r--  1 root root   13 Mar  7 17:31 link.txt
drwxr-xr-x  2 root root 4096 Mar  7 17:31 testdir
-rw-r--r--  1 root root   13 Mar  7 17:31 test.txt

2)采用-a參數(shù)及穗。命令如下:

rsync -avz --progress --delete rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

同步后rsynctarget目錄內(nèi)容如下,可以看到使用-a后妈拌,文件所有者都得到保留拥坛,軟連接也同步過來了蓬蝶,不過硬鏈接關(guān)系沒有保留尘分。要保留的話猜惋,加上-H。

root@ubuntu:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 29 ssj    ssj     4096 Mar  7 17:31 ..
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 test.txt

3)另外還有一個重要參數(shù)就是-P培愁,注意這個P不是progress的意思著摔,他是partial的意思,就是說同步過程如果出現(xiàn)中斷(比如主動停止了同步或者網(wǎng)絡(luò)問題導(dǎo)致同步中斷)定续,如果一個文件沒有傳完谍咆,是否保留這些已經(jīng)傳輸?shù)牟糠志褪怯?P來控制。這里我在rsynctest目錄下面加了一個test.tar.gz文件私股,大小為2M摹察,而我用bwlimit參數(shù)限制傳輸速度為10K/s以內(nèi),這樣倡鲸,中途終止同步供嚎,這樣可以看到,如果沒有加-P參數(shù)的時候峭状,rsynctarget沒有保存tornado.tar.gz這個文件已經(jīng)傳輸?shù)牟糠值目说危绻恿?P則會保存已經(jīng)傳輸?shù)牟糠郑募彩莟ornado.tar.gz优床,下次重傳會斷點(diǎn)續(xù)傳劝赔,即已經(jīng)同步的部分不會重新傳。同步過程中臨時文件名是.tornado.tar.gz.qesuQR這樣的格式胆敞。如果有程序是從同步目錄取數(shù)據(jù)并處理的着帽,最好不要用-P參數(shù),因為如果網(wǎng)絡(luò)問題會導(dǎo)致文件傳了一部分移层,然后被處理了启摄,這樣會影響處理結(jié)果。

rsync -avzP --progress --delete --bwlimit=10 rsync://rsynctest@10.211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

5.參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幽钢,一起剝皮案震驚了整個濱河市歉备,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匪燕,老刑警劉巖蕾羊,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帽驯,居然都是意外死亡龟再,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門尼变,熙熙樓的掌柜王于貴愁眉苦臉地迎上來利凑,“玉大人浆劲,你說我怎么就攤上這事“С海” “怎么了牌借?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長割按。 經(jīng)常有香客問我膨报,道長,這世上最難降的妖魔是什么适荣? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任现柠,我火速辦了婚禮,結(jié)果婚禮上弛矛,老公的妹妹穿的比我還像新娘够吩。我一直安慰自己,他們只是感情好丈氓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布周循。 她就那樣靜靜地躺著,像睡著了一般扒寄。 火紅的嫁衣襯著肌膚如雪鱼鼓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天该编,我揣著相機(jī)與錄音迄本,去河邊找鬼。 笑死课竣,一個胖子當(dāng)著我的面吹牛嘉赎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播于樟,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼公条,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迂曲?” 一聲冷哼從身側(cè)響起靶橱,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎路捧,沒想到半個月后关霸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杰扫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年队寇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片章姓。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳遣,死狀恐怖识埋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情零渐,我是刑警寧澤窒舟,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站相恃,受9級特大地震影響辜纲,放射性物質(zhì)發(fā)生泄漏笨觅。R本人自食惡果不足惜拦耐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望见剩。 院中可真熱鬧杀糯,春花似錦、人聲如沸苍苞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羹呵。三九已至骂际,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冈欢,已是汗流浹背歉铝。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凑耻,地道東北人太示。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像香浩,于是被迫代替她去往敵國和親类缤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容