Rsync

lsyncd – 單向同步,但針對整個文件夾

  • November 1, 2021

我有兩個文件夾~/A~/B. 有一些內容。

我寫了一個lsyncd配置文件~/.config/lsyncd/lsyncd.conf

# NOTE: Use only absolute path names
# NOTE: check "man rsync" for parameters inside "rsync{}".

# Global settings
settings {
   logfile = "/home/ziga/.config/lsyncd/lsyncd.log",
   statusFile = "/home/ziga/.config/lsyncd/lsyncd-status.log",
   statusInterval = 5
}

# Synchronisation A ⟶ B
sync {
   default.rsync,
   source = "/home/ziga/A",
   target = "/home/ziga/B",
   delete = true,
   rsync = {
       binary = "/usr/bin/rsync",
       executability = true,
       existing = false,
   }
}

lsyncd是這樣開始的:

lsyncd -nodaemon ~/.config/lsyncd/lsyncd.conf

**注意:**參數-nodemon只是為了在我執行上述命令的終端中為我提供更多資訊。

執行命令後立即進行同步並將文件夾的內容~/A傳輸到文件夾~/B。這沒關係。

根據我的配置文件,我希望如果我刪除一個文件~/B,它不會被刪除~/A,情況也是如此!這是一種通緝行為 - 我想防止意外刪除文件夾中的內容~/A

但是在這一點上,我也希望它lsyncd會檢測到該文件夾~/B缺少一個剛剛刪除的文件,並將通過將失去的文件從復製~/A~/B它在啟動時立即執行的方式再次同步文件夾!但這不會發生。

如何才能做到這一點?

實際上,您有兩個問題可能應該分開處理。我們先來看看第二個,因為它更容易回答:

但在這一點上,我也希望 lsyncd 會檢測到文件夾 ~/B 缺少剛剛刪除的文件,並將通過將失去的文件從 ~/A 複製到 ~/B 再次同步文件夾,就像它在啟動時立即執行的那樣!

使用您的配置,當在target刪除文件時,您不能期望立即做出反應。lsyncd用於inotify監視文件樹中的更改。實際上,在啟動時發生的初始同步之後,它不知道目標發生了什麼。相反,它不時(見下文)呼叫rsync以將樹中的更改反映到目標

理論上,只要目標是本地的,就可以通過以及lsyncd監視目標。但通常情況並非如此。假設目標位於遠端主機上(與您的範例相反)。那麼如何通知遠端目標中的文件被刪除?inotify``lsyncd

不過,這不是問題:下一次lsyncd開始新的同步(通過執行rsync),將再次創建文件。也就是說,雖然對目標上正在刪除的文件沒有立即反應,但該文件將在下一次rsync執行中再次複製。下一次執行發生在原始碼樹(見下文)或啟動rsync時發生一定數量的更改之後。

請注意,您可以通過 配置lsyncd執行同步的頻率rsync。據我了解,有一個預設超時,但另外,如果lsyncd注意到樹(通過inotify)中有 1000 個(預設值)更改,那麼(無論超時如何)它都會執行rsync以一次同步所有這些更改。rsync當然,這比在每次更改後執行要好得多。

所以,來到你的最後一個問題(“如何做到這一點”),它根本無法完成,或者需要一些程式。在每種情況下,您都必須執行一個守護程序來監視目標上的文件系統更改,然後自行執行rsync以將文件從同步到目標,或者在發生此類更改時通知上的另一個守護程序依次執行rsync

但是你就不需要lsyncd更多了,因為有了這些知識,你可能會建構自己的雙向同步系統。

現在讓我們解決您的第一個問題:

根據我的配置文件,我希望如果我刪除 ~/B 中的文件,它不會從 ~/A 中刪除,情況也是如此!

我無法立即說出這裡出了什麼問題;考慮到您的配置,它真的不應該發生。但是,我有一個關於進一步分析的建議:

啟動時lsyncd,添加參數-log Exec。然後您的命令行將顯示為:

lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf

這將記錄所有程序產生的命令行lsyncd(在你的情況下,到終端)。我非常有信心,當您發布這些命令行時,我們可以確定問題(最好是作為原始問題的更新);它們應該顯示如何rsync執行,包括命令行參數。也許我可以幫助分析,但說實話,我不是那麼深入rsync

引用自:https://unix.stackexchange.com/questions/675171