Linux
我可以通過http驗證大文件下載嗎
我正在
http
通過wget
1.2TB 下載一個大文件。下載大約需要一周時間,現在已經包含兩次損壞(md5 檢查失敗,需要幾天時間才能自行執行)。有沒有一種好方法可以使用 say 通過 http 逐個驗證文件
curl
?或者將其分成單獨的塊,以便我可以辨識特定的壞塊並重新下載該部分?該文件是一個
tar
檔案,所以我相信每個塊的損壞可以在解包過程中按順序辨識。
在伺服器端,您可以使用
dd
andmd5sum
對文件的每個塊進行校驗和:#!/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 文件。