Axel - многопоточная загрузка дистрибутива

Версия для печатиОтправить другуPDF version

По умолчанию во FreeBSD  для загрузки дистрибутивов в distfiles используется только одно подключение. Соответственно и загрузка идет в один поток. Также довольно часто зеркала ограничивают скорость соединения.  Если необходимо установить один-два порта, то это не является существенной проблемой. А вот когда берешься за новый сервер и необходимо устанавливать много софта, затрачивая минимум времени, тогда и пригодится утилита axel. Axel открывает несколько соединений, каждое из которых загружает свою часть файла, в результате ускоряя время загрузки. Для загрузки используются зеркала, перечисленные в Makefile, или, если они переопределены, в make.conf.

Выполним установку axel из системы портов (пока еще загрузка пойдет в один поток ;)  ):

# cd /usr/ports/ftp/axel && make install clean && rehash

Сборку выполнил с поддержкой NLS - поддержка мультиязычности. 

Следующий шаг - необходимо "подменить" стандартный fetch. Добавим в /etc/make.conf такой блок:

FETCH_CMD=axel
FETCH_BEFORE_ARGS= -n 4 -a
DISABLE_SIZE=yes

где:

  • -n - количество соединений
  • -a - отображать статус загрузки

Доступные для использования ключи:

# axel -h
Usage: axel [options] url1 [url2] [url...]

-s x    Specify maximum speed (bytes per second)
-n x    Specify maximum number of connections
-o f    Specify local output file
-S [x]  Search for mirrors and download from x servers
-H x    Add header string
-U x    Set user agent
-N      Just don't use any proxy server
-q      Leave stdout alone
-v      More status information
-a      Alternate progress indicator
-h      This information
-V      Version information

Visit http://axel.alioth.debian.org/ to report bugs

Чтобы ознакомиться более детально с возможностями доступных опций, рекомендую обратиться к странице руководства.

Проверим, "как это работает"... Выполним, для примера, загрузку дистрибутива PHP:

# cd /usr/ports/lang/php5 && make fetch
===>  License check disabled, port has not defined LICENSE
===>  Found saved configuration for php5-5.2.9
=> php-5.3.9.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://dk.php.net/distributions/php-5.3.9.tar.bz2
Начинаю скачивание: http://dk.php.net/distributions/php-5.3.9.tar.bz2
Размер файла: 11704944 байта(ов)
Открывается выходной файл php-5.3.9.tar.bz2
Начинаем скачивание

[ 54%] [......0      ......1     .......2     .....3      ] [ 230,3KB/s] [00:22]

Вот так... Необходимо вооружиться данным инструментом при настройке следующего сервера. Кстати, ничто не мешает использовать axel для загрузки файлов из сети. Пример загрузки файла:

# axel -n 6 -a http://test.muff.kiev.ua/test.zip
Начинаю скачивание: http://test.muff.kiev.ua/test.zip
Размер файла: 1469583360 байта(ов)
Открывается выходной файл test.zip
Начинаем скачивание
 
[ 61%] [.....0   ...1    .....2   ....3   ....4   ....5   ] [   9,7MB/s] [00:56]

По завершению загрузки имеем небольшой отчет:

# axel -n 6 -a http://test.muff.kiev.ua/test.zip
Начинаю скачивание: http://test.muff.kiev.ua/test.zip
Размер файла: 1469583360 байта(ов)
Открывается выходной файл test.zip
Начинаем скачивание
 
Соединение 2 закончилось                                                       ]
Соединение 0 закончилось                                                       ]
Соединение 3 закончилось                                                       ]
Соединение 1 закончилось                                                       ]
Соединение 4 закончилось                                                       ]
[100%] [..................................................] [   9,7MB/s] [00:00]
 
1401,5 мегабайта(ов) скачано за 2:24 секунд(ы). (9903,02 КБ/с)

Довольно неплохая альтернатива стандартному fetch.

 

Ваша оценка: Нет Средняя: 5 (3 голоса)

Вставай, Україно!

Литература