【问题标题】:SCP/SSH/SFTP Suggestion on best file transfer strategySCP/SSH/SFTP关于最佳文件传输策略的建议
【发布时间】:2011-11-16 00:59:45
【问题描述】:

我正面临这个问题,即现有脚本运行时间过长。在进一步调查中,我认为这是因为对于传输的每个文件都建立了一个新的 SFTP 连接。当然批量传输文件会快得多。是否有关于批量传输文件以及记录每个文件或仅记录有问题的文件的建议,即仅导致传输错误的文件(这需要便于跟踪文件以供用户支持目的)。目前我已尝试使用实现脚本SFTP/SSH/SCP 所有这些都具有大致相同的传输速度。所以这些协议中的任何一个都应该没问题。我只是需要一些想法。

【问题讨论】:

    标签: unix ksh


    【解决方案1】:

    如何在源文件模式中使用文件通配符?即

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

    例如?

    您写道“当然批量传输文件会快得多。”我希望你在开玩笑。如果您的文件需要几分钟或几小时才能发送,那么必须重新启动 scp 并不重要。据推测,传输中最慢的部分是“在线”发送数据所花费的时间。所以......来自@Johnsyweb 的关于使用 scp 压缩的好评论,但这需要时间并且可以使 CPU 达到 100% 的峰值?秒,分钟?那么这将如何影响您发送方正在进行的其他工作。如果您这样做是为了工作,并且会被大量使用,那么值得测试。

    关于问题文件的信息,将 scp 的输出保存到日志文件。

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

    并在您认为存在问题时进行审查,或者在捕获到一些错误消息后,制作一个过滤器脚本,通过电子邮件向您发送有关任何问题的信息。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      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 的优点在于它只复制它需要的东西。因此,如果您再次运行该命令,它根本不会复制任何内容(除非其中一个文件同时在任一端发生了更改)。如果您的传输以某种方式中断,这也很有用。上述命令的输出将为您提供一些关于它加快了文件传输速度的信息。

      【讨论】:

      • 目前服务器中没有安装 rsync。有没有其他方法可以使用 SFTP/SSH/SCP 做同样的事情?
      • 它很容易安装。见rsync.samba.org。如果做不到这一点,您可以检查manpage for scp 并调整压缩设置等...
      【解决方案3】:

      使用一些可以使用 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 -
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-22
        • 2014-07-30
        • 2013-12-15
        • 1970-01-01
        • 2018-11-05
        • 2013-02-09
        • 1970-01-01
        • 2016-09-30
        相关资源
        最近更新 更多