Как эффективно передавать удаленно миллионы файлов - PullRequest
1 голос
/ 07 марта 2012

В некоторых машинах есть почти пять миллионов небольших (50 КБ) текстовых файлов. Мне нужно отправить их на другую машину в нашей локальной сети. Я пытался сделать

scp *.txt remote_machine:

так как соединение ssh между ними установлено без пароля. Но для каждого файла устанавливается новое соединение, поэтому оно кропотливо медленное.

Интересно поэтому, что было бы лучшей стратегией для этого?

Ответы [ 4 ]

4 голосов
/ 07 марта 2012

Вы можете сделать файл files.tar.gz перед передачей.

1 голос
/ 07 марта 2012

Не уверен, что scp многопоточный.Если нет, попробуйте что-то вроде этого, так что лучше используйте все ядра / процессоры и пропускную способность сети:

scp [A-M]*.txt remote_machine:
scp [M-Z]*.txt remote_machine:
scp [0-9]*.txt remote_machine:
...

Конечно, используемые шаблоны зависят от имен ваших файлов.

Вместо scp выможно также использовать rsync с тем же подходом.

1 голос
/ 07 марта 2012

.tar.gz файлы вместе и un.tar.gz файлы отдельно на другом конце.

tar cz *.txt | ssh remote_machine 'tar xz'

Сам Ssh замедляет работу. Если вы копируете между узлами в одной сети, и безопасность не является проблемой, может быть лучше использовать необработанное tcp-соединение.

remote_machine$ nc -l 3333 -q 1 | tar xz
local_machine$ tar cz *.txt >/dev/tcp/remote_machine/3333

Если вы хотите использовать другой номер порта из 3333, убедитесь, что вы изменили его в обеих строках.

1 голос
/ 07 марта 2012

хорошо, ssh также означает шифрование / дешифрование, почему бы вам не использовать ftp для передачи ... если безопасность не является реальной проблемой?

Более того, вы можете заархивировать данные и распаковать их после передачи ... если ваша сеть работает медленно.

Короче говоря, введите следующую команду для создания архива ..

cd /path/to/transfer/folder
tar -cvpjf /tmp/transfer.tar.bz2 .

для передачи вы будете выдавать команду

ftp open remotemachine
put /tmp/transfer.tar.bz2

при получении, вы будете вводить команду в папке, которую вы хотели выдать всем ...

cd /path/where/to/extract
tar -xvpjf ~/transfer.tar.bz2
rm ~/transfer.tar.bz2

определенно ваммогу автоматизировать, я автоматизировал этот процесс для меня, чтобы передать большой кусок данных к цели ...

...