Files
單向同步/增量複製大文件
我在 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 >> datafile.copy'
(當然,在啟動管道之前,您需要檢查遙控器上的文件大小。)
相反,如果您對文件的中間部分進行了修改,那麼您將需要在程序本身中添加某種日誌記錄層。文件系統快照可能會,但一秒鐘的時間間隔可能太難了,尤其是因為無論如何您都需要掃描文件以查找更改。