Files

單向同步/增量複製大文件

  • March 9, 2017

我在 Linux 伺服器上有一個二進製文件,該文件正被程序主動附加(用 C 編寫,帶有不斷打開的文件處理程序並將非 ASCII 緩衝區刷新到該文件)。我想將此文件複製到另一台伺服器而不鎖定寫入(C 程序),最好不要每次都複製整個文件(文件大小 ~1+GB 和複製頻率 < 1 秒)。

我已經探索了以下內容: rsync:我相信 rsync 會進行完全複製,但不會進行增量複製。

elasticsearch的filebeat:它需要ASCII文本和換行符(我都沒有)。

我更願意利用標準的 Linux 工具,但我願意接受任何其他 3rd 方解決方案或自己創建 C 程序 :)。

如果它只是被附加到(而不是在中間修改),你可以tail -f在它上面執行。它應該等待任何新添加的數據並列印它,您可以告訴它從哪個位置開始:

tail -c 0 -f datafile        # start at the current file end
tail -c +123 -f datafile     # start at byte 123 

要將數據實際移動到某處,管道ssh應該可以工作:

因此,如果遠端端已經有前 123456 個字節:

tail -c +123456 -f datafile | ssh user@somehost 'cat &gt;&gt; datafile.copy'

(當然,在啟動管道之前,您需要檢查遙控器上的文件大小。)


相反,如果您對文件的中間部分進行了修改,那麼您將需要在程序本身中添加某種日誌記錄層。文件系統快照可能會,但一秒鐘的時間間隔可能太難了,尤其是因為無論如何您都需要掃描文件以查找更改。

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