Я отправил большое количество данных с одной машины на другую. Если я отправлю с rsync (или любым другим способом), он будет работать со стабильными 320kb / sec. Если я инициирую две или три передачи одновременно, каждая будет идти по 320, а если я делаю четыре одновременно, они будут максимально использовать ссылку.
Мне нужно иметь возможность отправлять данные как можно быстрее, поэтому мне нужен инструмент, который может выполнять обратное мультиплексирование с передачей файлов. Мне нужно общее решение, так что запускать split на исходном компьютере и объединять их вместе на другом конце нецелесообразно. Мне нужно, чтобы это работало в автоматическом режиме.
Есть ли инструмент, который делает это, или мне нужно сделать свой собственный? Отправитель CentOS, получатель FreeBSD.
источник
lftp
отлично, но я не могу заставить его делать несколько частей при загрузке. Я используюmirror --use-pget-n=20 -R
- но похоже, что--use-pget-n
работает только при загрузке.-P20
работает для загрузки нескольких файлов, но я не могу составить каждый файл.pget -n
.mirror
это двунаправленный;pget
аргумент относится только к загрузке файлов.Есть пара инструментов, которые могут работать.
LFTP - поддерживает FTP, HTTP и SFTP. Поддерживает использование нескольких соединений для загрузки одного файла. Предполагая, что вы хотите перенести файл с удаленного сервера на локальный сервер, установите LFTP на локальный сервер и выполните:
lftp -e 'pget -n 4 sftp://userName@remoteServer.com/some/dir/file.ext'
«-N 4» - это количество подключений для параллельного использования.
Кроме того, существует множество инструментов «ускорителя загрузки», но они обычно поддерживают только HTTP или FTP, которые вы, возможно, не захотите устанавливать на удаленном сервере. Вот некоторые примеры: Axel , aria2 и ProZilla
источник
Если у вас есть несколько больших файлов, используйте
lftp -e 'mirror --parallel=2 --use-pget-n=10 <remote_dir> <local_dir>' <ftp_server>
: вы загрузите 2 файла, каждый из которых будет разбит на 10 сегментов с общим количеством соединений 20 ftp<ftp_server>
;Если у вас есть большое количество маленьких файлов, тогда используйте
lftp -e 'mirror --parallel=100 <remote_dir> <local_dir>' <ftp_server>
: вы будете загружать 100 файлов параллельно без сегментации, тогда. Всего будет открыто 100 соединений. Это может привести к исчерпанию доступных клиентов на сервере или может заблокировать вас на некоторых серверах.Вы можете использовать
--continue
для возобновления работы :) и-R
возможность загрузки вместо загрузки (затем переключение порядка аргументов в<local_dir> <remote_dir>
).источник
Вы можете изменить настройки TCP, чтобы избежать этой проблемы, в зависимости от того, что вызывает ограничение 320 КБ / с на соединение. Я предполагаю, что это не является явным ограничением скорости соединения для интернет-провайдера. Есть два вероятных виновника регулирования:
В первом случае каждое TCP-соединение эффективно конкурирует в равной степени при стандартном контроле перегрузки TCP. Вы также можете улучшить это, изменив алгоритмы управления перегрузкой или уменьшив величину отката.
Во втором случае вы не ограничены потерей пакетов. Добавление дополнительных подключений - грубый способ увеличения общего размера окна. Если вы можете вручную увеличить размеры окна, проблема исчезнет. (Это может потребовать масштабирования окна TCP, если задержка соединения достаточно высока.)
Вы можете приблизительно определить, насколько большим должно быть окно, умножив время пинга в оба конца на общую скорость соединения. 1280 КБ / с требуется 1280 (1311 для 1024 = 1 КБ) байтов на миллисекунду прохождения сигнала в обоих направлениях. Максимальный размер буфера в 64 КБ составляет около 50 мс, что довольно типично. Затем буфер 16 КБ насыщался бы до 320 КБ / с.
источник
Как ваши данные структурированы? Несколько больших файлов? Несколько больших каталогов? Вы можете создать несколько экземпляров rsync в определенных ветвях дерева каталогов.
Все зависит от того, как структурированы ваши исходные данные. Существует множество инструментов Unix для нарезки, нарезания кубиков и повторной сборки файлов.
источник
Если вы можете настроить ssh-вход без пароля, то откроются 4 одновременных соединения scp (-n), при этом каждое соединение обрабатывает 4 файла (-L):
Файл /tmp/scp.sh:
источник
Попробуйте отсортировать все файлы в inode (find / mydir -type f -print | xargs ls -i | sort -n) и перенести их, например, с помощью cpio поверх ssh. Это увеличит ваш диск и сделает вашу сеть узким местом. Быстрее этого трудно пройти при переходе по сети.
источник
Я знаю инструмент, который может передавать файлы кусками. Инструмент называется «пакет / порт rtorrent», который доступен на обоих хостах;) Клиенты BitTorrent часто резервируют дисковое пространство перед передачей, и чанки записываются непосредственно из сокетов на диск. Кроме того, вы сможете просматривать ВСЕ состояния переводов на удобном экране ncurses.
Вы можете создавать простые bash-скрипты, чтобы автоматизировать создание файла "* .torrent" и выполнить команду ssh на удаленной машине, чтобы она загружала его. Это выглядит немного некрасиво, но я не думаю, что вы найдете простое решение без разработки :)
источник
FTP использует несколько подключений для загрузки. Если вы можете настроить безопасный канал для FTP через VPN или FTP через SSH , вы сможете максимально использовать свое сетевое соединение. (Обратите внимание, что для FTP через SSH требуются особые соображения - см. Ссылку.)
FTPS (FTP через SSL) также может делать то, что вам нужно.
Вы также можете использовать SFTP-клиент, который поддерживает несколько соединений, но я не уверен, поддерживает ли SFTP несколько соединений для одного файла. Это должно делать то, что вам нужно в большинстве случаев, но может не дать вам максимальной пропускной способности, когда вам нужно передать только один большой файл.
источник
Решение 1. Я не уверен, что это целесообразно в вашем случае, но вы можете создать составной архив (например, разбитый на части файл tarfile или составной архив 7zip), а затем использовать несколько экземпляров rsync для их отправки сеть и собрать / извлечь их на другой стороне. Вы можете написать скрипт общего назначения, аргументами которого являются каталог, который нужно передать, и количество подключений, которые нужно использовать. Очевидным недостатком является то, что вам понадобится вдвое больше свободного пространства с обеих сторон, и у вас будут дополнительные накладные расходы на архивирование / извлечение файлов на обоих концах.
Решение 2: лучшим решением было бы написать скрипт или программу, которая делит большое дерево каталогов на поддеревья в зависимости от размера, а затем копирует эти поддеревья параллельно. Это может упростить ситуацию, если вы сначала скопируете всю структуру каталогов (без файлов).
источник
Вы две машины в надежной среде? Вы могли бы попробовать netcat . На стороне сервера:
и на клиенте:
Вы можете настроить клиентское соединение на использование ssh-туннеля:
Таким образом можно переместить даже весь раздел:
и на клиенте:
,
Заметка
Netcat - не самый безопасный инструмент передачи данных, но в правильной среде он может быть быстрым, потому что у него такие низкие издержки.
HowtoForge имеет хорошую страницу с примерами .
источник