Multi-threaded Datei-Download für Linux
Wenn eine große Datei von einem einzelnen HTTP- oder FTP-Server mit einem herkömmlichen Tool wie curl oder wget heruntergeladen wird, wird eine einzelne TCP-Verbindung geöffnet und die Datei nacheinander heruntergeladen. In einem schnellen Netzwerk kann dies durch die Rate-Limitierung des Servers pro Verbindung, den TCP Slow Start oder die Round-Trip-Latenz begrenzt werden. Parallele Download-Dienstprogramme öffnen gleichzeitig mehrere Verbindungen zur gleichen Quelle, wobei jede Verbindung einen anderen Byte-Bereich abruft und das Ergebnis lokal wieder zusammensetzt. Dies funktioniert nur, wenn der Server HTTP-Range-Anfragen unterstützt (und mit HTTP 206 Partial Content antwortet). Bei Servern, die dies unterstützen, ist die Übertragung häufig deutlich schneller als mit einem Tool, das nur einen einzelnen Datenstrom verwendet.
In diesem Artikel bezeichnet „Multi-Threaded-Download“ dieses Muster paralleler Verbindungen und nicht die Verwendung mehrerer Threads innerhalb des Download-Prozesses selbst.
Dieser Artikel behandelt zwei solche Dienstprogramme für Linux: Axel und aria2.
Axel
Axel ist ein leichtgewichtiges Download-Tool für die Befehlszeile. Es öffnet mehrere Verbindungen zu einer einzelnen Quelle und lädt Byte-Bereiche parallel herunter. Es unterstützt HTTP, HTTPS, FTP und FTPS und kann einen unterbrochenen Download fortsetzen.
Axel installieren
Unter Debian und Ubuntu:
sudo apt install axel
Unter RHEL, CentOS Stream, AlmaLinux und Rocky Linux muss zunächst EPEL aktiviert werden:
sudo dnf install epel-release sudo dnf install axel
Unter Fedora:
sudo dnf install axel
Axel verwenden
Ein einfacher Download:
axel https://nl.lg.introserv.eu/1000MB.test
Mit der Option -a wird eine kompakte Fortschrittsanzeige aktiviert:
axel -a https://nl.lg.introserv.eu/1000MB.test
Begrenzen Sie die maximale Downloadgeschwindigkeit in Byte pro Sekunde mit -s (oder --max-speed). Um beispielsweise die Übertragung auf 500 KB/s zu begrenzen:
axel --max-speed=512000 https://nl.lg.introserv.eu/1000MB.test
Speichern Sie die Datei unter einem anderen Namen mit -o:
axel -o gigabyte.test https://nl.lg.introserv.eu/1000MB.test
Legen Sie die Anzahl der parallelen Verbindungen mit -n fest:
axel -n 10 https://nl.lg.introserv.eu/1000MB.test
Setzen Sie einen teilweise heruntergeladenen Download mit -c fort:
axel -c https://nl.lg.introserv.eu/1000MB.test
Wenn mit -c bereits eine lokale Datei mit demselben Namen vorhanden ist, setzt Axel den Download an der Stelle fort, an der er unterbrochen wurde, anstatt von vorne zu beginnen.
aria2
aria2 deckt denselben Anwendungsfall für parallele Downloads wie Axel ab und bietet einen größeren Funktionsumfang. Es unterstützt HTTP, HTTPS, FTP, SFTP, BitTorrent und Metalink und kann dieselbe Datei gleichzeitig aus mehreren Quellen abrufen. Wie Axel teilt aria2 eine Datei in Segmente auf und lädt diese parallel herunter.
Wichtige Funktionen:
- konfigurierbare Anzahl von Verbindungen pro Server, Segmentgröße und Gesamtzahl paralleler Downloads
- automatische Fortsetzung unterbrochener Downloads
- Integritätsprüfung auf Basis von Prüfsummen
- Unterstützung für HTTPS und FTPS
- native BitTorrent- und Metalink-Clients
aria2 installieren
Unter Debian und Ubuntu:
sudo apt install aria2
Unter RHEL, CentOS Stream, AlmaLinux und Rocky Linux:
sudo dnf install aria2
Unter Fedora:
sudo dnf install aria2
aria2 verwenden
Ein einfacher Download:
aria2c https://nl.lg.introserv.eu/1000MB.test
Rufen Sie dieselbe Datei gleichzeitig von zwei Spiegelservern ab. aria2 kombiniert die Verbindungen zu beiden Quellen und setzt die Datei lokal wieder zusammen:
aria2c "https://nl.lg.introserv.eu/1000MB.test" "https://uk.lg.introserv.eu/1000MB.test"
Kombinieren Sie HTTP- und FTP-Quellen und geben Sie die FTP-Zugangsdaten an:
aria2c --ftp-user=<USER> --ftp-passwd=<PASSWD> "ftp://<ftpserver_ip>/<file>" "https://uk.lg.introserv.eu/1000MB.test"
Öffnen Sie acht parallele Verbindungen zu einem einzelnen Server und teilen Sie die Datei in acht Segmente auf:
aria2c -x8 -s8 https://nl.lg.introserv.eu/1000MB.test
Die Option -x (oder --max-connection-per-server) begrenzt die Anzahl der Verbindungen, die aria2 zu einem Server öffnet (Standardwert 1). Die Option -s (oder --split) legt die maximale Anzahl der Segmente fest, in die die Datei aufgeteilt wird (Standardwert 5). Bei einer einzelnen Quelle ist die tatsächlich verwendete Anzahl paralleler Verbindungen der kleinere der beiden Werte: -x8 -s5 öffnet 5 Verbindungen, -x5 -s8 ebenfalls 5. Um tatsächlich 8 parallele Verbindungen zu einem Server herzustellen, müssen beide Werte erhöht werden. Deshalb werden sie normalerweise auf denselben Wert gesetzt.
Die Option -k (oder --min-split-size) legt die kleinste Größe eines Segments fest, in das die Datei aufgeteilt wird. Kleinere Werte ermöglichen mehr parallele Segmente, verursachen jedoch einen höheren Overhead:
aria2c -x8 -s8 -k1M https://nl.lg.introserv.eu/1000MB.test
-x, -s und -j lösen unterschiedliche Aufgaben. -x steuert die Anzahl der Verbindungen, die zu einem Server geöffnet werden, wenn eine Datei heruntergeladen wird. -s steuert, in wie viele Segmente eine Datei aufgeteilt wird. -j (oder --max-concurrent-downloads) steuert, wie viele separate Dateien aria2 gleichzeitig herunterlädt.
Laden Sie zwei Dateien parallel herunter:
aria2c -j2 https://nl.lg.introserv.eu/1000MB.test https://uk.lg.introserv.eu/1000MB.test
Setzen Sie einen teilweise heruntergeladenen Download mit -c fort:
aria2c -c https://nl.lg.introserv.eu/1000MB.test
Wenn eine Metalink-Datei angegeben wird, kann aria2 automatisch Spiegelserver auswählen, die heruntergeladenen Daten anhand der in der Metalink-Datei angegebenen Prüfsummen überprüfen und fehlgeschlagene Spiegelserver ohne manuelles Eingreifen erneut versuchen.
Für die wiederholte Verwendung liest aria2 Standardoptionen aus ~/.aria2/aria2.conf, sofern die Datei vorhanden ist. Dadurch können Werte wie max-connection-per-server und split einmal dort festgelegt werden, anstatt sie bei jedem Aufruf anzugeben.
Das Öffnen vieler paralleler Verbindungen zu einem öffentlichen Spiegelserver oder CDN kann gegen die Nutzungsrichtlinien des Betreibers verstoßen und eine Ratenbegrenzung oder vorübergehende Sperren auslösen. Verwenden Sie bei öffentlichen Quellen eine moderate Anzahl von Verbindungen (4 bis 8 ist normalerweise unproblematisch). Höhere Werte sollten nur auf Infrastrukturen verwendet werden, bei denen bekannt ist, dass sie dies zulassen.
Wann parallele Downloads hilfreich sind
Parallele Downloads sind am effektivsten, wenn der Engpass in der Ratenbegrenzung des Servers pro Verbindung oder in der Durchsatzbegrenzung der Quelle liegt und nicht beim lokalen Datenträger oder bei der Netzwerkverbindung insgesamt. Bei einer vollständig ausgelasteten Verbindung erhöhen zusätzliche Verbindungen die Gesamtbandbreite nicht, sondern verteilen sie lediglich neu. Einige HTTP-Server lehnen Range-Anfragen auch ab oder begrenzen die Anzahl gleichzeitiger Verbindungen eines Clients. In diesem Fall ist ein Tool mit einem einzelnen Datenstrom wie wget genauso schnell wie Axel oder aria2.