Wielowątkowe pobieranie plików dla systemu Linux | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Wielowątkowe pobieranie plików dla systemu Linux

Gdy duży plik jest pobierany z pojedynczego serwera HTTP lub FTP za pomocą standardowego narzędzia, takiego jak curl lub wget, otwierane jest jedno połączenie TCP, a plik jest pobierany sekwencyjnie. W przypadku szybkiej sieci może to być ograniczone przez limit prędkości serwera dla pojedynczego połączenia, mechanizm TCP Slow Start lub opóźnienie RTT. Narzędzia do pobierania równoległego otwierają jednocześnie kilka połączeń do tego samego źródła, z których każde pobiera inny zakres bajtów, a następnie lokalnie składają wynik w całość. Działa to tylko wtedy, gdy serwer obsługuje żądania HTTP Range (odpowiadając kodem HTTP 206 Partial Content); na serwerach, które to obsługują, transfer jest często zauważalnie szybszy niż w przypadku narzędzia korzystającego z pojedynczego strumienia.

W tym artykule określenie „pobieranie wielowątkowe” odnosi się do tego modelu równoległych połączeń, a nie do wykorzystania wielu wątków wewnątrz samego procesu pobierania.

W tym artykule omówiono dwa takie narzędzia dla systemu Linux: Axel i aria2.

Axel

Axel to lekkie narzędzie do pobierania plików z wiersza poleceń. Otwiera wiele połączeń do jednego źródła i pobiera zakresy bajtów równolegle. Obsługuje HTTP, HTTPS, FTP i FTPS oraz umożliwia wznowienie przerwanego pobierania.

Instalowanie Axel

W systemach Debian i Ubuntu:

sudo apt install axel

W systemach RHEL, CentOS Stream, AlmaLinux i Rocky Linux najpierw włącz EPEL:

sudo dnf install epel-release sudo dnf install axel

W systemie Fedora:

sudo dnf install axel

Korzystanie z Axel

Podstawowe pobieranie:

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

Opcja -a włącza kompaktowy wskaźnik postępu:

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

Ogranicz maksymalną prędkość pobierania w bajtach na sekundę za pomocą -s (lub --max-speed). Na przykład, aby ograniczyć transfer do 500 KB/s:

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

Zapisz plik pod inną nazwą za pomocą -o:

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

Ustaw liczbę równoległych połączeń za pomocą -n:

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

Wznów częściowo pobrany plik za pomocą -c:

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

W przypadku użycia -c, jeśli lokalny plik o tej samej nazwie już istnieje, Axel wznowi pobieranie od miejsca, w którym zostało przerwane, zamiast rozpoczynać je od początku.

aria2

aria2 obsługuje ten sam przypadek użycia pobierania równoległego co Axel, ale oferuje szerszy zestaw funkcji. Obsługuje HTTP, HTTPS, FTP, SFTP, BitTorrent i Metalink oraz może jednocześnie pobierać ten sam plik z wielu źródeł. Podobnie jak Axel, dzieli plik na segmenty i pobiera je równolegle.

Najważniejsze funkcje:

  • konfigurowalna liczba połączeń na serwer, rozmiar segmentów i ogólna liczba jednoczesnych pobrań
  • automatyczne wznawianie przerwanych pobrań
  • weryfikacja integralności na podstawie sum kontrolnych
  • obsługa HTTPS i FTPS
  • natywne klienty BitTorrent i Metalink

Instalowanie aria2

W systemach Debian i Ubuntu:

sudo apt install aria2

W systemach RHEL, CentOS Stream, AlmaLinux i Rocky Linux:

sudo dnf install aria2

W systemie Fedora:

sudo dnf install aria2

Korzystanie z aria2

Podstawowe pobieranie:

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

Pobierz ten sam plik jednocześnie z dwóch serwerów lustrzanych. aria2 łączy połączenia z obu źródeł i lokalnie składa plik w całość:

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

Połącz źródła HTTP i FTP, podając dane uwierzytelniające FTP:

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

Otwórz osiem równoległych połączeń z jednym serwerem, dzieląc plik na osiem segmentów:

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

Opcja -x (lub --max-connection-per-server) ogranicza liczbę połączeń, które aria2 otwiera do jednego serwera (domyślnie 1). Opcja -s (lub --split) określa maksymalną liczbę segmentów, na które dzielony jest plik (domyślnie 5). W przypadku jednego źródła efektywna liczba równoległych połączeń jest mniejszą z tych dwóch wartości: -x8 -s5 otwiera 5 połączeń, a -x5 -s8 również otwiera 5. Aby faktycznie uzyskać 8 równoległych połączeń z jednym serwerem, należy zwiększyć obie wartości, dlatego zwykle ustawia się je na tę samą wartość.

Opcja -k (lub --min-split-size) określa najmniejszy fragment, na jaki dzielony jest plik. Mniejsze wartości umożliwiają korzystanie z większej liczby równoległych segmentów kosztem większego narzutu:

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

Info

-x, -s i -j rozwiązują różne problemy. -x kontroluje liczbę połączeń otwieranych do jednego serwera podczas pobierania jednego pliku. -s określa, na ile segmentów dzielony jest jeden plik. -j (lub --max-concurrent-downloads) określa, ile oddzielnych plików aria2 pobiera jednocześnie.

Pobierz dwa pliki równolegle:

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

Wznów częściowo pobrany plik za pomocą -c:

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

Po podaniu pliku Metalink aria2 może automatycznie wybierać serwery lustrzane, weryfikować pobrane dane za pomocą sum kontrolnych określonych w pliku Metalink oraz ponawiać próby pobierania z niedziałających serwerów lustrzanych bez ręcznej interwencji.

W przypadku wielokrotnego użycia aria2 odczytuje domyślne opcje z pliku ~/.aria2/aria2.conf, jeśli taki plik istnieje. Dzięki temu wartości takie jak max-connection-per-server i split można ustawić tam raz, zamiast podawać je przy każdym uruchomieniu.

Warning

Otwieranie wielu równoległych połączeń z publicznym serwerem lustrzanym lub CDN może naruszać zasady korzystania z usługi operatora i spowodować ograniczenie prędkości lub tymczasową blokadę. W przypadku źródeł publicznych należy utrzymywać umiarkowaną liczbę połączeń (od 4 do 8 jest zazwyczaj bezpieczne); wyższe wartości należy stosować tylko w infrastrukturze, w przypadku której wiadomo, że są one dozwolone.

Kiedy pobieranie równoległe pomaga

Pobieranie równoległe jest najbardziej skuteczne, gdy wąskim gardłem jest limit prędkości serwera dla pojedynczego połączenia lub limit przepustowości źródła, a nie lokalny dysk ani całe łącze sieciowe. W przypadku w pełni wykorzystanego łącza otwieranie większej liczby połączeń nie zwiększa całkowitej przepustowości — jedynie ją rozdziela. Niektóre serwery HTTP również odrzucają żądania Range lub ograniczają liczbę jednoczesnych połączeń z jednego klienta. W takim przypadku narzędzie korzystające z pojedynczego strumienia, takie jak wget, jest równie szybkie jak Axel lub 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