我使用 wget 下载了 lubuntu 镜像,文件大小为 694MB,但实际下载的文件大小为 789MB。当我执行 wget -c 时,它显示文件已下载。但文件大小比给出的要大 100MB。
下载的文件大小可以在这里看到:
-rw-rw-r-- 1 alex alex 98537904 Jun 1 2011 R284575.exe
-rw-rw-r-- 1 alex alex 4928 Sep 25 11:06 wget-log
-rw-rw-r-- 1 alex alex 827390116 Sep 25 11:06 lubuntu-14.04-desktop-amd64.iso
-rw-rw-r-- 1 alex alex 148598 Sep 25 11:44 lubuntu-14.04-desktop-amd64.iso.1
在这里我们可以看到当开始新的下载时 lubuntu 镜像的大小
wget--limit-rate=40k http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/lubuntu-14.04-desktop-amd64.iso
wget--limit-rate=40k: command not found
alex@dracula:~/Downloads$ wget http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/lubuntu-14.04-desktop-amd64.iso
--2014-09-25 11:44:45-- http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/lubuntu-14.04-desktop-amd64.iso
Resolving cdimage.ubuntu.com (cdimage.ubuntu.com)... 91.189.92.174, 2001:67c:1360:8c01::20
Connecting to cdimage.ubuntu.com (cdimage.ubuntu.com)|91.189.92.174|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 727711744 (694M) [application/x-iso9660-image]
Saving to: ‘lubuntu-14.04-desktop-amd64.iso.1’
0% [ ] 1,44,218 20.8KB/s eta 9h 29m
^C
我该如何解决这个问题?我确信我可以从下载的文件中检索所需的文件。有人能告诉我这个方向吗?
答案1
一些评论:
a)网络服务器通过http标头条目告诉您(如果它是一个好的网络服务器)即将传输的内容长度。参见:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13这可能是事实,也可能不是。
b) 如果网络服务器在达到内容长度后没有停止发送数据,那么网络服务器要么对内容长度撒了谎,要么做了其他事情。
c) 你的 wget 和网络服务器之间的一些相关方篡改了数据。
所以,我至少会使用“https”来使c)变得更加困难。
文件列表http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/sha256sum downloaded_file
显示服务器本身认为内容长度约为 694mb。检查下载的文件是否与服务器上的文件完全相同(按位)的唯一有效方法是对照http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/SHA256SUMS
你也可以尝试那里的 torrent 版本,或者你也可以尝试 zsync-links(例如,http://cdimage.ubuntu.com/lubuntu/releases/14.04/release/lubuntu-14.04-desktop-amd64.iso.zsync)。什么是 zsync?好吧:http://zsync.moria.org.uk/
“zsync 是一个文件传输程序。它允许您从远程服务器下载文件,您的计算机上已经有该文件旧版本的副本。zsync 仅下载文件的新部分。”
为了“我确信我可以从下载的文件中检索所需的文件”,您必须确保您下载的数据至少“一些块”等于原始文件的某些块。那么,如何测试呢?您对下载文件的块进行校验,并与原始文件的块的校验和进行检查。恭喜,您已经重新发明了 rsync 协议,这就是 zsync 所使用的(仅下载丢失的块)。