Как я могу распространять большие загрузки на несколько компьютеров?

38

Мне нужно скачать большой файл (1 ГБ). У меня также есть доступ к нескольким компьютерам под управлением Linux, но каждый ограничен скоростью загрузки 50 КБ / с по политике администратора.

Как распределить загрузку этого файла на несколько компьютеров и объединить их после загрузки всех сегментов, чтобы я мог получить его быстрее?

Meysam
источник
7
Загрузите его дома и подключите через usb thumbdrive?
WernerCD
2
Я помню такие вещи со старой солнечной станцией, когда я был в университете. Просто проверьте, достаточно ли у вас места для сохранения всего содержимого, один из моих друзей был исключен после блокировки всех компьютеров лаборатории (полная tmp).
Kartoch
Если нет ограничений на загрузку, как быстро другой конец может отправить файл? Существуют ли ограничения на передачу между компьютерами в локальной сети?
вс
@ SunWKim Нет. Там нет никаких особых ограничений.
Meysam

Ответы:

60

Общие протоколы HTTP, FTP и SFTP поддерживают запросы диапазона , поэтому вы можете запросить часть файла. Обратите внимание, что для этого также требуется поддержка сервера, поэтому он может работать или не работать на практике.

Вы можете использовать curlи опцию -rили, --rangeчтобы указать диапазон и в конечном итоге просто catсвязать файлы вместе. Пример:

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

И в конце концов, когда вы собрали отдельные части, вы объединяете их:

cat distro* > distro.iso

Вы можете получить дополнительную информацию о файле, включая его размер, с помощью --headопции:

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

Вы можете получить последний кусок с открытым диапазоном:

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

Прочитайте справочную страницу curl для получения дополнительных опций и объяснений.

Вы также можете использовать ssh и tmux, чтобы упростить запуск и отслеживание загрузок на нескольких серверах.

Marco
источник
15
Примечание: осторожно, при использовании cat distro* > ...проверьте сортировку файлов, так как *развернутая вашей оболочкой может сортировать это так: distro1.iso distro10.iso distro11.iso ...и, таким образом, объединять в неправильном порядке.
Себастьян
8
исправление для заметки @ Себастьяна будет:cat distro{1..10}.iso
nonchip
1
Это решение зависит от оболочки и не переносимо. cat $(seq -fdist%g.iso 1 10)должно быть более предсказуемым, но это не удается csh, хотя. Замена $(…)на заднюю часть, похоже, работает в большинстве оболочек.
Марко
3
@Marco, seqэто не переносимая команда. Вы можете использовать distro001.iso, distro002.iso...distroy010.iso
Стефан Шазелас
Это политика администратора, 50 кБ / с на каждое соединение для передачи или общая пропускная способность, разрешенная на компьютере. Если это первый вариант, ответ можно использовать на одном и том же компьютере, вместо того, чтобы заходить на разные рабочие станции.
Вс
0

Загрузка файла объемом 1 гигабайт со скоростью 50 килобайт в секунду займет около 5,5 часов.

Кажется, что усилия по координации нескольких компьютеров для получения частичных данных могут сэкономить некоторое время.

Вы можете посмотреть на bittorrent и использовать заполнение веб-страниц вместе с переводами через одноранговый обмен. Каждый клиент может получать фрагменты и обмениваться готовыми фрагментами в локальной сети (LAN). Вы получаете один и тот же файл размером 1 ГБ на каждом компьютере, но объединение фрагментов выполняется автоматически.

солнце
источник