将数百万个文件从一台服务器传输到另一台服务器

yul*_*ika 16 performance scp rsync file-transfer

我有两台服务器。其中之一有 1500 万个文本文件(约 40 GB)。我正在尝试将它们转移到另一台服务器。我考虑过压缩它们并传输存档,但我意识到这不是一个好主意。

所以我使用了以下命令:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt
Run Code Online (Sandbox Code Playgroud)

但是我注意到这个命令只传输了大约 50,000 个文件,然后连接丢失。

有没有更好的解决方案可以让我传输整个文件集?我的意思是使用诸如rsync传输连接丢失时未传输的文件之类的方法。当另一个连接中断发生时,我会再次键入命令来传输文件,忽略那些已经成功传输的文件。

这是不可能的scp,因为它总是从第一个文件开始。

gar*_*Red 34

正如你所说,使用rsync

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt
Run Code Online (Sandbox Code Playgroud)

选项是:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers
Run Code Online (Sandbox Code Playgroud)

正如@aim 在他的回答中所说,确保你/在源目录上有一个尾随(两者都很好)。

来自手册页的更多信息

  • 通常没有什么理由不总是使用 rsync 而不是 scp。它的基本用法是相同的,并且提供了许多额外的方便功能。 (2认同)

小智 7

只需在 ssh 上使用 rsync!

rsync -av username@ip:/var/www/html/txt /var/www/html/

从手册页:

-a , -- archive:这相当于 -rlptgoD。这是一种表示您想要递归并想要保留几乎所有内容的快捷方式(-H 是一个明显的遗漏)。上述等价的唯一例外是指定 --files-from 时,在这种情况下不暗示 -r。

-v , --verbose:此选项会增加您在传输过程中获得的信息量。默认情况下,rsync 静默工作。单个 -v 将为您提供有关正在传输的文件的信息以及最后的简短摘要。两个 -v 选项将为您提供有关跳过哪些文件的信息,并在最后提供更多信息。只有在调试 rsync 时才应使用两个以上的 -v 选项。

请注意我是如何在文件夹末尾使用斜杠的 - 这很重要