Linux

我可以通過http驗證大文件下載嗎

  • October 28, 2017

我正在http通過wget1.2TB 下載一個大文件。下載大約需要一周時間,現在已經包含兩次損壞(md5 檢查失敗,需要幾天時間才能自行執行)。

有沒有一種好方法可以使用 say 通過 http 逐個驗證文件curl?或者將其分成單獨的塊,以便我可以辨識特定的壞塊並重新下載該部分?

該文件是一個tar檔案,所以我相信每個塊的損壞可以在解包過程中按順序辨識。

在伺服器端,您可以使用ddandmd5sum對文件的每個塊進行校驗和:

#!/bin/bash
FILENAME="$1"
FILESIZE=`stat --printf="%s" $FILENAME`
CHUNKSIZE=536870912 # 512MB
CHUNKNUM=0
while ! grep -q 'cannot skip' hash.log 2> /dev/null ; do
   dd if=$FILENAME bs=$CHUNKSIZE skip=$CHUNKNUM count=1 2> hash.log | md5sum >> $FILENAME.md5
   CHUNKNUM=$(( CHUNKNUM + 1 ))
done
rm hash.log

您將得到一個$FILENAME.md5包含所有塊雜湊的文件。

您現在可以下載該大文件和校驗和,在文件上執行此腳本並比較雜湊值。如果任何部分的雜湊值不匹配,您可以使用 curl 僅下載文件的一部分(如果伺服器支持 RANGE)並使用 dd 修補文件。

例如,如果塊 2 得到雜湊不匹配:

curl -s -r 536870912-1073741824 | dd of=somelargetarfile.tar seek=536870912 conv=notrunc

這將下載塊 2,並用它修補大 tar 文件。

引用自:https://serverfault.com/questions/880090