用 aria2 拯救传输错误的文件用 aria2 拯救传输错误的文件
因为有时候用的网络,是按照流量计费的。如果从自己的服务器上传输一个很大的文件回来,却发现文件哈希对不上,你会怎么办(后来才知道其实只是坏了几个字节)?
也许你会想到 BitTorrent 的种子,因为这是带有文件分块的校验码。也许你会说不是有些客户端支持 Web Peer 嘛,但是好像这些都挺麻烦的。这时候就有请 aria2c:
- 支持 BitTorrent,HTTP/HTTPS/FTP/SFTP;
- 可以通过 BitTorrent 协议之外的方式下载种子里的文件;
- 断点续传、多线程。
所以,首先在服务器上用 rhash 计算哈希创建种子文件,然后把种子传输到本地,打开 aria2c 就行。
--torrent-file
指示 aria2 使用种子文件提供的信息,-s10 -x10 -k1M
让其对每个文件用 10 个链接、每个服务器开 10 个链接、最小切块 1MiB,--check-integrity=true
指示其检查现有文件的完整性,--seed-time=0
禁止其下载完成后做种(毕竟只是传输自己的文件罢了)。
1 2 3 4 5 6 7 8 9 10 |
|
其实这个方法,是今天在搜索如何让 aria2 通过 HTTP 下载一个种子的时候突然看到的。当时碰到的页面是 Aria2c with and without using torrent files - Rescuing a failed download,如果你有兴趣,也建议你读一读。
如果你还不知道 aria2,不要再犹豫了,借此机会好好了解一下吧。虽然平常似乎见到最多的地方不是桌面而是路由器上……
顺带一提,aria2 0.19.0 中加入了对 SFTP 的基本支持。只是基本支持,但是也支持通过 SFTP 的多线程和断点续传了,虽然目前还只能用用户名和密码来认证。Homebrew 里的公式还没有更新,不过我是建议你马上就用这个 Homebrew 公式立刻换上崭新的 aria2 0.19.0。所以说刚刚也可以不用 HTTPS 而是利用 SFTP 来更加安全地从服务器上传输文件回来,毕竟 SSH 服务器哪儿都有,HTTP(S) 还得找支持断点续传和支持认证/加密的服务器……
其实用 rsync 也能做到这件事,不过印象中不支持多线程啊,所以我并不喜欢。如果你有需要,可以读一读这篇文章:Force rsync to use delta transfer to fix corrupt remote file:
1 |
|