dav*_*s21 5 linux files http curl large-data
我正在http通过wget1.2TB下载一个大文件。下载大约需要一个星期,现在已经包含了两次损坏(md5 检查失败,它需要数天才能自行运行)。
有没有一种好方法可以使用 say 来通过 http 验证文件的零碎curl?或者将其分解为单独的块,以便我可以识别特定的坏块并仅重新下载该部分?
该文件是一个tar档案,所以我相信在解包过程中可以按顺序识别每个块的损坏。
在服务器端,您可以使用dd和md5sum来校验文件的每个块:
#!/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
Run Code Online (Sandbox Code Playgroud)
您将只剩下一个$FILENAME.md5包含所有块哈希的文件。
您现在可以下载该大文件和校验和,在文件上运行此脚本并比较哈希值。如果任何部分的哈希不匹配,您可以使用 curl 仅下载文件的一部分(如果服务器支持 RANGE)并使用 dd 修补文件。
例如,如果块 2 出现哈希不匹配:
curl -s -r 536870912-1073741824 | dd of=somelargetarfile.tar seek=536870912 conv=notrunc
Run Code Online (Sandbox Code Playgroud)
这将下载块 2,并用它修补大的 tar 文件。
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |