Jak dystrybuować duże pliki do pobrania na wielu komputerach?


38

Muszę pobrać duży plik (1 GB). Mam również dostęp do wielu komputerów z systemem Linux, ale zasady administratora ograniczają każdy z nich do prędkości pobierania 50 kB / s.

Jak mogę dystrybuować pobieranie tego pliku na kilka komputerów i scalać je po pobraniu wszystkich segmentów, aby szybciej otrzymać?


7
Pobierz go w domu i podkradnij go za pomocą USB Thumbdrive?
WernerCD

2
Pamiętam takie rzeczy ze starą stacją Sun B & W, kiedy byłem na uniwersytecie. Po prostu sprawdź, czy masz wystarczająco dużo miejsca, aby zapisać całą zawartość, jeden z moich przyjaciół został wydalony po zablokowaniu wszystkich komputerów w laboratorium (pełne tmp).
Kartoch

Jeśli nie ma ograniczeń pobierania, jak szybko drugi koniec może wysłać plik? Czy istnieją ograniczenia transferu między komputerami w sieci LAN?
niedz.

@SunWKim Nie. Nie ma tam konkretnych ograniczeń.
Meysam

Odpowiedzi:


60

Wspólne protokoły żądania zakresu obsługi HTTP, FTP i SFTP , dzięki czemu można zażądać części pliku. Pamiętaj, że wymaga to również obsługi serwera, więc może, ale nie musi, działać w praktyce.

Możesz użyć opcji curli -rlub --range, aby określić zakres i ewentualnie po prostu catpołączyć pliki razem. Przykład:

curl -r 0-104857600         -o distro1.iso 'http://files.cdn/distro.iso'
curl -r 104857601-209715200 -o distro2.iso 'http://files.cdn/distro.iso'
[…]

A w końcu, kiedy zebrałeś poszczególne części, łączysz je:

cat distro* > distro.iso

Możesz uzyskać dodatkowe informacje o pliku, w tym jego rozmiar, z --headopcją:

curl --head 'http://files.cdn/distro.iso'

Możesz pobrać ostatni fragment z otwartym zakresem:

curl -r 604887601- -o distro9.iso 'http://files.cdn/distro.iso'

Przeczytaj stronę podręcznika curl, aby uzyskać więcej opcji i wyjaśnień.

Możesz dodatkowo wykorzystać ssh i tmux, aby ułatwić uruchamianie i śledzenie pobrań na wielu serwerach.


15
Uwaga: ostrożnie, podczas używania cat distro* > ...sprawdź sortowanie plików, ponieważ *rozwinięta przez twoją powłokę może to posortować w następujący sposób: distro1.iso distro10.iso distro11.iso ...i w ten sposób konkatenacja w niewłaściwej kolejności.
Sebastian

8
poprawką dla notatki @ Sebastiana byłoby:cat distro{1..10}.iso
non

1
To rozwiązanie jest specyficzne dla powłoki i nie jest przenośne. cat $(seq -fdist%g.iso 1 10)powinno być bardziej przewidywalne, ale jednak zawiedzie csh. Zastępowanie $(…)backtics wydaje się działać w większości powłok.
Marco

3
@Marco, również seqnie jest przenośnym poleceniem. Można użyć distro001.iso, distro002.iso...distroy010.iso
Stéphane Chazelas

Jest to zasada administratora, 50 kB / s na połączenie przesyłania lub całkowita dozwolona przepustowość na komputerze. Jeśli tak jest, odpowiedź można wykorzystać na tym samym komputerze, bez konieczności logowania się na różnych stacjach roboczych.
niedz.

0

Załadowanie pliku 1 gigabajta z prędkością 50 kilobajtów na sekundę zajęłoby około 5,5 godziny.

Wydaje się, że wysiłek koordynacji wielu komputerów w celu uzyskania częściowych może zaoszczędzić trochę czasu.

Możesz spojrzeć na bittorrent i wykorzystać web seeding wraz z transferami poprzez wymianę równorzędną. Każdy klient może odbierać elementy i dzielić się nimi z siecią lokalną (LAN). Na każdym komputerze kończy się ten sam plik 1 GB, ale scalanie elementów jest zautomatyzowane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.