linux 高速下載工具 aria2 的用法
http://wiki.ubuntu.org.cn/Aria2
http://www.debugfs.com/?p=412
aria2是一款輕量型命令列下載工具,它提供了對多協議和多源地址的支援,目前支援的協議包括HTTP(S), FTP, BitTorrent (DHT, PEX, MSE/PE), and Metalink。
aria2可以從多個源地址,並使用多種協議進行下載,並嘗試將下載頻寬利用率最大化。它可以同時從HTTP(S)/FTP 和 BitTorrent下載一份資料,並且將其上傳到bt叢集中。通過Metalink的分塊檢查,aria2可以在下載過程中自動的進行資料校驗。
雖然現在有諸如wget和curl等其他類似產品,但aria2具有兩個獨特的功能:(1)aria2可以從多個源下載檔案(HTTP(S)/FTP/BitTorrent),(2)aria2可以併發的進行多個源地址的下載。這樣使用者將不必等待單個檔案的下載完成,而且aria2會盡可能快的下載。
除aria2外,也有一些其他可以進行分片下載的工具,它們往往按照執行緒數分割檔案,並行下載,換言之,它們不會對未完成的部分進行自適應性重新分片,當整個流程工作正常時,這個策略是可以的,但一旦存在一個執行緒執行非常慢,這樣整個程序就需要等待該執行緒的執行。而aria2可以很好的處理這個情況,它可以將檔案分割成1M大小的分片,當某個執行緒執行特別緩慢時,aria2可以使用更快的執行緒來替換。總之,根據作者的說法,aria2是非常智慧和可靠的。
和最初的aria工具具有一個GTK+介面不同,aria2只提供了命令列介面,從而使得對資源的要求更小。通常它的實體記憶體消耗為4M(HTTP/FTP)到9M(BitTorrent),當進行bt下載且速度為2.8M/s時的cpu消耗約為6%
aria2使用舉例
本篇描述的是aria2的使用示例,更詳盡的描述請見:man page
當源地址存在諸如’&’或’*'等其他shell特殊字元時,請使用單引號或者雙引號將uri包含起來。
在aria2的1.10.0版中,aria2對每臺主機預設使用1個連線和20MB的分塊大小,所以不論在-s引數中指定任何值,他都對一臺主機只會建立一個連線,需要注意的一點是這個限制是針對單個主機的,當指定了多臺主機時,它會對每臺主機建立一個連線。如果要使用1.9.x版中的行為,則要使用-x16 -k1M。另見man頁面的 –max-connection-per-server 和 –min-split-size。
aria2預設會在開始下載前預先分配檔案空間以避免可能的檔案碎片,但這會在部分PC上帶來50%-90%的cpu消耗。當使用環境為比較新的檔案系統,例如ext4,btrfs,xfs或者NTFS時,作者推薦使用–file-allocation=falloc,這種方式會在瞬間完成大檔案(數G)的空間分配並且不會帶來額外的效能下降。
如果你既沒有使用cutting-edge檔案系統,也沒有使用linux,並且很在意系統性能,那麼可以使用–file-allocation=none來關閉檔案的預分配。
如果你忘記了這些引數的全名或者含義,把-h放在選項或者詞的前面,比如aria2c -hcrypt,這樣aria2就會搜尋crypt相關的選項並把他的幫助打印出來,如果aria2發現使用了-h,它會在打印出幫助資訊後停止執行。
基本用法
- 下載一個檔案
在1.10.0版中,aria2對每個host使用一個連線,你可以使用–max-connection-per-server 或 -x來修改
- 使用兩個連線從一個源下載檔案
:
aria2c -x2 http://host/image.iso
Ctrl+c可以中止當前的下載,在同樣的目錄運行同樣的命令可以繼續原來的下載,你設定可以修改uri,如果他們指向的是同一個檔案的話。
- 使用兩個連線下載檔案:
aria2c -s2 http://host/image.iso http://mirror1/image.iso http://mirror2/image.iso
注:如果命令中uri的數量多於-s的值,如本例所示,aria2將會首先使用前兩個uri,將第3個uri作為候補,如果前兩個有一個下載失敗,就會啟用第3個
- 從http或ftp伺服器下載:
aria2c http://host1/file.zip ftp://host2/file.zip
- 從任意源進行並行下載:
aria2c -Z http://host/file1 file2.torrent file3.metalink
如果僅僅指定本地磁碟上的torrent檔案或者metalink,是不需要-Z選項的,如:
aria2c file1.torrent file2.torrent
- 從檔案中讀取目的檔案,並行下載
aria2c -ifiles.txt -j5
注:-j引數指定了併發下載的數量,在輸入檔案中可以包含torrent檔案和metelink
注:輸入檔案中支援新增引數,詳見後續的“輸入檔案”章節 - 退出時儲存出錯/未完成的下載
aria2c -ifiles.txt --save-session=out.txt
當ctrl+c或者aria2自己退出時,所有的錯誤,未完成的下載資訊會儲存到out.txt中,但通過aria2.addTorrent 和 aria2.addMetalink XML-RPC方式增加的下載不會儲存。
後續可以使用該檔案繼續未完成的下載:aria2c -iout.txt
aria2對續傳有很好的支援,只需要重新運行同樣的命令即可,假如通過如下命令進行檔案下載:
aria2c -d /tmp http://localhost/file.gz
當在aria2的下載過程中按下ctrl+c中止了服務執行後,會在/tmp目錄下發現file.gz和file.gz.aria2兩個檔案
$ ls /tmp file.gz file.gz.aria2
其中file.gz.aria2儲存這下載的進度資訊,當aria2使用同樣的命令重新執行時,它會讀取這個檔案並繼續原來的下載。當然,aria2並不要求一定要是使用完全一直的引數:使用者需要指定那些可以找到*.aria2檔案的引數,所有-d選項是很重要的,而URI卻不一定與上次相同,只要保證他們指向了同樣的檔案即可。這意味著你可以用某個URI開始下載,然後使用torrent檔案進行續傳。當然如果只存在*.aria2檔案,續傳就會被忽略掉。
為了能夠成功進行續傳,需要考慮到如下的一些情況
HTTP(S)/FTP/Metalink(without BitTorrent)協議下的續傳
file size known | D | D | D | O | X |
file exists | O | X | O | O | O |
ctrl exists | O | X | O | X | X |
file size match | O | - | X | - | - |
ACTION | R | S | A | B | C |
- “size known” 表示檔案大小在開始下載前是已知的,如metalink可以提供檔案大小
- “file size match”表示控制檔案中的大小與遠端(或metalink)的大小相同
- ‘D’表示不關心
- ACTION表示在上面的各種情況下aria2會採取的動作:
R |
續傳,但如果給定的URI不支援續傳則會失敗 |
S |
重新開始下載 |
A |
取消下載 |
B |
如果–allow-overwrite=true則重新下載,否則取消 |
C |
如果–allow-overwrite=true,則重新下載;如果本地檔案大小與遠端檔案大小一致,則不再下載;如果–auto-file-renaming=true則重新命名檔案;其他情況取消下載 |
BitTorrent下的續傳規則
file exists | O | O | O | X |
ctrl exists | O | O | X | X |
file size match | O | X | - | - |
ACTION | R | A | B | S |
R, A, B, S與剛才介紹的定義一致
BitTorrent相關下載
- 通過遠端BitTorrent檔案下載
aria2c http://site/file.torrent
- 通過遠端BitTorrent檔案下載,但在記憶體中處理
aria2c --follow-torrent=mem http://site/file.torrent
- 通過本地torrent檔案下載:
aria2c -u40K /path/to/file.torrent
注:-u, –max-upload-limit用來指定最大上傳速度
可以同時處理多個torrent檔案aria2c /path/to/file1.torrent /path/to/file2.torrent
- 通過BitTorrent Magnet URI下載:
aria2c "magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C&dn=aria2"
注:需要將magnet的地址用單引號或者雙引號引起來,因為裡面包含’&'字元。當使用magnet時,強烈建議開啟dht選項,–enable-dht
將metadata儲存成.torrent檔案aria2c --bt-save-metadata "magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C&dn=aria2"
這個命令會將metadata資訊儲存在248d0a1cd08284299de78d5c1ed359bb46717d8c.torrent檔案中
- 自動調整peer節點數量
當所有節點的整體下載速度低於某個值時,aria2可以臨時增加節點數量來獲取更快的下載速率
aria2c --bt-request-peer-speed-limit=200K file.torrent
- 開啟DHT
aria2c --enable-dht http://site/file.torrent
注:在1.7.2版本後,dht選項是被預設開啟的。當aria2只處理http/ftp下載時,不會開啟dht選項。當第一個torrent開始下載時,aria2進行DHT功能的初始化,然後一直執行到aria2退出。
- 開啟ipv6的DHT
aria2c --enable-dht6 --dht-listen-port=6881 --dht-listen-addr6=YOUR_GLOBAL_UNICAST_IPV6_ADDR --enable-async-dns6
注:如果aria2在build時沒有使用c-ares,則不需要–enable-async-dns6。aria2在ipv4和ipv6的dht中共享一些埠
- 增加和刪除tracker URI:
下面這個例子將從file.torrent中移除所有的tracker的uri,然後使用”http://tracker1/announce” 和 “http://tracker2/announce”
aria2c --bt-exclude-tracker="*" --bt-tracker="http://tracker1/announce,http://tracker2/announce" file.torrent
- 加密
在預設情況下,aria2可以接收加密/非加密的連線,並且會首先嚐試加密握手,如果失敗才會去使用傳統的BitTorrent握手
下面這個例子中,aria2將只通過加密的握手接受與建立連線。aria2c --bt-require-crypto=true http://site/file.torrent
存在兩種加密方式,頭加密和全連線加密。如果兩種都可以被peer提供,aria2將預設使用頭加密方式。如果要使用全連線加密,可以使用:
aria2c --bt-min-crypto-level=arc4 http://site/file.torrent
- 列印torrent檔案內容
aria2c -S file.torrent
- 通過序號選擇指定檔案下載:
aria2c --select-file=1-4,8 -Tfile.torrent
注:index資訊可以通過-S來獲得
- 修改監聽埠
aria2c --listen-port=6881-6883 file.torrent
注:請確保指定埠可以進行tcp的上行和下行通訊
- 指定aria2完成下載後的停止條件
aria2c --seed-time=120 --seed-ratio=1.0 file.torrent
注:本例中,aria2會在下載完成後120分鐘,或seed ratio達到1.0時退出程式
- 設定上傳速度
aria2c --max-upload-limit=100K file.torrent
- Seeding已經下載完成的檔案
可以使用-V選擇來播種下載完成的檔案,它會首先對檔案進行分片的hash校驗
Seeding already downloaded file
如果可以確定下載檔案的正確性,可以使用–bt-seed-unverified選項來跳過檔案的校驗環節
aria2c --bt-seed-unverified -d/path/to/dir file.torrent
還可以同時播種多個torrent檔案
aria2c --bt-seed-unverified -d/path/to/dir file1.torrent file2.torrent
- 通過index指定檔名
為了指定bt下載的檔名稱,需要使用-S選線來檢視torrent檔案中的index資訊,例如:
idx|path/length
-
===+======================
-
1|dist/base-2.6.18.iso
-
|99.9MiB
-
---+----------------------
-
2|dist/driver-2.6.18.iso
-
|169.0MiB
-
---+----------------------
下面的命令可以將dist/base-2.6.18.iso 儲存為 /tmp/mydir/base.iso,同時將dist/driver-2.6.18.iso 儲存成 /tmp/dir/driver.iso
aria2c --dir=/tmp --index-out=1=mydir/base.iso --index-out=2=dir/driver.iso file.torrent
注:當對http uri中的torrent檔案使用–index-out是不成功,它只對本地的torrent檔案有效。aria2也不會去記憶–index-out選項內容,在每次的繼續下載或播種時都需要手工指明,而且如果沒有該選項,它也不會給使用者任何提醒,所以需要注意。
- 為進行檔案預覽進行分片優先下載
優先下載torrent中所有檔案的前1MB
aria2c --bt-prioritize-piece=head file.torrent