題 如何在多台計算機之間同步主文件夾?


我家裡有三台電腦,想擁有 /home/ 文件夾樹在三者之間同步。
在三台計算機之一中修改/添加/刪除的任何文件/文件夾(隱藏的除外)將在另外兩台中更新。

rsync 足以做到這一點?如何?


102


起源


大多數“同步”工具的問題(包括rsync,如果我沒記錯),就是他們沒有用戶操作的概念。因此,如果您刪除計算機X上的文件,該工具不知道(a)您是否實際刪除了計算機X上的文件,或者(b)您是否在計算機Y上添加了該文件。大多數工具將假設(b),因此,在同步時,它們將在計算機X上再次添加文件(而不是在計算機Y上刪除它)。 - Rabarberski
@Rabarberski許多同步工具(包括Unison或Syncthing)保留一個數據庫,其中包含對現有數據的引用(因此)。在第一次同步新文件夾時它無法幫助您,但它們可以很好地(自動)刪除文件。大多數同步工具的真正問題是在下一次同步發生之前在兩個位置更改了文件 - 在這種情況下,您通常需要手動合併或者可能用最新版本替換。 - Chris
當更改無法在其他計算機上即時復制時同步是非常棘手的,我從未見過任何程序完美地執行它,因此請準備好一些錯誤,衝突,重新出現的文件。我建議只同步一些您知道可以通過同步程序管理的特定文件夾。 - Arno


答案:


這裡有一個可以解決這個問題的清單,每個都可以平衡你必須做出的不同取捨,所以你必須做出自己的選擇並自己嘗試:

  • 齊奏  - 正如其他人所說,這是手動運行,但非常快速,可靠和有效。要求兩台計算機同步打開。它有一個很好的用戶界面,允許您處理幾乎不可避免的衝突,並正確地跟踪和傳播刪除。圖形應用程序/包稱為unison-gtk。

  • OwnCloud  - 雲存儲在您自己的服務器上運行。你需要一台機器才能離開。需要合理的設置量。在服務器上運行完整的Apache 2 Web服務器和SqlLite或MySQL數據庫。與具有桌面客戶端的Dropbox類似,但服務器在您的控制之下。編輯:OwnCloud最近經歷了項目運行方式的一些變化,現在有一個新的完全開源(即沒有封閉源'企業'版)的幌子 NextCloud,(見這個 youtube採訪 與原始的OwnCloud開發人員了解更多詳情)。

  • SparkleShare  - 使用git保持文件同步。根據主頁:適用於許多較小的文件,不適合許多大型文件,如音樂或照片集。

  • Seafile  - 提供可以在本地計算機上安裝的服務器組件。 Seafile使用數據模型 類似於git 用於跟踪更改。為台式機,平板電腦和智能手機提供同步客戶端。可以在以下位置找到描述設置的博客文章 http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • OSYNC  - “...用bash編寫並基於rsync的雙向文件同步工具。它通過ssh隧道在本地和/或遠程目錄上工作。它的主要目標是作為cron任務啟動”(來自網站的文字)

  • PowerFolder的  - 基於Java的GPL v2項目。主網站推出商業產品,因此不清楚如何使用提供的.jar文件。

  • Rsync的  - 快速有效並且已存在數十年,但它沒有保留歷史記錄,因此您必須選擇方向來確定文件是新的還是刪除。可以使用圖形工具,例如 gwRsync

  • Lsyncd  - 監視文件夾/文件以觸發rsync複製

  • DVCS,自動同步  - 用python編寫,使用git存儲和共享機器之間的更改,以及XMPP來傳達更改。

  • git的附件 - 基於git的用於分流文件的命令行工具。這裡有一個說明性的演練: http://git-annex.branchable.com/walkthrough/

  • Tonido  - 免費軟件。提供將共享文件到其他設備的桌面應用程序。還提供商業雲產品和TonidoPlug插頭計算機。

  • BitTorrent同步 (免費軟件) - 基於BitTorrent的點對點文件同步。我不太了解這一點,因為我不會使用它,因為它不是開源的,不相信它將我的數據保存在我的局域網中,隨時可以用更好的信息/真實體驗編輯這個答案。

  • SyncThing  - 作為BitTorrent Sync的開源替代品而開發。它目前缺乏BitTorrent Sync的一些高級功能,例如不受信任的同行。它正在積極發展。

  • 商業託管服務,如dropbox,ubuntu one,google drive,apple iCloud都快速便宜,但它們都需要信任一家擁有所有數據的公司,並且需要相當快速的互聯網連接。

  • 混帳 / 顛覆  - 直接使用源控制系統。完全手動,可能是一個有點複雜但流行的方法,熟悉這些系統的一些用戶使用它們作為編程工具。

  • CloudFS  - 同步整個文件系統,基於集群技術

  • NFS掛載 - 基本上你的家就住在一台機器上,你可以通過網絡訪問它,對你攜帶的筆記本電腦沒有好處。更多信息: http://www.linuxjournal.com/article/4880


