Hashsum
按 64MB 塊散列文件?
我有一個非常大的文件(200GB)。顯然,當我將其轉移過來時,它沒有正確複製。兩者的 sha1 雜湊值不同。有沒有辦法可以將文件分成塊(如 1MB 或 64MB)並為每個塊輸出一個雜湊?然後比較/修復?
我可能只是編寫一個快速應用程序來做到這一點。
那個“快速應用程序”已經存在,並且比較常見:rsync。當然,rsync 會做的遠不止這些,但你想要的很簡單:
rsync -cvP --inplace user@source:src-path-to-file dest-path-to-file # from the destination rsync -cvP --inplace src-path-to-file user@dest:dest-path-to-file # from the source
預設情況下,這將使用 ssh(或者可能是 rsh,在一個非常舊的版本上)來建立連接並傳輸數據。其他方法也是可能的。
我通過的選項是:
-c
— 根據校驗和跳過,而不是文件大小/mtime。預設情況下,rsync 會優化並跳過大小和 mtime 匹配的傳輸。-c
強制它計算校驗和(就 I/O 而言,這是一項昂貴的操作)。注意這是一個基於塊的校驗和(除非你告訴它只做整個文件),它只會傳輸損壞的塊。塊大小是自動選擇的,但可以被覆蓋-B
(我懷疑有任何理由)。-v
— 詳細,將提供一些詳細資訊(它正在處理哪個文件)-P
— 打開兩個部分文件(所以如果它通過一半,它不會丟掉工作)和一個進度條。--inplace
— 更新現有文件,而不是臨時文件(然後將替換原始文件)。使您免於擁有 200GB 的臨時文件。也意味著部分文件,所以這-P
是部分冗餘的。順便說一句:我不確定您是如何進行原始傳輸的,但如果是 sftp/scp,那麼有些地方是非常錯誤的——它們完全可以防止網路上的任何損壞。你真的應該追查原因。有缺陷的 RAM 是一種相對常見的 RAM。