update 2024.12
1. 简介
aria2 是 Linux 下轻量级的多线程下载工具,支持 Http/Https、Ftp、BitTorrent、Metalink 协议。它比 axel 优秀的地方在于:完全支持 BitTorrent 协议,同时可以作为 BitTorrent 客户端来下载种子文件;支持 Metalink 协议;远程控制(通过 web 端)下载进程。 比起 wget来说, aria2 支持多线程下载,比起 Transmission, aria2 更快,支持的协议更多。不少网友用来下载迅雷离线文件也是不错的选择。
Aria 2 本身是一款纯命令行工具,看来 6 MB 的体积没能容下精心设计的图形界面,但这绝不妨碍它成为一款使用体验上佳的下载器——退一步讲,没有图形界面也算变相避开了广告等无关因素的骚扰吧。Aria 2 支持 BT、磁力链和普通 HTTP(s) / FTP 下载,没能解析 ed2k:// 是个遗憾。作为下载器中的高端货,设置磁盘缓存、支持断点及分段、多线程、远程服务器登录和上下行限速等不在话下,它甚至能够处理 URL 通配符、从多个地址下载/合并同一文件、加载 Cookie / Header、伪装 User Agent 和允许远程控制等等。官网为 https://aria2.github.io/
1.1. 规划
1、下载目录: /home/ivo/Videos
2、配置文件: ~/aria2/aria2.conf
3、session和log: ~/aria2/aria2.session 和 ~/aria2/aria2.log
1.2. 配置文件
# touch /data/aria2.session
# vim /etc/aria2/aria2.conf
## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##
## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/home/ivo/Videos
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=prealloc
# 断点续传
continue=true
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=10
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=5
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=true
## 进度保存相关 ##
# 从会话文件中读取下载任务
input-file=/home/ivo/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/home/ivo/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60
## RPC相关设置 ##
enable-rpc=true
pause=false
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-save-upload-metadata=true
rpc-secure=false
# 启用RPC, 默认:false
#enable-rpc=true
# 允许所有来源, 默认:false
#rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
#rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secure=<taken>
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
## BT/PT下载相关 ##
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=false
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
#peer-id-prefix=-TR2770-
user-agent=Transmission/2.92
#user-agent=netdisk;4.4.0.6;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJia
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=1.0
#作种时间大于30分钟,则停止作种
seed-time=30
# 强制保存会话, 话即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
#下载完成后删除.ara2的同名文件
on-download-complete=/home/ivo/aria2/delete_aria2
#on-download-complete=/home/pi/aria2/rasp.sh
下载完成后自动删除同名的下载完成后删除 .aria2 的同名文件
delete_aria2 的内容
# Delete control file
# Complete delete .aria2 files
rm -f "$3.aria2"
1.3. aria2 命令行基本使用
注意:当源地址存在诸如 &, * 等 shell 的特殊字符,请使用单引号或双引号把 URI 包含起来。
- Download from WEB
# aria2c -c -s 5 http://example.org/mylinux.iso
-c : 断点续传
-s : 使用线程数
- Download from 2 sources
# aria2c http://a/f.iso ftp://b/f.iso
- Download using 2 connections per host
# aria2c -x2 http://a/f.iso
- BitTorrent Magnet URI
# aria2c 'magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C'
- Metalink
# aria2c http://example.org/mylinux.metalink
- Download URIs found in text file
# aria2c -i uris.txt
- BT
# aria2c /tmp/CentOS-6.3-i386-bin-DVD1to2.torrent
# aria2c http://mirrors.163.com/centos/6.6/isos/x86\_64/CentOS-6.6-x86\_64-minimal.torrent
- 断点续传规则
aria2 对断点续传有很好的支持,只需要重新运行一次同样的下载命令即可, 我们加 -c 参数,开启断点续传功能。
# aria2c -c http://mirrors.kernel.org/gnu/gcc/gcc-5.1.0/gcc-5.1.0.tar.gz
\[#575536 12MiB/116MiB(10%) CN:1 DL:878KiB ETA:2m1s\]
04/24 20:50:31 \[NOTICE\] Shutdown sequence commencing... Press Ctrl-C again for emergency shutdown.
04/24 20:50:31 \[NOTICE\] Download GID#5755367ab0bce05b not complete: /tmp/gcc-5.1.0.tar.gz
Download Results:
gid |stat|avg speed |path/URI
\======+====+===========+=======================================================
575536|INPR| 816KiB/s|/tmp/gcc-5.1.0.tar.gz
Status Legend:
(INPR):download in-progress.
aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.
aria2 在下载过程中,我们按下 Ctrl + C 中断进程的执行,那么我们会在此目录下发现 gcc-5.1.0.tar.gz 以及 gcc-5.1.0.tar.gz.aria2 这两个文件。
其中 gcc-5.1.0.tar.gz.aria2 保存这下载的进度信息,当aria2使用同样的命令重新运行时,它会读取这个文件并继续原来的下载。
当然,aria2并不要求一定要是使用完全一直的参数:用户需要指定那些可以找到*.aria2
文件的参数,所有-d选项是很重要的,而URI却不一定与上次相同,只要保证他们指向了同样的文件即可。这意味着你可以用某个URI开始下载,然后使用torrent文件进行续传。
当然如果只存在*.aria2
文件,续传就会被忽略掉。
为了能够成功进行续传,需要考虑到如下的一些情况。 “size known” 表示文件大小在开始下载前是已知的,
如metalink可以提供文件大小“file size match”表示控制文件中的大小与远端(或metalink)的大小相同‘D’表示不关心 ACTION表示在上面的各种情况下aria2会采取的动作
1.4. aria2 使用
aria2 或者 aria2c 通常有两种模式:
1.4.1. 第一种模式:
命令行模式:
直接在命令行下载,比如 aria2c ‘http://host/file.tar.gz’ 这种,然后当下载完成后,就自动退出了,就和wget 的工作方式一样。
1.4.2. 第二种模式:
Daemon模式:
另一种就是 rpc server 模式,特点就是,它启动之后什么都不干,然后等着从rpc接口添加任务,下载完也不退出,而是一直等着。
对,就像迅雷干的那样,当然,它不会上传你硬盘上的数据。因为第一种方式要每次都敲命令,除非像我是原生*nix
,没有命令行就没法用电脑,估计也没什么用,于是常用的就是第二种。
一般启动命令是
# aria2c –enable-rpc –rpc-listen-all=true –rpc-allow-origin-all -c -D
但是,其实这个命令是不好的!不要使用这种启动方式。 默认情况下是没有保存设定的功能的,重启服务或服务器,配置都会丢失。 首先,用命令方式导致配置不方便修改保存,-D导致无法看到出错信息。推荐启动方式是使用配置文件
$HOME/.aria2/aria2.conf
或者
/etc/aria2/aria2.conf
嗯,我知道路由上这个地址是无法修改或者重启后会丢失的,那么你可以放到别的地方,然后
aria2c --conf-path= \-D
注意
-D (用于后台执行,daemon 模式, 这样ssh断开连接后程序不会退出) 只有在确认OK之后在启动脚本中使用。
以下方案都基于配置文件方式
1.5. 图形界面
aria2是没有图形界面的,已知相对好用的图形界面有:
1.5.1. YAAW
另一个web前端 webui-aria2请使用 chrome,firefox 等现代浏览器访问。这两个东西都可以直接使用,除了看英文不爽以外,有什么必要下载回来使用。这两个东西上的配置在重启后都会失效! 使用配置文件保存您的设置
1.5.2. windows下有Aria2c Remote Control
iphone有Aria2 Download Manager图形界面基本都基于RPC模式,所以一定确定开启了RPC,IP端口可访问,并且在管理器中填写了正确的地址。
1.5.3. 配置文件
http://aria2.sourceforge.net/manual/en/html/index.html手册
请将所有配置置于配置文件中只有在确认配置无误后再加上 -D 选项请阅读出错信息!以下的配置文件用到那部分写那部分到配置文件,没用的不用写
1.5.3.1. RPC
需要1.14及以上版本
http://aria2.sourceforge.net/manual/en/html/aria2c.html#rpc-options
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800
如果启动时出现 Initializing EpollEventPoll failed. 或相似错误, 在配置中加上 event-poll=select 使用token验证(建议使用,需要1.18.4以上版本,帐号密码方式将在后续版本中停用!)
1.5.3.2. token验证
rpc-secret=secret
在YAAW中使用 http://token:secret@hostname:port/jsonrpc 的地址格式设置secret.
如果需要使用密码验证(需要1.15.2以上,1.18.6以下版本)
#用户名
rpc-user=username
#密码
rpc-passwd=passwd
在YAAW中使用 http://username:passwd@hostname:port/jsonrpc 的地址格式设置密码.对于RPC模式来说, 界面和后端是分离的, 只要给后端设置密码即可.
前端认证什么的是毫无意义的.如果你比较新潮, 在YAAW中也可以用 ws:// 为前缀,只用websocket连接aria2c, 如果你不知道websocket是什么. 那就算了.
1.5.3.3. 速度相关
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#断开速度过慢的连接,当速度低于某个特定值的时候,放弃下载
#lowest-speed-limit=0
#验证用,需要1.16.1之后的release版本
#referer=\*
1.5.3.4. 进度保存相关
aria2c只有在正常退出时(ctrl-c), 突然断电是无法保存进度的. 在第一次使用的时候会出现会话文件不存在的错误, 手动创建一个空文件即可.
如果您编写的是自动启动脚本, 在启动aria2前加上 touch aria2.session 这句命令.
input-file=/some/where/aria2.session
save-session=/some/where/aria2.session
#定时保存会话,需要1.16.1之后的release版
#save-session-interval=60
保存任务记录:每一个能够被aria2c识别解析并进行下载的任务都有一个唯一的 gid。
保存任务记录的话比较好解决,在配置文件里记得开启save-session-interval=60,再在配置文件末尾另起一行添加force-save=true,断电或重启后任务下载记录都不会丢失的,aria2.session文件也有记录了。
#save-session=/data/aria2.session
#save-session-interval=60
#force-save=true
断点续传:默认情况下,当 aria2 重启后,所有任务记录都会清空,并且不会自动续传
#input-file=/data/aria2.session
#continue=true
1.5.3.5. 磁盘相关
#文件保存路径, 默认为当前启动位置
dir=/some/where
#文件缓存(推荐), 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?),由于大多数其他平台的CPU(路由器)都是32位的,而 aria2 enable-mmap 这个功能就是把整个文件映射到系统上,所以如果下载文件大于4G的话,aria2进程就会被内核杀掉。aria2 官方已提供另一种磁盘缓存,所以此选项基本作废。
#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
#当使用 ext4, btrfs, xfs或者NTFS等文件系统时,作者推荐使用 --file-allocation=falloc,这种方式会在瞬间完成大文件(数G)的空间分配,并且不会带来额外的性能下降。
#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=falloc
1.5.3.6. BT相关
#启用本地节点查找
bt-enable-lpd=true
#添加额外的tracker
#bt-tracker=,…
#单种子最大连接数
#bt-max-peers=55
#强制加密, 防迅雷必备
#bt-require-crypto=true
#当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT
follow-torrent=true
#BT监听端口, 当端口屏蔽时使用
#listen-port=6881-6999
aria2亦可以用于PT下载,
下载的关键在于伪装
#不确定是否需要,为保险起见,need more test
enable-dht=false
bt-enable-lpd=false
enable-peer-exchange=false
#修改特征
user-agent=uTorrent/2210(25130)
peer-id-prefix=-UT2210-
#修改做种设置, 允许做种
seed-ratio=0
#保存会话
force-save=true
bt-hash-check-seed=true
bt-seed-unverified=true
bt-save-metadata=true
#定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2)
#save-session-interval=60
1.6. 启动服务
1.6.1. 脚本启动
--conf-path 指定配置文件路径
-D 以Daemon的方式启动
aria2c --conf-path=~/aria2/aria2.conf -D
# ss -tulpn | grep aria2c
tcp LISTEN 0 1 :::6800 :::* users:(("aria2c",41664,7))
tcp LISTEN 0 1 *:6800 *:* users:(("aria2c",41664,6))
为了方便控制,我们提供启动脚本:
aia2start.sh 如果需要关闭 输入killall aria2c即可
cat aria2start.sh
#!/bin/bash
# Program
# Start aria2 use path address aria2.conf
address=/home/ivo/aria2
aria2c --conf-path="$address"/aria2.conf -D
添加可执行权限
chmod +x ~/aria2/aria2start.sh
另一个网上的例子,上面的配置文件是我自己的
网上copy的一个 aria2.conf 配置,大家可以参考:
mkdir -p /opt/var/log/aria2
mkdir -p /opt/etc/aria2
mkdir -p /tmp/mnt/disca_3/Downloads
touch /opt/etc/aria2/aria2.conf
cat /opt/etc/aria2/aria2.conf
daemon=true
enable-rpc=true
rpc-listen-port=6800
rpc-listen-all=true
####### your download folder, ensure that this folder exist! ##########
dir=/tmp/mnt/disca_3/Downloads
#where is your logfile located
log=/opt/var/log/aria2/aria2.log
log-level=warn
dht-listen-port=6801
auto-save-interval=30
#seed ratio and seed time in minutes
seed-ratio=1.0
seed-time=1460
max-upload-limit=20K
event-poll=select
1.6.2. systemd启动
cat /etc/systemd/system/aria2.service
[Unit]
Description=Aria2 Service
After=network.target
[Service]
ExecStart=/usr/bin/aria2c --conf-path=/srv/backup/aria2/aria2.conf
[Install]
WantedBy=default.target
systemctl daemon-reload
systemctl start aria2.service
systemctl enable aria2
Created symlink /etc/systemd/system/multi-user.target.wants/aria2.service → /etc/systemd/system/aria2.service.
1.7. 常见问题
1.7.1. aria2ng 不能正确使用。
这个问题要看一下,你用的是aria2ng是不是https的。改成http的即可。
1.8. 相关引用
http://www.right.com.cn/forum/thread-115029-1-1.html
http://aria2.ghostry.cn/yaaw-master/
http://aria2.dualwan.cn/webui/index.html
http://binux.github.io/ThunderLixianExporter/
http://blog.binux.me/2012/12/aria2-examples/
http://www.chiphell.com/thread-580013-1-1.html
https://kzpu.com/archives/3620.html
https://owenyk.github.io/2021/06/22/systemctl%E7%AE%A1%E7%90%86%E6%96%B9%E5%BC%8F%E4%B8%8B%E8%AE%BE%E7%BD%AEaria2%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8/#comment-waline