rsync的原理——转载
? 前段日子在網(wǎng)上找rsync daemon的filter等過濾規(guī)則的詳解,怎么也找不到,哥一怒之下,決定自己動(dòng)手翻譯,于是有了本文…
? ? 本文內(nèi)容翻譯自rsync的官方文檔:http://rsync.samba.org/ftp/rsync/rsync.html,以及http://rsync.samba.org/ftp/rsync/rsyncd.conf.html,非完整的全文翻譯,并且按照我的需要,對(duì)原文的相關(guān)章節(jié)或條目進(jìn)行了適當(dāng)?shù)闹匦戮幣拧9俜轿臋n發(fā)布日期:26 Mar 2011。
? ? rsync是Unix/Linux系統(tǒng)中一款優(yōu)秀高效的鏡像同步和遠(yuǎn)程數(shù)據(jù)備份工具,它可以把本地文件拷貝到遠(yuǎn)程主機(jī),或從遠(yuǎn)程主機(jī)拷貝文件到本地,也可以在本地的兩個(gè)目錄之間進(jìn)行拷貝,但不支持兩個(gè)遠(yuǎn)程主機(jī)之間的互相拷貝。
? ??關(guān)于rsync的工作方式:
? ? rsync連接遠(yuǎn)程主機(jī)進(jìn)行同步或備份時(shí)有兩種途徑:使用遠(yuǎn)程shell程序(如ssh或rsh)進(jìn)行連接,或使用TCP直接連接rsync daemon。
? ? 當(dāng)源路徑或目的路徑的主機(jī)名后面包含一個(gè)冒號(hào)分隔符時(shí),rsync使用遠(yuǎn)程shell傳輸;當(dāng)源路徑或目的路徑的主機(jī)名后面包含兩個(gè)冒號(hào),或使用rsync://URL時(shí),rsync使用TCP直接連接rsync daemon。
? ? 特別的,如果只指定了源路徑,而沒有指定目的路徑,rsync將會(huì)顯示源路徑中的文件列表,類似于使用命令ls -l。
rsync把本地端看作client,把遠(yuǎn)程端當(dāng)成server。注意:不要把server與rsync daemon混淆!daemon一定是server,而server卻不一定是daemon,也可能是遠(yuǎn)程shell的衍生進(jìn)程。
? ? 至于什么是daemon,以及遠(yuǎn)程shell衍生daemon,下文會(huì)有說明。
? ??關(guān)于rsync的安裝:
? ? rsync安裝方式是最常規(guī)的./configure && make && make install,只是要注意:源機(jī)器和目標(biāo)機(jī)器都要安裝。
? ??關(guān)于rsync的啟動(dòng):
? ? 前面說過rsync在進(jìn)行同步或備份時(shí),有兩種途經(jīng)連接遠(yuǎn)程主機(jī):使用遠(yuǎn)程shell,或使用TCP連接遠(yuǎn)程daemon,可以把它們分別稱之為shell模式和daemon模式。只有daemon模式才有啟動(dòng)rsync一說。
? ? 如果使用shell模式,rsync安裝完成后就可以直接使用了,無所謂啟動(dòng),也不需要任何配置文件。遠(yuǎn)程傳輸時(shí)一般使用ssh作為傳輸工具,當(dāng)然,也可以使用參數(shù)-e來指定一個(gè)遠(yuǎn)程shell。
? ? 如果使用daemon模式,就無需遠(yuǎn)程shell了,但必須在一臺(tái)機(jī)器上啟動(dòng)rsync daemon,默認(rèn)端口873.
? ? 你可以經(jīng)由inetd啟動(dòng)daemon,或者作為一個(gè)獨(dú)立進(jìn)程啟動(dòng)daemon,或者由rsync client通過遠(yuǎn)程shell啟動(dòng)daemon。
? ? ?1)如果把它作為一個(gè)獨(dú)立進(jìn)程來啟動(dòng),只需要運(yùn)行命令:rsync --daemon即可;
? ? ?2)如果通過inetd來運(yùn)行,要修改兩個(gè)文件:/etc/services和/etc/inetd.conf:
? ? ? 在/etc/services文件中添加如下行:rsync 873/tcp
? ? ? 在/etc/inetd.conf中添加:rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
? 注意把/usr/bin/rsync換成你的rsync安裝目錄!然后重啟inetd服務(wù),使配置文件生效。
? ? 關(guān)于由client通過遠(yuǎn)程shell啟動(dòng)daemon,官方文檔中有一個(gè)條目:USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION。
? ? 條目中說,rsync支持這種用法:使用遠(yuǎn)程shell連接host,然后衍生出一個(gè)single-use “daemon”服務(wù)器,來讀取遠(yuǎn)程用戶家目錄下的配置文件。從用戶的角度看,通過遠(yuǎn)程shell連接而啟用的daemon傳輸,它的命令行語法跟正常的rsync daemon傳輸是一樣的,唯一不同的是,你必須在命令中使用--rsh=COMMAND來明確遠(yuǎn)程shell程序。如下例:
? ? rsync -av --rsh=ssh host::module /dest
? 譯者注:雖然官方文檔中說這種用法在某些情況下很有用,但我覺得很別扭。
? ? 當(dāng)rsync作為daemon運(yùn)行時(shí),它需要一個(gè)用戶身份。如果你希望啟用chroot,則必須以root的身份來運(yùn)行daemon,監(jiān)聽端口(1024以下,默認(rèn)873),或設(shè)定文件屬主;如果不啟用chroot,也可以不使用root用戶來運(yùn)行daemon,但該用戶必須對(duì)相應(yīng)的模塊擁有讀寫數(shù)據(jù)、日志和lock file的權(quán)限。
? ? 當(dāng)rsync以daemon模式運(yùn)行時(shí),它還需要一個(gè)配置文件:rsyncd.conf。修改這個(gè)配置后不必重啟rsync daemon,因?yàn)槊恳淮蔚腸lient連接都會(huì)去重新讀取該文件。
? ? 譯者注:關(guān)于配置文件rsyncd.conf的設(shè)定,后面會(huì)有詳細(xì)的參數(shù)解釋。
? ??關(guān)于rsync的兩種模式:
? ? 該部分額外的內(nèi)容來自IBM官方網(wǎng)站上的一篇文章。該文章把rsync的運(yùn)行模式擴(kuò)展成了四種,但我認(rèn)為rsync官方文檔的兩種模式的劃分更加合理一些。
? ? 所謂rsync daemon,就是在一臺(tái)機(jī)器上永久運(yùn)行的rsync進(jìn)程。在任何一臺(tái)安裝rsync的機(jī)器上運(yùn)行rsync --daemon,則這臺(tái)機(jī)器上運(yùn)行的rsync就是rsync daemon。我們可以把文件發(fā)送給daemon,也可以向daemon請(qǐng)求文件。
? ? daemon模式非常適合創(chuàng)建中心備份服務(wù)器,或項(xiàng)目存儲(chǔ)庫。
? ? 兩種模式的區(qū)別前面已經(jīng)說過,shell模式在源路徑和目的路徑中使用一個(gè)冒號(hào),而daemon模式使用兩個(gè)冒號(hào)。
? ??關(guān)于rsync命令的語法:
? ? 官方文檔的舉例:
? ? 1)rsync -t *.c foo:src/
? ? ? ? 把當(dāng)前目錄中所有以.c結(jié)尾的文件傳輸?shù)綑C(jī)器名為foo的src目錄中。如果某些文件已經(jīng)在遠(yuǎn)程主機(jī)中存在,則跳過該文件。
? ? 2)rsync -avz foo:src/bar /data/tmp
? ? ? ? ?從機(jī)器名為foo的遠(yuǎn)程主機(jī)上把/src/bar目錄及其下所有文件傳輸?shù)奖镜貦C(jī)器的/data/tmp目錄中。注意:源路徑src/bar的最后沒有斜杠”/”!
? ? ? ? 源路徑的最后是否有斜杠有不同的含義:有斜杠,只是復(fù)制目錄中的文件;沒有斜杠的話,不但要復(fù)制目錄中的文件,還要復(fù)制目錄本身!
? ? ? ? 目的路徑的最后有沒有斜杠,對(duì)傳輸沒有影響。
? ? 3)rsync -av host:file1 :file2 host:file{3,4} /dest/
? ? ? ? ?rsync -av host::mod/file{1,2} host::mod/file3 /dest/
? ? ? ? ?rsync -av host::mod/file1 ::mod/file{3,4}
? ? ? ? 這個(gè)例子是rsync更高級(jí)一點(diǎn)的用法,使用rsync同時(shí)傳輸多個(gè)指定文件。
? ? rsync可以一次傳輸多個(gè)指定的文件,方法是添加多個(gè)遠(yuǎn)程主機(jī)參數(shù),或忽略主機(jī)名。如上例。
? ??關(guān)于rsync命令中的選項(xiàng):
? ? 上面例子中提到了一些選項(xiàng),rsync的選項(xiàng)有很多,請(qǐng)參考官方文檔。常用的選項(xiàng)如下:
daemon也有一些常用選項(xiàng),下面會(huì)有介紹。
? ??client如何連接rsync daemon:
? ? 上面第3個(gè)例子已經(jīng)給出了client連接daemon的語法示例。但是官方文檔又把本條目單獨(dú)列了出來,提醒我們?cè)谶B接rsync daemon時(shí)要注意的幾點(diǎn):
? ? 1) daemon模式中的源路徑,即SRC,實(shí)際上是模塊的名稱
? ? 2) 如果未在雙冒號(hào)::后面指定源路徑,則rsync會(huì)列出daemon上所有可能的模塊
? ? 3) 不要使用--rsh(-e)參數(shù)
? ? 4) 有些模塊可能需要密碼認(rèn)證,你可以使用--password-file選項(xiàng),來指定密碼文件
? ??啟用一個(gè)rsync daemon來接受client的連接:
? ??除--daemon外,rsync daemon啟動(dòng)時(shí)還有其它一些常用選項(xiàng):
? ? --daemon:
? ? ? 使rsync作為一個(gè)daemon運(yùn)行。daemon有兩種啟動(dòng)方式,前面已經(jīng)說過。對(duì)client發(fā)出的每一次連接請(qǐng)求,daemon會(huì)讀取配置文件rsyncd.conf,然后做出相應(yīng)的回應(yīng)。
? ? --bwlimit=KBPS:
? ? ? 指定daemon每秒傳輸?shù)淖畲笄ё止?jié)。client在請(qǐng)求連接時(shí)也可以指定一個(gè)--bwlimit值,但該值不能大于daemon端的設(shè)置。
? ? --config=FILE:
? ? ? 指定daemon的配置文件。只有當(dāng)rsync以daemon模式運(yùn)行的時(shí)候,該選項(xiàng)才有效。默認(rèn)的配置文件為/etc/rsyncd.conf,除非daemon是通過遠(yuǎn)程shell運(yùn)行,并且遠(yuǎn)程user非超級(jí)用戶,這種情況下,配置文件rsyncd.conf默認(rèn)存在于當(dāng)前目錄(在$HOME目錄中比較典型)。關(guān)于通過遠(yuǎn)程shell啟用daemon,見上文。
? ? --port=PORT:
? ? ? 指定daemon監(jiān)聽的端口。
? ? --log-file=FILE:
? ? ? 該選項(xiàng)告訴daemon不要使用rsyncd.conf中指定的log文件,而要使用此處指定的文件。此選項(xiàng)很少用到。
?
原文地址:
http://share.blog.51cto.com/278008/560742
轉(zhuǎn)載于:https://blog.51cto.com/caduke/1654507
總結(jié)
以上是生活随笔為你收集整理的rsync的原理——转载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以交互方式安装ESXi 6.0
- 下一篇: [裴礼文数学分析中的典型问题与方法习题参