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

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

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

所以我使用了以下命令:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

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

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

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

答案1

正如你所说,使用rsync

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

选项有:

-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

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

更多信息来自手册页

答案2

只需通过 ssh 使用 rsync 即可!

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

从手册页:

-A,--档案:这相当于-rlptgoD。这是表达您想要递归并想要保留几乎所有内容的快速方式(-H 是一个值得注意的遗漏)。上述等效性的唯一例外是指定 --files-from 时,在这种情况下不隐含 -r。

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

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

答案3

使用lftp,它比rsync 快得多,并且最适合镜像网站(许多小文件)。它还可以使用多个连接并行传输:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

如果一个连接中断,它将重新连接并继续。如果您中断传输,它将跳过现有文件并继续。

http://lftp.yar.ru/

答案4

另一种方法是通过 ssh 传输(可选压缩的)tar 文件:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"

相关内容