rsync

文件同步协议和软件

rsyncUnix下的一款應用軟件,它能同步更新兩處計算機的檔案目錄,並適當利用差分編碼以減少數據傳輸量。rsync中的一項同類軟件不常見的重要特性是每個目標的鏡像只需傳送一次。rsync可以拷貝/顯示目錄內容,以及拷貝檔案,並可選壓縮以及遞歸拷貝。

rsync
原作者安德魯·垂鳩(Andrew Tridgell)與保羅·麥可拉斯(Paul Mackerras)
開發者韋恩·大衛森(Wayne Davison)
首次發布1996年6月19日,​28年前​(1996-06-19[1]
當前版本3.2.7(2022年10月20日,​2年前​(2022-10-20
源代碼庫 編輯維基數據鏈接
編程語言C
平台跨平臺
類型數據傳輸差分備份英語Differential backup
許可協議GNU GPLv3
網站rsync.samba.org

在常駐模式(daemon mode)下,rsync預設監聽TCP873,以原生rsync傳輸協定或者透過遠端shellRSH或者SSH提供檔案。SSH模式下,rsync用戶端執行程式必須同時在本地和遠端機器上安裝。

rsync是以GNU通用公共許可證發行的自由軟件

演算法

編輯

確定要發送哪些文件

編輯

默認情況下,rsync通過檢查每個文件的修改時間和大小來確定哪些文件在發送和接收系統之間存在差異。如果時間或大小在兩個系統之間不同,它就把文件從發送系統轉移到接收系統。由於只需要讀取文件目錄信息,這個過程很快,但會錯過某些罕見的修改,碰巧這兩者都沒有改變。[2]

如果用--checksum調用,Rsync會執行一個較慢但全面的檢查。這將強制對兩個系統上的每個文件進行全面的校驗和比較。除了罕見的校驗和碰撞之外,可以避免遺漏已更改文件的風險。

確定文件的哪些部分有改變

編輯

rsync實用程序使用由澳洲電腦程式師安德魯·垂鳩(Andrew Tridgell)發明的演算法,在當接受端電腦已經有相同結構(例如檔案)但不同版本時,有效的將結構傳輸過通訊連線。在他1999年的博士論文《Efficient Algorithms for Sorting and Synchronization》[3]中,詳細介紹了rsync的設計、實現與性能。

接受端將檔案拷貝打散成固定大小為 的不重疊片段,並對每個片段計算兩個校驗和MD4散列函數與一個較弱的旋轉哈希。它將這些校驗和送給發送者。通訊協議版本30(與rsync版本3.0.0一並發行)現在使用MD5散列函數以替代MD4。[4]

發送者對位於其版本的檔案中每個大小為 的片段計算輪替校驗和,即使是重疊的片段。這可被有效的計算透過特別知識產權的輪替校驗和算法:如果位元  的輪替校驗和是 ,從位元  的輪替校驗和可從 ,位元 ,以及位元 計算出而不需要真正去檢驗中間的位元。因此,如果位元1到25的輪替校驗和已被算出,那計算位元2到26的輪替校驗和可完全依靠之前的校驗和與位元1與位元26算出。

rsync使用的旋轉哈希來自於馬克艾德勒(Mark Adler)的adler-32校驗和算法。該算法也被用於zlib,而它本身也基於Fletcher校驗英語Fletcher's checksum算法。

發送者其後以接收者送來的一組輪替校驗和比較它自己的輪替校驗和以決定是否任何匹配存在。如果是的話,它便透過計算匹配區塊的MD4校驗和與接受端送來的MD4校驗和比較來驗證匹配。

發送者稍後傳送給接收者不與接收者方任何區塊匹配的檔案的那些部分,以及如何合併這些區塊到接收者版本的組裝指令。在實際上,這產生了與發送者端檔案一模一樣的拷貝。然而,在原則上是可能接收者的拷貝在這一點上不同:這可能發生在當兩個檔案有不同的區塊但有著相同的MD4散列函數與輪替校驗和;這種事情發生的機率在現實上極端罕見。

如果發送者與接收者檔案版本有許多區段相同,該公用程式只需傳送相對小部分的資料以將檔案同步。

在rsync演算法構成rsync應用程式核心並最佳化兩台電腦間TCP/IP的傳輸同時,rsync應用程式也支援其他種顯著增進檔案傳輸或備份的重要功能。他們包括在發送端與接收端個別利用zlib進行區塊區塊間壓縮解壓縮,以及支援通訊協定如ssh。該協定讓加密傳輸兼具壓縮與效率,透過rsync演算法產生的差分資料變得可能。除ssh以外,stunnel亦可被利用於創造加密通道以保全被傳輸的資料。

使用

編輯
  • rsync -avh source destination

rsync的撰寫是用來取代rcpSCP[5]。rsync最早期程式的其中之一是用來實現透過rsync/ssh與標準Unix帳號,從多重Unix客戶端鏡像或者備份到中央Unix伺服器。與如Cron類似的排程應用程式配合,任何人皆可排程介於多台電腦與中央伺服器間自動加密過、基於rsync的鏡像備份。

變種

編輯

一個叫做rdiff的公用程式利用rsync的演算法產生檔案A與檔案B間不同的差分檔案(與公用程式diff類似,不過不同的差分檔案格式)。差分檔案可稍後被套用到檔案A,轉成檔案B(類似patch公用程式)。

不像diff,產生差分檔案的過程有兩步:首先產生檔案A的簽名檔,然後這個(相對較小)的簽名檔與檔案B被用來產生差分檔。又與diff相異的是,rdiff可適用於二進位檔案

利用rdiff,自由軟體作者們寫了一個叫做rdiff-backup的公用程式,它可以跨過網路維護位於另一台伺服器某個檔案或者目錄的備份鏡像。rdiff-backup儲存備份以及遞增的rdiff差分檔。這種方式讓回溯到任何備份點成為可能。

duplicity是rdiff-backup的一個變種,它利用單一儲存服務(像Amazon S3)達成不需要與儲存伺服器合作的備份。它透過產生預先產生每個區塊的散列函數,將它們加密,並送到伺服器儲存,然後當進行遞增備份時取回。剩下的資料為滿足保全需求也被加密儲存。

歷史

編輯

rsync首度發布於1996年6月19日。原始作者為安德魯·垂鳩(Andrew Tridgell)與保羅·麥可拉斯(Paul Mackerras)。[6]

rsync 3.0於2008年3月1日發行。[7]

參見

編輯

參考資料

編輯
  1. ^ Tridgell, Andrew. First release of rsync - rcp replacement. Newsgroupcomp.os.linux.announce. 19 June 1996 [2007-07-19]. Usenet: [email protected]. (原始內容存檔於2011-11-08). 
  2. ^ rsync(1) - Linux man page. [2022-08-06]. (原始內容存檔於2017-01-01). 
  3. ^ Tridgell, Andrew; Efficient Algorithms for Sorting and Synchronization, February 1999, retrieved 29 September 2009
  4. ^ 存档副本. [2008-10-24]. (原始內容存檔於2008-03-20). 
  5. ^ 如在README頁面存檔備份,存於網際網路檔案館)所述
  6. ^ Tridgell, Andrew. First release of rsync - rcp replacement. Newsgroupcomp.os.linux.announce. 1996年6月19日 [2007-07-19]. <[email protected]>#1/1. (原始內容存檔於2011-11-08). 
  7. ^ Davison, Wayne. Rsync 3.0.0 released. rsync-announce (郵件列表). 2008年3月1日 [2008年10月24日]. (原始內容存檔於2009年8月15日). 

外部連結

編輯