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


38

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

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


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, чтобы упростить запуск и отслеживание загрузок на нескольких серверах.


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 ГБ на каждом компьютере, но объединение фрагментов выполняется автоматически.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.