
出於備份目的,我透過在相對上游的慢速連接上傳輸了一個非常大的二進位檔案(傳輸需要兩週),方法是在已安裝的cifs-share 上進行rsync(這樣我就可以按區塊方式訪問它)。兩週後,rsync 顯示錯誤(不幸的是無法儲存),但檔案大小相符。
tail -c 1000000000 myfile.img|md5sum # and
head -c 1000000000 myfile.img|md5sum
匹配,因此文件的開頭和結尾相同。
由於我的下游速度要快得多,因此我再次下載了完整圖像並對整個圖像進行了 md5 求和,但這些不匹配。因此,顯然,1.5TB 中的某個地方至少有一點不同。
有沒有辦法從我下載的兩個文件中生成“補丁”,然後將其應用到遠端文件上,以便只需要再次傳輸錯誤的區塊?
請再次注意:我沒有能力遠端執行程式碼或使用需要遠端執行 rsync 的 rsync 功能。我想我仍然可以使用 rsync,它的工作原理與我的下載速率相當,但我想知道是否有更好的方法來利用我本地有兩個版本的事實。寫一些東西可能並不難,但我更喜歡使用經過測試的東西並保存工作。
答案1
(假設是 Linux)如果您認為只有一個或多個資料塊被損壞,但區塊的大小沒有改變,那麼您可以使用cmp -l
.它逐字節比較並-l
給出任何差異的偏移量。如果您對從文件中的何處開始有一個模糊的想法,您可以從-i
.當偏移量錯誤時,您可以dd skip=...
將其從原始檔案中剪下來,然後dd seek=... conv=notrunc
將其貼到損壞的檔案中。 (先在副本上測試)
答案2
我會使用 BitTorrent 來恢復遠端的檔案。該協議將檔案分成小塊,並自動重新下載哈希值與種子檔案不匹配的區塊。
要使其在私人環境中工作:
- 在本機和遠端 BitTorrent 用戶端上停用 DHT。
- 在防火牆上開啟本機 Bit-Torrent 連接埠或設定 SSH 連接埠轉送。
- 在來源端建立一個種子檔案。不要使用追蹤器。確保客戶端也開始為文件播種。
- 備份遠端的檔案。
- 將種子檔案複製到遠端並用客戶端開啟。
- 將下載位置指向損壞的檔案並選擇選項不開始下載!!如果有的話,也要停用連接到 DHT、對等交換等的選項。
- 請客戶重新檢查下載的文件。它應該報告幾乎完成的下載百分比。
- 將本機用戶端新增為對等下載
- 開始下載