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