Večnitni prenos datotek za Linux
Ko se velika datoteka prenaša z enega strežnika HTTP ali FTP z običajnim orodjem, kot sta curl ali wget, se vzpostavi ena sama povezava TCP in datoteka se prenaša zaporedno. V hitrem omrežju lahko prenos omejuje omejitev hitrosti strežnika na posamezno povezavo, počasni zagon TCP ali zakasnitev povratne poti. Orodja za vzporedni prenos odprejo več povezav z istim virom hkrati, pri čemer vsaka pridobiva drug obseg bajtov, nato pa lokalno sestavijo končni rezultat. To deluje samo, če strežnik podpira zahteve za obseg HTTP (odgovarja s HTTP 206 Partial Content); pri strežnikih, ki to podpirajo, je rezultat pogosto opazno hitrejši prenos kot pri orodju z enim tokom.
V tem članku izraz »večnitni prenos« označuje ta vzorec vzporednih povezav in ne večnitnosti znotraj samega procesa prenosa.
Članek obravnava dve takšni orodji za Linux: Axel in aria2.
Axel
Axel je lahko orodje za prenos iz ukazne vrstice. Odpre več povezav z enim virom in vzporedno prenaša različne obsege bajtov. Podpira HTTP, HTTPS, FTP in FTPS ter omogoča nadaljevanje prekinjenega prenosa.
Namestitev programa Axel
V Debianu in Ubuntuju:
sudo apt install axel
V sistemih RHEL, CentOS Stream, AlmaLinux in Rocky Linux najprej omogočite EPEL:
sudo dnf install epel-release sudo dnf install axel
V Fedori:
sudo dnf install axel
Uporaba programa Axel
Osnovni prenos:
axel https://nl.lg.introserv.eu/1000MB.test
Zastavica -a omogoči kompakten prikaz napredka:
axel -a https://nl.lg.introserv.eu/1000MB.test
Največjo hitrost prenosa omejite v bajtih na sekundo z možnostjo -s (ali --max-speed). Če želite na primer omejiti prenos na 500 KB/s:
axel --max-speed=512000 https://nl.lg.introserv.eu/1000MB.test
Datoteko shranite pod drugim imenom z možnostjo -o:
axel -o gigabyte.test https://nl.lg.introserv.eu/1000MB.test
Število vzporednih povezav nastavite z možnostjo -n:
axel -n 10 https://nl.lg.introserv.eu/1000MB.test
Delno preneseno datoteko nadaljujete z možnostjo -c:
axel -c https://nl.lg.introserv.eu/1000MB.test
Pri uporabi možnosti -c Axel, če lokalna datoteka z istim imenom že obstaja, nadaljuje prenos tam, kjer se je končal, namesto da bi začel znova.
aria2
aria2 podpira isti primer uporabe vzporednega prenosa kot Axel, vendar ponuja širši nabor funkcij. Podpira HTTP, HTTPS, FTP, SFTP, BitTorrent in Metalink ter lahko isto datoteko pridobiva iz več virov hkrati. Tako kot Axel razdeli datoteko na segmente in jih prenaša vzporedno.
Ključne funkcije:
- nastavljivo število povezav na strežnik, velikost segmentov in skupna sočasnost
- samodejno nadaljevanje prekinjenih prenosov
- preverjanje celovitosti na podlagi kontrolnih vsot
- podpora za HTTPS in FTPS
- izvorna podpora za odjemalca BitTorrent in Metalink
Namestitev programa aria2
V Debianu in Ubuntuju:
sudo apt install aria2
V sistemih RHEL, CentOS Stream, AlmaLinux in Rocky Linux:
sudo dnf install aria2
V Fedori:
sudo dnf install aria2
Uporaba programa aria2
Osnovni prenos:
aria2c https://nl.lg.introserv.eu/1000MB.test
Pridobite isto datoteko iz dveh zrcalnih strežnikov hkrati. aria2 združi povezave z obema viroma in lokalno sestavi datoteko:
aria2c "https://nl.lg.introserv.eu/1000MB.test" "https://uk.lg.introserv.eu/1000MB.test"
Kombinirajte vire HTTP in FTP ter navedite poverilnice za FTP:
aria2c --ftp-user=<USER> --ftp-passwd=<PASSWD> "ftp://<ftpserver_ip>/<file>" "https://uk.lg.introserv.eu/1000MB.test"
Odprite osem vzporednih povezav z enim strežnikom in datoteko razdelite na osem segmentov:
aria2c -x8 -s8 https://nl.lg.introserv.eu/1000MB.test
Zastavica -x (ali --max-connection-per-server) določa največje število povezav, ki jih aria2 odpre z enim strežnikom (privzeto 1). Zastavica -s (ali --split) določa največje število segmentov, na katere je datoteka razdeljena (privzeto 5). Pri enem viru je dejansko število vzporednih povezav manjša od obeh vrednosti: -x8 -s5 odpre 5 povezav, -x5 -s8 prav tako odpre 5. Če želite dejansko vzpostaviti 8 vzporednih povezav z enim strežnikom, morate povečati obe vrednosti, zato se običajno nastavita na isto število.
Zastavica -k (ali --min-split-size) določa najmanjšo velikost segmenta, na katerega se datoteka razdeli. Manjše vrednosti omogočajo več vzporednih segmentov, vendar povečajo režijske stroške:
aria2c -x8 -s8 -k1M https://nl.lg.introserv.eu/1000MB.test
-x, -s in -j rešujejo različne težave. -x določa število povezav z enim strežnikom pri prenosu ene datoteke. -s določa, na koliko segmentov je razdeljena ena datoteka. -j (ali --max-concurrent-downloads) določa, koliko ločenih datotek aria2 prenaša hkrati.
Vzporedno prenesite dve datoteki:
aria2c -j2 https://nl.lg.introserv.eu/1000MB.test https://uk.lg.introserv.eu/1000MB.test
Delno preneseno datoteko nadaljujete z možnostjo -c:
aria2c -c https://nl.lg.introserv.eu/1000MB.test
Ko prejme datoteko Metalink, lahko aria2 samodejno izbere zrcalne strežnike, preveri prenesene podatke glede na kontrolne vsote, navedene v datoteki Metalink, ter brez ročnega posredovanja znova poskusi uporabiti neuspešne zrcalne strežnike.
Za ponavljajočo se uporabo aria2 bere privzete možnosti iz datoteke ~/.aria2/aria2.conf, če ta obstaja, zato lahko vrednosti, kot sta max-connection-per-server in split, nastavite enkrat v tej datoteki, namesto da jih določate pri vsakem zagonu.
Odpiranje velikega števila vzporednih povezav z javnim zrcalnim strežnikom ali CDN lahko krši pravila uporabe operaterja ter povzroči omejevanje hitrosti ali začasno blokado. Pri javnih virih ohranite število povezav zmerno (4 do 8 je običajno varna izbira); višje vrednosti uporabljajte samo na infrastrukturi, za katero je znano, da jih dovoljuje.
Kdaj so vzporedni prenosi učinkoviti
Vzporedni prenosi so najučinkovitejši, kadar je ozko grlo omejitev hitrosti strežnika na posamezno povezavo ali omejitev prepustnosti posameznega vira, ne pa lokalni disk ali celotna omrežna povezava. Če je povezava v celoti izkoriščena, več povezav ne poveča skupne pasovne širine; le prerazporedi jo. Nekateri strežniki HTTP prav tako zavračajo zahteve za obseg ali omejujejo število sočasnih povezav enega odjemalca. V takšnih primerih je orodje z enim tokom, kot je wget, enako hitro kot Axel ali aria2.