aria2 (简体中文)

From ArchWiki

翻译状态:本文是 Aria2翻译。上次翻译日期:2021-12-11。如果英文版本有所更改,则您可以帮助同步翻译。

来自 aria2 主页:

aria2 是一个轻量级多协议多源命令行下载工具,支持 HTTP/HTTPSFTPBitTorrentMetalink。用户可以通过内置的 JSON-RPCXML-RPC 接口操作 aria2。

安装

安装 aria2 软件包。

要以守护进程运行 aria2,你可以写一个 systemd 用户单元

配置

aria2.conf

aria2 默认从 $XDG_CONFIG_HOME/aria2/aria2.conf 中寻找全局配置,该行为可以通过 --conf-path 选项改变:

  • 下面的示例用配置文件 /file/aria2.rapidshare 中的选项下载 aria2.example.rar
$ aria2c --conf-path=/file/aria2.rapidshare http://rapidshare.com/files/12345678/aria2.example.rar

如果存在 $XDG_CONFIG_HOME/aria2/aria2.conf,但希望使用 /file/aria2.rapidshare 中的选项,需要在命令中加入 --no-conf 选项:

  • 若不使用默认的配置文件,只使用 /file/aria2.rapidshare 中的选项下载 aria2.example.rar
$ aria2c --no-conf --conf-path=/file/aria2.rapidshare http://rapidshare.com/files/12345678/aria2.example.rar

如果不存在 $XDG_CONFIG_HOME/aria2/aria2.conf,并且你想要简化配置管理:

$ touch $XDG_CONFIG_HOME/aria2/aria2.conf

示例 aria2.conf

continue
dir=${HOME}/Desktop
file-allocation=none
input-file=${HOME}/.aria2/input.conf
log-level=warn
max-connection-per-server=4
min-split-size=5M
on-download-complete=exit

这与执行下面的命令等价:

$ aria2c --dir=${HOME}/Desktop --file-allocation=none --input-file=${HOME}/.aria2/input.conf --on-download-complete=exit --log-level=warn FILE
注意: 上面示例 aria.conf 可能错误地使用了 $HOME 变量,一些用户报告说,使用花括号语法会在 aria2 的工作目录下创建名叫 ${HOME} 的文件夹。因为 bash 会把 $HOME 当成环境变量,这样的文件夹很难访问。目前建议在 aria2.conf 中使用绝对路径。