做出決定時要考慮的因素:

  • 中央服務器 - 某些解決方案要求計算機始終打開(或至少在需要同步時),以便其他計算機與之同步。這可能是您現有的計算機之一,也可能是NAS等單獨的計算機。注意增加電費。

  • 自動/手動/預定 - 避免必須解決在多台機器上更改某些內容的衝突的最佳方法是在每台機器上安裝一個程序來監視更改並立即進行同步,這樣您就減少了以多個方式結束的機會版本。使用手動流程,您始終必須記住運行同步。

  • 遠程訪問 - 您是否希望與LAN(也稱為家庭)同步,請考慮此安全問題。

  • 安全性 - 您的數據是否加密網絡,機器之間的傳輸安全性如何。如果有人在移動中捕獲您的數據然後發現加密有缺陷怎麼辦?誰控制保存數據的服務器,加密數據,您能信任任何第三方嗎?您是否必須在路由器中戳孔以獲得遠程訪問權限。 “已刪除”文件和相關元數據在同步設備和中央服務器上保留多長時間。您是在加密和未加密存儲之間進行同步嗎?

  • 移動大文件夾 - 我嘗試過的解決方案都有一個問題,當您移動/重命名文件或文件夾時,同步不理解這一點,並將其作為新內容重新上傳,然後刪除舊副本。請通過標記任何能夠處理此問題的解決方案來幫助解決(我懷疑基於git的解決方案是因為git不會因為它使用的基於內容的解決方案而受到影響但是我不知道因為我沒有沒用過它們。

  • 磁盤容量

  • 備份 - 同步不是備份。錯誤地刪除重要文件,上面的許多文件將快樂地刪除所有其他副本。我建議閱讀 Mat Honan關於被黑客入侵的文章 如果你將所有的數字蛋放在一個數字籃子中,那麼可以說會發生什麼。


我建議不要同步整個主文件夾,而是選擇要同步的特定文件夾,例如 Documents/Pictures/ 這將避免被迫處理自動同步所有內容的速度/性能/磁盤空間問題的痛苦。它還避免了必須維護排除列表。

當我繼續嘗試找到對我個人有用的東西時,我會嘗試將這個答案保持最新,並提供有用的信息。我將所有其他答案中的信息匯總成一個完整的答案。

參考文獻:

  • LinuxFormat - 2014年2月LXF180 p31,“託管存儲綜述”

黑客/所有/


77



我有一個服務器w / out root access(例如,需要安裝unison)。我的客戶端計算機上是否有一個不需要安裝在我的服務器上的腳本? - Ben Kushigian
我見過一個名為freefilesync的軟件(sourceforge.net/projects/freefilesync)在這里和那裡提到過幾次。在你的清單中可能值得一提嗎? - YoungFrog


齊奏 可能是一個很好的候選人:

Unison是一個文件同步工具   對於Unix和Windows。 它允許兩個   文件集合的複製品   要存儲在不同的目錄   主機(或同一個不同的磁盤)   主機),單獨修改,然後   通過傳播來提升最新動態   每個副本更改為另一個副本。

它已經進行了雙向同步。請參閱下面的更新。

我已經了解到rsync無法做到的事情很少,它可能提供相同或更好的解決方案,但您必須等待rsync專家才能找到該解決方案。

更新: 是的,Unison可以同步2台以上的機器。從他們的 用戶手冊

使用Unison同步兩台以上的機器 
 
  Unison旨在同步副本對。但是,可以通過執行多個成對同步來使用它來保持較大的機器組同步。

如果你需要這樣做,最可靠的設置方法是將機器組織成一個“星形拓撲”,一台機器被指定為“集線器”,其餘機器被指定為“輻條”,並且每台輻條機都在同步只有集線器。星型拓撲結構的一大優勢在於它消除了由於Unison為其同步的每對主機維護單獨的存檔而引起的“虛假衝突”混淆的可能性。


27



我有一些不一致的經驗,由於某種原因,不時從其他計算機添加新文件,它刪除它們,而其他時候它工作正常。 - jhcaiced
我建議編輯a / b / c示例以遵循手冊中的建議,不要創建循環。 - Tim Abell
關於你對rsync的引用。不,它不能可靠地進行雙向同步。查看以下答案,了解為什麼unison可以處理rsync無法處理的情況: stackoverflow.com/questions/4504357/... - ndemou


如何將文件放在SubVersion或git等版本控制系統中?

我沒有版本我的整個家庭目錄,但只有少數幾個重要的東西。 但我正在考慮轉換為git,因為它似乎對這類工作更好。 (快速搜索將向您發送正確的方向)。

祝好運


