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

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ab6253954c4f83eb0095f15780adb838' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">По умолчанию во&nbsp;<strong>FreeBSD&nbsp;</strong>&nbsp;для загрузки дистрибутивов в <strong>distfiles</strong> используется только одно подключение. Соответственно и загрузка идет в один поток. Также довольно часто зеркала ограничивают скорость соединения.&nbsp; Если необходимо установить один-два порта,&nbsp;то это не является существенной проблемой. А вот когда берешься за новый сервер и необходимо устанавливать много софта,&nbsp;затрачивая минимум времени,&nbsp;тогда и пригодится утилита&nbsp;<strong>axel</strong>. <strong>Axel</strong> открывает несколько соединений,&nbsp;каждое из которых загружает свою часть файла, в результате ускоряя время загрузки. Для загрузки используются зеркала,&nbsp;перечисленные в <strong>Makefile</strong>, или, если они переопределены,&nbsp;в <strong>make.conf</strong>.</p>\n<p class=\"rtejustify\">Выполним установку <strong>axel</strong> из системы портов (пока еще загрузка пойдет&nbsp;в один поток ;)&nbsp; ):</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>cd /usr/ports/ftp/axel &amp;&amp; make install clean &amp;&amp; rehash</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Сборку выполнил с поддержкой NLS - поддержка мультиязычности.&nbsp;</p>\n<p class=\"rtejustify\">Следующий шаг - необходимо &quot;подменить&quot; стандартный <strong>fetch</strong>. Добавим в <strong>/etc/make.conf</strong> такой блок:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>FETCH_CMD=axel<br />\n FETCH_BEFORE_ARGS= -n 4 -a<br />\n DISABLE_SIZE=yes</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">где:</p>\n<ul>\n<li>-<strong>n</strong> - количество соединений</li>\n<li>-<strong>a</strong> - отображать статус загрузки</li>\n</ul>\n<p>Доступные для использования ключи:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># <strong>axel -h</strong></div>\n<pre>\nUsage: axel [options] url1 [url2] [url...]\n\n</pre><pre>\n-s x Specify maximum speed (bytes per second)\n-n x Specify maximum number of connections\n-o f Specify local output file\n-S [x] Search for mirrors and download from x servers\n-H x Add header string\n-U x Set user agent\n-N Just don\'t use any proxy server\n-q Leave stdout alone\n-v More status information\n-a Alternate progress indicator\n-h This information\n-V Version information\n\n</pre><pre>\nVisit <a href=\"http://axel.alioth.debian.org/\">http://axel.alioth.debian.org/</a> to report bugs</pre></td>\n</tr>\n</tbody>\n</table>\n<p>Чтобы ознакомиться более&nbsp;детально&nbsp;с возможностями доступных опций,&nbsp;рекомендую обратиться к странице руководства.</p>\n<p>Проверим,&nbsp;&quot;как это работает&quot;... Выполним, для примера,&nbsp;загрузку дистрибутива PHP:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># <strong>cd /usr/ports/lang/php5 &amp;&amp; make fetch</strong></div>\n<pre>\n===&gt; License check disabled, port has not defined LICENSE\n===&gt; Found saved configuration for php5-5.2.9\n=&gt; php-5.3.9.tar.bz2 doesn\'t seem to exist in /usr/ports/distfiles/.\n=&gt; Attempting to fetch <a href=\"http://dk.php.net/distributions/php-5.3.9.tar.bz2\" title=\"http://dk.php.net/distributions/php-5.3.9.tar.bz2\">http://dk.php.net/distributions/php-5.3.9.tar.bz2</a>\nНачинаю скачивание: <a href=\"http://dk.php.net/distributions/php-5.3.9.tar.bz2\" title=\"http://dk.php.net/distributions/php-5.3.9.tar.bz2\">http://dk.php.net/distributions/php-5.3.9.tar.bz2</a>\nРазмер файла: 11704944 байта(ов)\nОткрывается выходной файл php-5.3.9.tar.bz2\nНачинаем скачивание\n\n</pre><pre>\n[ 54%] [......0 ......1 .......2 .....3 ] [ 230,3KB/s] [00:22]</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Вот так... Необходимо вооружиться данным инструментом при настройке следующего сервера. Кстати,&nbsp;ничто не мешает использовать axel для загрузки файлов из сети. Пример загрузки файла:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># <strong>axel -n 6 -a </strong><strong>http://test.muff.kiev.ua/test.zip</strong></div>\n<div>\n Начинаю скачивание: <a href=\"http://test.muff.kiev.ua/test.zip\" title=\"http://test.muff.kiev.ua/test.zip\">http://test.muff.kiev.ua/test.zip</a><br />\n Размер файла: 1469583360 байта(ов)<br />\n Открывается выходной файл test.zip<br />\n Начинаем скачивание</div>\n<div>&nbsp;</div>\n<div>[ 61%] [.....0&nbsp;&nbsp; ...1&nbsp;&nbsp;&nbsp; .....2&nbsp;&nbsp; ....3&nbsp;&nbsp; ....4&nbsp;&nbsp; ....5&nbsp;&nbsp; ] [&nbsp;&nbsp; 9,7MB/s] [00:56]</div>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">По завершению загрузки имеем небольшой отчет:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># <strong>axel -n 6 -a </strong><strong>http://test.muff.kiev.ua/test.zip</strong></div>\n<div>\n Начинаю скачивание: <a href=\"http://test.muff.kiev.ua/test.zip\" title=\"http://test.muff.kiev.ua/test.zip\">http://test.muff.kiev.ua/test.zip</a><br />\n Размер файла: 1469583360 байта(ов)<br />\n Открывается выходной файл test.zip<br />\n Начинаем скачивание</div>\n<div>&nbsp;</div>\n<div>Соединение 2 закончилось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />\n Соединение 0 закончилось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />\n Соединение 3 закончилось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />\n Соединение 1 закончилось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />\n Соединение 4 закончилось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />\n [100%] [..................................................] [&nbsp;&nbsp; 9,7MB/s] [00:00]</div>\n<div>&nbsp;</div>\n<div>1401,5 мегабайта(ов) скачано за 2:24 секунд(ы). (9903,02 КБ/с)</div>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Довольно неплохая альтернатива&nbsp;стандартному <strong>fetch</strong>.</p>\n<p class=\"rtejustify\">&nbsp;</p>\n', created = 1767379131, expire = 1767465531, headers = '', serialized = 0 WHERE cid = '2:ab6253954c4f83eb0095f15780adb838' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767379131, expire = 1767465531, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767379131, expire = 1767465531, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другу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.

 

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

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

Литература

Резистор на 2 килобайта.