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


15

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

因此,我使用了以下命令:

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

但是我注意到该命令仅传输约50,000个文件,然后连接断开。

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

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

Answers:


33

如您所说,使用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在他的回答中所说的那样,请确保您/在源目录上有尾随(两个都很好)。

手册页中的更多信息


1
我建议添加-h标志以使用人类可读的单位。如果您想要更多的详细信息,可以选择以下几种:-i和/或-v/ -vv
nyuszika7h 2014年

2
通常,几乎没有理由不总是使用rsync而不是scp。它的基本用法是相同的,并且提供了许多其他方便的功能。
pimlottc 2014年

如果ssh不是您的选择,并且您不需要或不需要加密,则可以尝试使用我的脚本s3.amazonaws.com/skaperen/rsend
Skaperen 2015年

7

只需在ssh上使用rsync!

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

从手册页:

-a, - 存档:这相当于-rlptgoD。这是说您想要递归并想要保留几乎所有内容的快速方法(其中-H是明显的遗漏)。上述等效项的唯一例外是指定了--files-from时,在这种情况下不隐含-r。

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

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


您可能应该添加更多有关尾部斜杠重要性的信息。在rsync手册页上:“源上的尾斜杠会更改此行为,以避免在目标上创建附加目录级别。您可以将源上的尾部/视为“复制此目录的内容”,而不是“按名称复制目录”,但在两种情况下,包含目录的属性都将转移到目标位置上的包含目录。”
nyuszika7h 2014年

...以及标志的含义-av
MrWhite 2014年

0

使用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/


0

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

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.