SCP / SSH / SFTP Предложение по лучшей стратегии передачи файлов - PullRequest
0 голосов
/ 14 ноября 2011

Я сталкиваюсь с этой проблемой, из-за которой существующий скрипт выполняется слишком долго.При дальнейшем исследовании я выяснил, что это произошло потому, что для каждого переданного файла устанавливается новое SFTP-соединение.Конечно, массовая передача файлов будет намного быстрее.Есть ли какие-либо предложения относительно массовой передачи файлов, а также регистрировать каждый файл или только проблемные, т.е. файлы, которые вызывают ошибку при передаче только (это необходимо для простого отслеживания файлов в целях поддержки пользователей). В настоящее время я попытался реализовать сценарий сSFTP / SSH / SCP, все из которых имеют примерно одинаковую скорость передачи.Таким образом, любой из этих протоколов должен быть в порядке.Мне просто нужны идеи.

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

Как насчет использования файловых подстановочных знаков в шаблоне from-files?например,

cd sendDir; scp newFiles* user@remoteHost:/target/path

?

Вы писали: «Конечно, массовая передача файлов будет намного быстрее».Я надеюсь, ты шутишь.Необходимость перезапуска scp не будет иметь большого значения, если ваши файлы занимают минуты или часы для отправки.Предположительно, самая медленная часть передачи - это время, потраченное на передачу данных «по проводам».Итак ... хороший комментарий от @Johnsyweb по поводу использования сжатия scp, но это занимает время и может увеличить производительность процессора на 100%?сек, мин?Так как это повлияет на другую работу в процессе на вашей отправляющей стороне.Если вы делаете это для работы, и он будет использоваться много, это будет стоить тестирования.

Что касается информации о проблемных файлах, сохраните выходные данные из scp в лог-файл.

scp newFiles* user@remoteHost:/target/path > /tmp/yourSystem/scpScriptLogFile.txt 2>&1

И просмотрите, если вы считаете, что есть проблема ИЛИ после того, как вы получили некоторые сообщения об ошибках, сделайтеСкрипт фильтра, который отправляет вам информацию о любых проблемах.

Надеюсь, это поможет.

0 голосов
/ 15 ноября 2011

Используйте некоторый язык сценариев, для которого доступен модуль SFTP.

Например, в Perl у вас есть Net :: SFTP :: Foreign:

$sftp = Net::SFTP::Foreign->new($host);

for my $file (@files) {
  $sftp->put("$local_dir/$file", "$remote_dir/$file");
}

Таким образом, одно и то же соединение SSH будет использоваться для всех передач.

Другой вариант - создать файл архива локально (.tgz), а затем передать его и распаковать на удаленном хосте:

tar czf - file1 file2 ... | ssh $host tar xzf -
0 голосов
/ 14 ноября 2011

rsync - это бизнес.

rsync -chavz --partial --progress --stats source_files remotehost.domain:target_dir

Где:

--checksum             -c              -- skip based on checksums, not mod-time & size                                                                                                                   
--human-readable       -h              -- output numbers in a human-readable format                                                                                                                      
--archive              -a              -- archive mode; same as -rlptgoD (no -H)                                                                                                                         
--verbose              -v              -- increase verbosity                                                                                                                                             
--compress             -z              -- compress file data during the transfer                                                                                                                         
--partial                              -- keep partially transferred files                                                                                                                               
--progress                             -- show progress during transfer                                                                                                                                  
--stats                                -- give some file-transfer stats                                                                                                                                  

Самое замечательное в rsync состоит в том, что он копирует только то, чтонуждается в.Поэтому, если вы запускаете команду во второй раз, она вообще ничего не должна копировать (если только один из файлов не изменился с обеих сторон).Это также полезно, если ваш перевод каким-то образом прерывается.Вывод команды, приведенной выше, даст вам некоторую информацию о том, насколько он ускорил передачу файлов.

...