1客戶端發送自己的filelist,filelist包含文件hashindexid(alert32)和關聯的文件chunkChecksum(MD5)和hashindexID以便進行快速查找,chunksize根據文件大小進行等分,不足均值部分直接發送不進行MD5校驗值生成
發送進程一次從生成器讀取一個文件索引號和關聯的塊校驗集合
2對于生成器發送的每個文件ID,它會存儲數據塊校驗和并生成它們的哈希索引,以進行快速查找 。
然后會讀取本地文件,并為以本地文件的第一個字節開頭的數據塊生成校驗和。此數據塊校驗和在由生成器發送的集中查找,如果未找到匹配, 則會將非匹配字節附加到非匹配數據,并且會比較以下一字節開頭的數據塊。 這稱為“rolling checksum”
如果找到數據塊校驗和匹配,則會將它視為匹配塊,所有累積的非匹配數據將被加上在接收端的文件中的匹配數據塊的偏移量和長度之后發送到接收端,并且數據塊校驗和生成器將提前到匹配塊之后的下一字節。
3可以以這種方式標識匹配塊,即使重新排列數據塊的順序或數據塊的偏移量不同。此過程是 rsync 算法的核心。
4將數據從基礎文件復制到臨時文件會使receiver在所有rsync進程中最耗磁盤。小文件可以仍處于緩解此作用的磁盤緩存中,但對于大型文件,由于生成器已移動到其他文件,并且存在sender引起的進一步延遲,緩存可能會"抖動"(thrash)。 數據可能從一個文件隨機讀取,寫入另一文件,如果工作集大于磁盤緩存,則會發生"尋道風暴"(seek storm),進一步影響性能。
原創文章,作者:584641574,如若轉載,請注明出處:http://www.www58058.com/35994