选项细节

  • continue: 如果存在下载任务对应的控制文件,自动继续未完成的下载任务。
  • dir=${HOME}/Desktop: 在 ~/Desktop 中存储下载文件。
  • file-allocation=none: 不要在下载开始前预分配磁盘空间(默认值:prealloc1
  • input-file=${HOME}/.aria2/input.conf: 从 ~/.aria2/input.conf 中的 URI 下载文件,URI 以 TAB 分割。
  • log-level=warn: 设置日志级别,只输出警告和错误。(默认值:debug)
  • max-connection-per-server=4: 设置每个服务器的最大链接数为 4。(默认值:1)
  • min-split-size=5M: 只在文件大小超过 2*5MB = 10MB 时分割文件。(默认值: 20M)
  • on-download-complete=exit: 当下载任务完成时,运行 exit 命令并退出 shell。
示例输入文件 #1

从两个分别的地址下载 aria2-1.10.0.tar.bz2~/Desktop,并合并为 aria2-1.10.0.tar.bz2

http://aria2.net/files/stable/aria2-1.10.0/aria2-1.10.0.tar.bz2    http://sourceforge.net/projects/aria2/files/stable/aria2-1.10.0/aria2-1.10.0.tar.bz2
示例输入文件 #2

下载 aria2-1.9.5.tar.bz2,命名为 aria2.old.tar.bz2 ,保存到 /file/old

http://aria2.net/files/stable/aria2-1.9.5/aria2-1.9.5.tar.bz2
  dir=/file/old
  out=aria2.old.tar.bz2
  

下载 aria2-1.10.0.tar.bz2,命名为 aria2.new.tar.bz2,保存到 ~/Desktop

http://aria2.net/files/stable/aria2-1.10.0/aria2-1.10.0.tar.bz2
  out=aria2.new.tar.bz2

备注

1 --file-allocation=falloc: 推荐在新的文件系统,比如 ext4 (具有 extents 支持的)、btrfs 或者 XFS 上,使用这个选项,因为它们几乎可以瞬间分配 GB 级别的大文件。不要在传统的文件系统,比如 ext3 上,使用 falloc,因为预分配会消耗与正常分配相同的时间,还会阻塞 aria2 下载。

提示: 要查看完整的配置选项,参见 aria2c --help=#allaria2c(1) § OPTIONS

示例 aria2.rapidshare

http-user=USER_NAME
http-passwd=PASSWORD
allow-overwrite=true
dir=/file/Downloads
file-allocation=falloc
enable-http-pipelining=true
input-file=/file/input.rapidshare
log-level=error
max-connection-per-server=2
summary-interval=120

选项细节

  • http-user=USER_NAME: 设置 HTTP 用户名为 USER_NAME。这会影响所有的 URI
  • http-passwd=PASSWORD: 设置 HTTP 密码为 PASSWORD。这会影响所有的 URI。
  • allow-overwrite=true: 如果控制文件不存在,重新下载。(默认值:false)
  • dir=/file/Downloads: 存储下载文件到 /file/Downloads
  • file-allocation=falloc: 在下载开始前,调用 posix_fallocate(3) 分配磁盘空间。(默认值:prealloc)
  • enable-http-pipelining=true: 启用 HTTP/1.1 流水线来降低网络延迟的影响,并减少数据用量。(默认值:false)
  • input-file=/file/input.rapidshare: 从 /file/input.rapidshare 中的 URI 下载文件,URI 以 TAB 分割。
  • log-level=error: 设置日志级别,只输出错误。(默认值:debug)
  • max-connection-per-server=2: 设置每台服务器每个文件的最大链接数为 2。(默认值:1)
  • summary-interval=120: 每 120 秒输出下载进度汇总。(默认值:60)2

备注

  • 因为 aria2.rapidshare 包含用户名和密码,建议将该文件权限设置为 600 或类似的权限。
$ cd /file
$ chmod 600 /file/aria2.rapidshare
$ ls -l
total 128M
-rw------- 1 arch users  167 Aug 20 00:00 aria2.rapidshare

2 summary-interval=0: 不显示下载进度汇总,可以提高总体性能。日志仍然会按照 log-level 选项的配置输出。

提示: 示例的配置文件可以用于HotfileDepositFiles 等网站。
注意: 命令行选项永远优先于配置文件中的选项。

示例 aria2.bittorrent

bt-seed-unverified
max-overall-upload-limit=1M
max-upload-limit=128K
seed-ratio=5.0
seed-time=240

选项细节

  • bt-seed-unverified=false: 在做种前不检查文件哈希。(默认值:true)
  • max-overall-upload-limit=1M: 设置全局最大上传速度为 1MB/sec。(默认值:0)
  • max-upload-limit=128K: 设置每个种子的最大上传速度为 128K/sec。(默认值:0)
  • seed-ratio=5.0: 下载完成后持续做种直到分享率达到 5.0。(默认值:1.0)
  • seed-time=240: 下载完成后做种 240 分钟。
注意: 如果同时设置了 seed-ratioseed-time,当至少一个条件满足时就会停止做种。

示例 aria2.daemon

这个配置可以用于以服务启动的 aria2。可以与下面的前端一起使用。注意 rpc-user 与 rpc-pass 选项已经被弃用,但许多前端还不支持新的认证系统。记得修改用户名、密码和下载目录。

continue
daemon=true
dir=/home/aria2/Downloads
file-allocation=falloc
log-level=warn
max-connection-per-server=4
max-concurrent-downloads=3
max-overall-download-limit=0
min-split-size=5M
enable-http-pipelining=true

enable-rpc=true
rpc-listen-all=true
rpc-user=rpcuser
rpc-passwd=rpcpass

前端

注意: 前端的设置不会影响 aria2 本身的配置,不确定不同的前端是否会在提供了自定义配置时,复用 aria2 的配置。用户应当确认选择的工具能效实现,并能持久保存配置。(比如 uGet 提供了自己的 aria2 命令行,并且会在重启间保存配置)。

Web UIs

注意: 这些前端需要 aria2c--enable-rpc 选项启动。它们应该在你本地的设备,而不是远程服务器上运行。
  • Webui — Aria2 的 Html 前端。
https://github.com/ziahamza/webui-aria2 || webui-aria2AUR
  • aria2rpc — 用于连接远程 aria2c 实例的命令行工具。如果安装了 aria2c,该程序可以在 /usr/share/doc/aria2/xmlrpc/aria2rpc 下找到。
https://github.com/tatsuhiro-t/aria2/blob/master/doc/xmlrpc/aria2rpc || aria2

其他 UIs

注意: 这些前端不需要 aria2c--enable-rpc 选项启动。
  • aria2fe — 一个命令行下载工具 aria2 的 GUI。
https://sourceforge.net/projects/aria2fe/ || aria2feAUR
  • Persepolis — Aria2 下载管理器的图形前端,具有许多功能,支持 HTTP 和 FTP。
https://github.com/persepolisdm/ || persepolis, persepolis-gitAUR
  • uGet — 功能丰富的 GTK/CLI 下载管理器,可以通过内置的插件,使用 aria2 作为后端。
https://ugetdm.com || uget

提示与技巧

下载但不安装软件包

只需要用下面的命令:

# pacman -Sp packages | aria2c -i -

pacman -Sp 在标准输出里打印软件包的 URL,而不是下载它们,然后用 | 管道传给下一个命令。最后,aria2c -i - 里的 -i 意味着下载文件的 URL 应该从文件里指定。但如果传入了 -,就从 stdin 里读取 URL。

pacman XferCommand

参见 pacman (简体中文)/Tips and tricks (简体中文)#使用aria2.

改变 User Agent

一些站点会根据你的 User Agent 过滤请求,由于 aria2 并不出名,使用主流下载器或浏览器的 User Agent 可能会更好。只需要像这样使用 -U 选项:

$ aria2c -UWget http://some-url-to-download/file.xyz

你可以任意指定 User Agent,比如 -UMozilla/5.0 等。

在 makepkg 中使用 aria2

你可以使用 aria2 代替 curl 来下载源文件,只需要像下面一样更改 DLAGENTS 变量:

/etc/makepkg.conf
[...]
DLAGENTS=('ftp::/usr/bin/aria2c -UWget -s4 %u -o %o'
          'http::/usr/bin/aria2c -UWget -s4 %u -o %o'
          'https::/usr/bin/aria2c -UWget -s4 %u -o %o'
          'rsync::/usr/bin/rsync --no-motd -z %u %o'
          'scp::/usr/bin/scp -C %u %o')
[...]
注意:-UWget 选项改变 user agent 为 Wget,可以防止下载文件时,站点根据不同的 user agent 提供不同的响应。由于 aria2 不是著名的下载器,可能会被站点识别为浏览器而不是下载器,所以使用 Wget 的 user agent 可以在大多数情况下解决问题。

作为守护进程使用 aria2

要使用 aria2 作为守护进程,你可以 写一个systemd用户单元。比如:

~/.config/systemd/user/aria2cd.service
[Unit]
Description=aria2 Daemon

[Service]
Type=simple
ExecStart=/usr/bin/aria2c --conf-path=/path/to/conf

[Install]
WantedBy=default.target

#示例 aria2.daemon 展示了配置文件示例。

使用 aria2 做种

要做种下载好的种子,使用 --check-integrity 选项:

$ aria2c --check-integrity=true --seed-ratio=0.0 --dir="/path/to/iso" "/path/to/torrent/archlinux-2020.03.01-x86_64.iso.torrent"

指定 --seed-ratio=0.0 选项可以永久做种。

另请参见