如何在linux中稳定地传输文件

如何在linux中稳定地传输文件

我正在尝试使用 SCP 将大量数据从 Windows 传输到 Linux。

scp GEOS* username@ip:/path/to/destination

可以。但是速度很慢,两小时后连接就会重置。

files.tar                                                                                                                                                     50% 9109MB   1.1MB/s 2:12:35 ETAConnection reset by IP port 22
files.tar                                                                                                                                                     50% 9109MB   1.0MB/s 2:27:19 ETAlost connection

我想知道是否还有其他更稳定的方法来实现它。

另外,我听说 rsync 可以继续中断的传输。我厌倦了

rsync -ht --progress --stats  GEOS* /path/to/destination

重启电脑后,我又尝试了一次。好像我又从零开始传输文件。

我想知道如何继续中断的传输。

谢谢,Lixu

答案1

弄清楚您实际在做什么很棘手,因为您引用的示例命令都无效 - 每个命令要么失败,要么无法执行您所说的操作。

我猜你的意思是这些:

scp GEOS* username@ip:/path/to/destination
rsync -ht --progress --stats GEOS* username@ip:/path/to/destination

如果不正确,请编辑您的问题以显示您执行的命令实际上尝试过,看看是否可以相应地更新我的答案。


rsync命令以两种不同的方式工作,具体取决于调用方式。

  1. Rsync 到两个看起来像是本地的路径。

    rsync /path/to/source/GEOS* /path/to/destination/
    

    由于两个原因,此版本的rsync命令无法重新启动。

    • 该文件没有传输元数据,因此rsync无法判断该文件是否是快捷方式的可能候选(使用rsync -a而不是仅仅rsync为了解决这个问题)。
    • 您使用的源路径和目标路径“看起来”像是本地路径。因此rsync无法以客户端/服务器方式运行,也不会尝试跳过已传输的文件部分。
  2. 本地和远程主机之间的 Rsync。

    rsync -ht --progress --stats GEOS* username@ip:/path/to/destination
    

    此版本的rsync命令以客户端/服务器模式运行,并且由于它包含文件时间戳(-t),因此在发生网络故障时将重新启动。

    注意此命令(本地/远程)与#1 无法有效重启的第二个原因(本地/本地)之间的区别。

我不建议使用--append或,--append-verify除非你可以绝对和完全保证源文件自第一次rsync尝试以来没有发生任何变化。即便如此,我通常也不会推荐它,因为它实际上并没有节省太多时间,而且在误用时确实大大增加了错误复制的机会。如果对文件是否被更改有任何疑问,使用--append或其变体之一将保证文件被错误复制,无法检测到。

相关内容