Багатопотокове завантаження файлів для Linux | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Багатопотокове завантаження файлів для Linux

Коли великий файл завантажується з одного HTTP- або FTP-сервера за допомогою звичайного інструмента, такого як curl або wget, відкривається одне TCP-з'єднання, і файл завантажується послідовно. У швидкій мережі швидкість може бути обмежена лімітом сервера на одне з'єднання, повільним стартом TCP або затримкою передавання даних туди й назад. Інструменти для паралельного завантаження одночасно відкривають кілька з'єднань до одного джерела, кожне з яких отримує окремий діапазон байтів, а потім локально об'єднують отримані частини. Це працює лише в тому випадку, якщо сервер підтримує HTTP-запити з указанням діапазону (відповідає статусом HTTP 206 Partial Content); на серверах, які це підтримують, результатом часто є помітно швидше передавання порівняно з інструментом, що використовує одне з'єднання.

У цій статті термін «багатопотокове завантаження» означає саме такий підхід із паралельними з'єднаннями, а не використання потоків усередині самого процесу завантаження.

У статті розглядаються два такі інструменти для Linux: Axel та aria2.

Axel

Axel — це легкий інструмент командного рядка для завантаження файлів. Він відкриває кілька з'єднань з одним джерелом і паралельно завантажує різні діапазони байтів. Підтримує HTTP, HTTPS, FTP та FTPS, а також дає змогу продовжити перерване завантаження.

Встановлення Axel

У Debian та Ubuntu:

sudo apt install axel

У RHEL, CentOS Stream, AlmaLinux та Rocky Linux спочатку увімкніть EPEL:

sudo dnf install epel-release sudo dnf install axel

У Fedora:

sudo dnf install axel

Використання Axel

Базове завантаження:

axel https://nl.lg.introserv.eu/1000MB.test

Прапорець -a вмикає компактний індикатор прогресу:

axel -a https://nl.lg.introserv.eu/1000MB.test

Обмежити максимальну швидкість завантаження в байтах за секунду можна за допомогою -s (або --max-speed). Наприклад, щоб обмежити швидкість до 500 КБ/с:

axel --max-speed=512000 https://nl.lg.introserv.eu/1000MB.test

Зберегти файл під іншим ім'ям можна за допомогою -o:

axel -o gigabyte.test https://nl.lg.introserv.eu/1000MB.test

Кількість паралельних з'єднань можна встановити за допомогою -n:

axel -n 10 https://nl.lg.introserv.eu/1000MB.test

Продовжити частково завантажений файл можна за допомогою -c:

axel -c https://nl.lg.introserv.eu/1000MB.test

Якщо використовується -c і локальний файл з таким самим ім'ям уже існує, Axel продовжить завантаження з місця, де воно було перерване, замість того щоб починати спочатку.

aria2

aria2 підтримує той самий сценарій паралельного завантаження, що й Axel, але пропонує ширший набір можливостей. Він підтримує HTTP, HTTPS, FTP, SFTP, BitTorrent та Metalink, а також може одночасно отримувати один і той самий файл із кількох джерел. Як і Axel, aria2 розділяє файл на сегменти та завантажує їх паралельно.

Основні можливості:

  • налаштування кількості з'єднань із сервером, розміру сегментів та загальної кількості одночасних завантажень
  • автоматичне продовження перерваних завантажень
  • перевірка цілісності на основі контрольних сум
  • підтримка HTTPS та FTPS
  • вбудована підтримка клієнтів BitTorrent та Metalink

Встановлення aria2

У Debian та Ubuntu:

sudo apt install aria2

У RHEL, CentOS Stream, AlmaLinux та Rocky Linux:

sudo dnf install aria2

У Fedora:

sudo dnf install aria2

Використання aria2

Базове завантаження:

aria2c https://nl.lg.introserv.eu/1000MB.test

Завантаження одного й того самого файлу одночасно з двох дзеркал. aria2 об'єднує з'єднання з обома джерелами та локально збирає файл:

aria2c "https://nl.lg.introserv.eu/1000MB.test" "https://uk.lg.introserv.eu/1000MB.test"

Поєднання HTTP- та FTP-джерел із передаванням облікових даних FTP:

aria2c --ftp-user=<USER> --ftp-passwd=<PASSWD> "ftp://<ftpserver_ip>/<file>" "https://uk.lg.introserv.eu/1000MB.test"

Відкрити вісім паралельних з'єднань з одним сервером і розділити файл на вісім сегментів:

aria2c -x8 -s8 https://nl.lg.introserv.eu/1000MB.test

Прапорець -x (або --max-connection-per-server) обмежує кількість з'єднань, які aria2 відкриває з одним сервером (за замовчуванням — 1). Прапорець -s (або --split) визначає максимальну кількість сегментів, на які буде розділено файл (за замовчуванням — 5). Для одного джерела фактична кількість паралельних з'єднань є меншою з двох цих величин: -x8 -s5 відкриє 5 з'єднань, а -x5 -s8 також відкриє 5. Щоб отримати 8 паралельних з'єднань з одним сервером, потрібно збільшити обидва параметри, тому зазвичай їх встановлюють однаковими.

Прапорець -k (або --min-split-size) визначає мінімальний розмір частини, на яку може бути розділений файл. Менші значення дають змогу використовувати більше паралельних сегментів, але збільшують накладні витрати:

aria2c -x8 -s8 -k1M https://nl.lg.introserv.eu/1000MB.test

Info

-x, -s та -j виконують різні функції. -x визначає кількість з'єднань з одним сервером під час завантаження одного файлу. -s визначає, на скільки сегментів буде розділено один файл. -j (або --max-concurrent-downloads) визначає, скільки окремих файлів aria2 завантажує одночасно.

Завантажити два файли паралельно:

aria2c -j2 https://nl.lg.introserv.eu/1000MB.test https://uk.lg.introserv.eu/1000MB.test

Продовжити частково завантажений файл за допомогою -c:

aria2c -c https://nl.lg.introserv.eu/1000MB.test

Якщо використовується файл Metalink, aria2 може автоматично вибирати дзеркала, перевіряти завантажені дані за контрольними сумами, зазначеними в Metalink, а також повторювати спроби завантаження з невдалих дзеркал без ручного втручання.

Для регулярного використання aria2 зчитує стандартні параметри з ~/.aria2/aria2.conf, якщо цей файл існує. Тому такі значення, як max-connection-per-server та split, можна встановити один раз у цьому файлі замість того, щоб передавати їх під час кожного запуску.

Warning

Відкриття великої кількості паралельних з'єднань із публічним дзеркалом або CDN може порушувати правила використання оператора та призвести до обмеження швидкості або тимчасового блокування. Для публічних джерел використовуйте помірну кількість з'єднань (зазвичай безпечним є значення від 4 до 8); вищі значення використовуйте лише на інфраструктурі, де відомо, що вони дозволені.

Коли паралельні завантаження ефективні

Паралельні завантаження найефективніші, коли вузьким місцем є обмеження швидкості сервера на одне з'єднання або обмеження пропускної здатності окремого джерела, а не локальний диск чи мережеве з'єднання загалом. Якщо канал уже повністю завантажений, збільшення кількості з'єднань не підвищить загальну пропускну здатність — воно лише перерозподілить її. Деякі HTTP-сервери також відхиляють запити з указанням діапазону або обмежують кількість одночасних з'єднань від одного клієнта. У такому разі інструмент з одним потоком, наприклад wget, буде таким самим швидким, як Axel або aria2.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA