透過慢速連接修補非常大的二進位文件

透過慢速連接修補非常大的二進位文件

出於備份目的,我透過在相對上游的慢速連接上傳輸了一個非常大的二進位檔案(傳輸需要兩週),方法是在已安裝的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 來恢復遠端的檔案。該協議將檔案分成小塊,並自動重新下載哈希值與種子檔案不匹配的區塊。

要使其在私人環境中工作:

  1. 在本機和遠端 BitTorrent 用戶端上停用 DHT。
  2. 在防火牆上開啟本機 Bit-Torrent 連接埠或設定 SSH 連接埠轉送。
  3. 在來源端建立一個種子檔案。不要使用追蹤器。確保客戶端也開始為文件播種。
  4. 備份遠端的檔案。
  5. 將種子檔案複製到遠端並用客戶端開啟。
  6. 將下載位置指向損壞的檔案並選擇選項不開始下載!!如果有的話,也要停用連接到 DHT、對等交換等的選項。
  7. 請客戶重新檢查下載的文件。它應該報告幾乎完成的下載百分比。
  8. 將本機用戶端新增為對等下載
  9. 開始下載

相關內容