Linux için çok iş parçacıklı dosya indirme
Büyük bir dosya, curl veya wget gibi standart bir araçla tek bir HTTP veya FTP sunucusundan indirildiğinde, tek bir TCP bağlantısı açılır ve dosya sıralı olarak indirilir. Hızlı bir ağda bu işlem, sunucunun bağlantı başına hız sınırı, TCP slow start veya gidiş-dönüş gecikmesi nedeniyle sınırlanabilir. Paralel indirme araçları aynı kaynağa aynı anda birden fazla bağlantı açar; her bağlantı dosyanın farklı bir bayt aralığını indirir ve sonuç yerel olarak yeniden birleştirilir. Bu yöntem yalnızca sunucu HTTP range isteklerini kabul ediyorsa (HTTP 206 Partial Content yanıtı veriyorsa) çalışır; bunu destekleyen sunucularda sonuç, tek akışlı bir aracın sağladığından genellikle belirgin şekilde daha hızlı bir aktarım olur.
Bu makalede "çok iş parçacıklı indirme" ifadesi, indirme işleminin kendi içindeki iş parçacıklarından ziyade paralel bağlantılarla gerçekleştirilen bu modeli ifade eder.
Bu makalede Linux için iki yardımcı program ele alınmaktadır: Axel ve aria2.
Axel
Axel, hafif bir komut satırı indirme aracıdır. Tek bir kaynağa birden fazla bağlantı açar ve bayt aralıklarını paralel olarak indirir. HTTP, HTTPS, FTP ve FTPS protokollerini destekler ve kesintiye uğrayan indirmelere devam edebilir.
Axel kurulumu
Debian ve Ubuntu'da:
sudo apt install axel
RHEL, CentOS Stream, AlmaLinux ve Rocky Linux'ta önce EPEL'i etkinleştirin:
sudo dnf install epel-release sudo dnf install axel
Fedora'da:
sudo dnf install axel
Axel kullanımı
Temel bir indirme:
axel https://nl.lg.introserv.eu/1000MB.test
-a seçeneği kompakt bir ilerleme göstergesi sağlar:
axel -a https://nl.lg.introserv.eu/1000MB.test
Maksimum indirme hızını saniye başına bayt cinsinden -s (veya --max-speed) seçeneğiyle sınırlayabilirsiniz. Örneğin, aktarımı 500 KB/s ile sınırlandırmak için:
axel --max-speed=512000 https://nl.lg.introserv.eu/1000MB.test
Dosyayı farklı bir adla kaydetmek için -o seçeneğini kullanın:
axel -o gigabyte.test https://nl.lg.introserv.eu/1000MB.test
Paralel bağlantı sayısını -n seçeneğiyle belirleyin:
axel -n 10 https://nl.lg.introserv.eu/1000MB.test
Kısmen indirilmiş bir dosyaya -c seçeneğiyle devam edin:
axel -c https://nl.lg.introserv.eu/1000MB.test
-c kullanıldığında, aynı ada sahip bir yerel dosya zaten mevcutsa Axel indirmeye baştan başlamak yerine kaldığı yerden devam eder.
aria2
aria2, Axel ile aynı paralel indirme kullanım senaryosunu destekler ve daha geniş bir özellik seti sunar. HTTP, HTTPS, FTP, SFTP, BitTorrent ve Metalink protokollerini destekler ve aynı dosyayı aynı anda birden fazla kaynaktan alabilir. Axel gibi dosyayı segmentlere böler ve bunları paralel olarak indirir.
Temel özellikler:
- sunucu başına bağlantı sayısı, segment boyutu ve toplam eşzamanlılık için yapılandırılabilir seçenekler
- kesintiye uğrayan indirmelere otomatik olarak devam etme
- sağlama toplamı tabanlı bütünlük doğrulaması
- HTTPS ve FTPS desteği
- yerleşik BitTorrent ve Metalink istemcileri
aria2 kurulumu
Debian ve Ubuntu'da:
sudo apt install aria2
RHEL, CentOS Stream, AlmaLinux ve Rocky Linux'ta:
sudo dnf install aria2
Fedora'da:
sudo dnf install aria2
aria2 kullanımı
Temel bir indirme:
aria2c https://nl.lg.introserv.eu/1000MB.test
Aynı dosyayı aynı anda iki aynadan indirin. aria2 her iki kaynağın bağlantılarını birleştirir ve dosyayı yerel olarak yeniden oluşturur:
aria2c "https://nl.lg.introserv.eu/1000MB.test" "https://uk.lg.introserv.eu/1000MB.test"
HTTP ve FTP kaynaklarını birlikte kullanın ve FTP kimlik bilgilerini sağlayın:
aria2c --ftp-user=<USER> --ftp-passwd=<PASSWD> "ftp://<ftpserver_ip>/<file>" "https://uk.lg.introserv.eu/1000MB.test"
Tek bir sunucuya sekiz paralel bağlantı açın ve dosyayı sekiz segmente bölün:
aria2c -x8 -s8 https://nl.lg.introserv.eu/1000MB.test
-x seçeneği (veya --max-connection-per-server), aria2'nin tek bir sunucuya açabileceği maksimum bağlantı sayısını belirler (varsayılan değer 1). -s seçeneği (veya --split), dosyanın bölünebileceği maksimum segment sayısını belirler (varsayılan değer 5). Tek bir kaynak için gerçek paralel bağlantı sayısı bu iki değerden küçük olanıdır: -x8 -s5 5 bağlantı açar, -x5 -s8 de 5 bağlantı açar. Tek bir sunucuya gerçekten 8 paralel bağlantı açmak için her iki değerin de artırılması gerekir; bu nedenle genellikle aynı değere ayarlanırlar.
-k seçeneği (veya --min-split-size), dosyanın bölünebileceği en küçük parçanın boyutunu belirler. Daha küçük değerler daha fazla paralel segment kullanılmasına olanak tanır, ancak ek yükü artırır:
aria2c -x8 -s8 -k1M https://nl.lg.introserv.eu/1000MB.test
-x, -s ve -j farklı işlevlere sahiptir. -x, tek bir dosyayı indirirken bir sunucuya açılan bağlantı sayısını kontrol eder. -s, tek bir dosyanın kaç segmente bölüneceğini belirler. -j (veya --max-concurrent-downloads), aria2'nin aynı anda kaç ayrı dosya indireceğini belirler.
İki dosyayı paralel olarak indirin:
aria2c -j2 https://nl.lg.introserv.eu/1000MB.test https://uk.lg.introserv.eu/1000MB.test
Kısmen indirilmiş bir dosyaya -c seçeneğiyle devam edin:
aria2c -c https://nl.lg.introserv.eu/1000MB.test
Bir Metalink dosyası kullanıldığında aria2 aynaları otomatik olarak seçebilir, indirilen verileri Metalink'te belirtilen sağlama toplamlarına göre doğrulayabilir ve başarısız olan aynaları manuel müdahale gerektirmeden yeniden deneyebilir.
Tekrarlanan kullanımlar için aria2, dosya mevcutsa varsayılan seçenekleri ~/.aria2/aria2.conf dosyasından okur. Böylece max-connection-per-server ve split gibi değerler her çalıştırmada belirtilmek yerine bir kez bu dosyada ayarlanabilir.
Herkese açık bir mirror veya CDN'ye çok sayıda paralel bağlantı açmak, operatörün kullanım politikasını ihlal edebilir ve hız sınırlamasına veya geçici engellemelere neden olabilir. Herkese açık kaynaklarda bağlantı sayısını makul seviyede tutun (4 ila 8 bağlantı genellikle güvenli bir aralıktır); daha yüksek değerleri yalnızca buna izin verdiği bilinen altyapılarda kullanın.
Paralel indirmeler ne zaman faydalıdır?
Paralel indirmeler, darboğazın yerel disk veya genel ağ bağlantısı değil, sunucunun bağlantı başına hız sınırı ya da kaynak başına aktarım kapasitesi olduğu durumlarda en etkili sonuçları verir. Bir bağlantının bant genişliği zaten tamamen kullanılıyorsa, daha fazla bağlantı açmak toplam bant genişliğini artırmaz; yalnızca mevcut bant genişliğini yeniden dağıtır. Bazı HTTP sunucuları range isteklerini de reddeder veya tek bir istemciden gelen eşzamanlı bağlantı sayısını sınırlar. Bu durumda wget gibi tek akışlı bir araç Axel veya aria2 kadar hızlı olabilir.