因为有时候用的网络,是按照流量计费的。如果从自己的服务器上传输一个很大的文件回来,却发现文件哈希对不上,你会怎么办(后来才知道其实只是坏了几个字节)?
也许你会想到 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
禁止其下载完成后做种(毕竟只是传输自己的文件罢了)。
server$ rhash --torrent test.zip
server$ ls test.zip*
test.zip
test.zip.torrent
local$ wget https://example.com/test.zip.torrent
local$ ls test.zip*
test.zip
test.zip.torrent
local$ aria2c --torrent-file=test.zip.torrent -s10 -x10 -k1M --check-integrity=true --seed-time=0 https://example.com/test.zip
其实这个方法,是今天在搜索如何让 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:
rsync -Pa --checksum --inplace --no-whole-file local.file remote.server:
Cool
Interesting thoughts
Nice post! I will follow you from now on.
Congratulations @orzfly! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!