更新: 使用git的一個很好的副作用是很容易擁有特定於計算機的文件,因為你只需要為該計算機設置一個分支(並且在git中你默認得到它)。 因此,您不需要在所有計算機中擁有完全相同的文件,它們只需要相似,並且在所有不同的計算機上都有一個共同的“主”分支。


19



讓人驚訝。使用版本控制進行文件同步的想法確實讓我的皮膚爬行。 - JohnD
是的,這個想法很奇怪但很有用。考慮像〜/ bin /這樣的目錄,對於私有助手腳本,那種dir在版本控制系統中很棒。像.kde這樣的目錄在版本控制系統中可能表現不好,並且會被放入忽略列表中以便處理未處理的文件。 - Johan
這是保持文件同步的好方法,你必須習慣使用“git add”和“git rm”來添加/刪除文件,但效果很好。 - jhcaiced
我喜歡這個想法,因為我控制著我家裡垃圾中的文件的哪一部分將被共享。唯一的問題是如何管理提交。即一些文件應進入初始提交,然後反映更改以顯示它們基於system / etc / skel。 - ony
當您嘗試同步目錄時,是否在文件中保持幾個單獨的分支非常方便?當然,它有效,但我不建議(g)它完成這項任務。您通常可以從大多數同步工具中排除文件(通過名稱,文件夾等)以及您所描述的內容(僅針對某些重要的子目錄使用它),它對於原始問題並不真正有用。 - Chris


嘗試執行此操作時的主要問題是決定如何合併更改,傳播刪除和解決衝突。這很難以完全自動化的方式完成,特別是如果您有多個人使用的3台計算機設置。

如果你將用戶分開,事情會變得簡單得多。因為一個用戶不能同時在兩個地方(因此產生衝突),所以你可以設置一個rsync作業,在登錄時運行“獲取更改”並註銷“推送更改”...到你的一台計算機上將是主人...所以在這個粒度級別你每次都會同步/ home / myuser而不是整個/ home /。經過一段時間的不活動後,將添加一個改進的細化(如果人們沒有註銷)。

還有很多其他潛在的解決方案,但據我所知,沒有一個能夠神奇地解決這個問題。第一步可能是考慮如何使用這些機器並提出適合您用戶行為的同步策略。


6





我認為你可以通過NFS安裝一個普通的主文件夾來實現你想要的更好。看看這篇文章 http://www.linuxjournal.com/article/4880


5





這不會完全提供解決方案,但它會給你一個開始:

每隔一段時間設置一個cron作業來rsync文件。我使用如下命令:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

這將使用rsync僅複製所需的更改,而不是每次運行命令時重新復制所有更改。

--stats和--progress是可選的,應該可以從腳本中排除

我的rsync_backup_excludes.conf文件的內容是:

dev/*
proc/*
lost+found/*
mnt/*
sys/*

4



機器開啟時,Anacron將同步,避免因停機而丟失插槽。 - Tim Abell
這會將整個本地根複製到遠程主文件夾中。這不是OP所要求的,我也無法想像為什麼有人會想要...... - Cerin


查看 lsyncd

Lsyncd監視本地目錄樹事件監視器接口   (inotify或fsevents)。它聚合併組合了一些事件   秒然後產生一個(或多個)進程來同步   變化。默認情況下,這是rsync。因此,Lsyncd是輕量級的   鏡面解決方案,相對容易安裝,不需要   新的文件系統或塊設備,並不妨礙本地文件系統   性能。

Rsync + ssh是一種使用SSH進行操作的高級操作配置   文件和目錄直接在目標上移動而不是   通過電匯重新傳輸移動目的地。

可以通過配置文件實現細粒度的自定義。   自定義動作配置甚至可以在級聯中從頭開始編寫   從shell腳本到用Lua語言編寫的代碼,從shell腳本到用Lua語言編寫的代碼。


4





看看Dropbox吧 http://www.getdropbox.com/  跨平台Win / Linux / Mac


2



謝謝,但沒有。已經試過了。這不是我想要的。 - lamcro
Dropbox很棒,我使用免費的2GB存儲家庭,工作和筆記本電腦之間的鏈接,照片和其他非關鍵任務數據。在這種情況下,這不是你需要的,但在我看來,Dropbox絕對有它的位置。 - Matt Cofer


安裝 /home 從一台計算機到另外兩台計算機。 Automount非常適用於此。


2





PowerFolder的  - 同步文件,同步文件夾,遠程存儲,備份和專用文件共享。同步家庭和辦公室PC,共享假日照片或在文檔上一起工作。 PowerFolder的安全對等技術可在Internet或LAN中運行。


1





Ubuntu One 可能就是你要找的東西。不幸的是它還處於測試階段,我沒有經驗,所以我不確定它是否適合你。


1



我說它目前仍在大力發展 - 每隔幾天都有更新,因為Ubuntu團隊解決了問題。它有效,但我不推薦它在Dropbox上。 - nagul