與遠端加密儲存同步

與遠端加密儲存同步

我試圖在多台電腦之間保持資料夾樹同步。目前,我正在使用unison帶有中央遠端伺服器的星形拓撲。我希望伺服器上的資料被加密,所以在伺服器上,unison樹(包括.unison資料夾)保存在encfs樹內。要執行同步,每個客戶端:

  • 安裝伺服器存儲sshfs
  • encfs儲存掛載到sshfs本地
  • unison在文件的本機副本和已安裝的文件副本之間執行。

該設定有很多優點:

  • 開源工具
  • 可編寫腳本的命令列解決方案
  • 安全通訊ssh
  • 伺服器的隱私,因為encfs資料夾樹永遠不會在那裡解密
  • 能夠在同步期間區分修改,因為unison在純文字上運行

效果不太好的一件事是同步速度。由於encfs來自伺服器的資料夾安裝在客戶端上,因此stat()客戶端所做的每個呼叫都必須轉發ssh到伺服器。文檔樹已經有數千個文件,並且unison同步必須對每個文件至少執行一次stat()呼叫(以排除對.unison資料夾中儲存的狀態的修改)。是否有更快的替代方案可以保持上述優點?

注意:如果我要刪除最後一個條件,我可以運行unison密文,並且只在本地掛載encfs樹。然後unison將在客戶端和伺服器上本地運行,因此stat()呼叫速度會很快。但很高興能夠選擇至少查看正在同步的文件;如果unison超過encfs密文,檔案名稱將被加密。

我知道要解決這個問題,必須在同步期間有效地將文件元資料從伺服器傳輸到客戶端。我想知道是否有一種方法(即現有工具的組合)將元數據存儲在一個地方,以便通過僅發送一個(或幾個)數據塊來傳輸所有元數據,而不是發送數千個塊(這就是轉發stat()呼叫正在做的事情)。

如果我要替換encfs為儲存在伺服器上的大檔案中的ext4over分割區,並透過over安裝在客戶端上,該怎麼辦?檔案系統是否會將檔案元資料保存在一起,以便僅透過發送幾個區塊來傳輸它?是否知道在更新期間僅發送幾個區塊,而不是重寫整個加密檔案?dm-cryptlosetupsshfsext4sshfs

答案1

我已經成功完成了ext4over luksover sshfs。我發現在這種類型的坐騎上運行比 over overunison快得多。因此,這數千個結構一定以某種方式捆綁在檔案系統中,以便它們在同步期間需要更少的網路流量。encfssshfsstat()ext4

有點煩人的一件事是檔案系統需要為每個檔案提供一個使用者 ID,並且當檔案系統本地安裝在客戶端上ext4時,該使用者 ID 用於計算存取權限。ext4就我而言,我選擇將本機使用者 ID 變更為特定數字全部我正在同步的客戶端。另一種方法是將檔案儲存在ext4uid 0 的 fs 中,然後使用非 root uidbindfs掛載fs。ext4

相關內容