Linux
僅使用新文件中的更改更新庫文件
讓我們假設以下場景,兩台 Linux 電腦 A 和 B 通過一個特殊的硬體無線電鏈路連接,該鏈路並不總是可用的。兩個 Raspberry Pi 可能就是這種情況。沒有一台電腦可以訪問網際網路。
Linux A 有一個名為 libabc.so 的庫,大小為 1GB,Linux B 有同一個庫的原始碼。假設 Linux B 中的某個使用者更改了原始碼中的單個常量並重新編譯了庫。
是否有任何方法或工具可以將更新從 Linux B 發送到 Linux A 而無需發送整個 1GB 的重新編譯文件?
我正在考慮以
git
某種方式使用,但它不儲存非文本文件的增量更改。據我了解rsync
,也會同步整個文件。在這兩種情況下,無論如何我都無法通過無線電連結輕鬆訪問另一台電腦中的文件系統。所以在這兩種情況下都會發送 1GB 的數據。另一種解決方案是在 Linux A 上複製和更新原始碼,但編譯需要時間,而 Linux B 的性能要好得多。最後一個解決方案是自己編寫一個像這樣的輕量級工具。但我懷疑已經有一些可用的東西了。
據我了解
rsync
,也會同步整個文件。它將同步文件。但預設行為(對於網路傳輸)不是在文件已經存在的情況下發送整個數據,而是計算和比較滾動塊校驗和。如果存在共性,這會減少必鬚髮送的數據。
如果不跳過文件,則接收方的任何現有版本都將成為傳輸的“基礎文件”,並用作數據源,有助於消除發送方必鬚髮送的匹配數據。為了實現數據的這種遠端匹配,為基礎文件創建塊校驗和,並在文件的索引號之後立即發送給發送者。
…
如果發現塊校驗和匹配,則將其視為匹配塊,並且任何累積的不匹配數據將被發送到接收器,然後是匹配塊的接收器文件中的偏移量和長度,並且塊校驗和生成器將被推進到匹配塊之後的下一個字節。