我有两台服务器。其中之一有 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'
如果一个连接中断,它将重新连接并继续。如果您中断传输,它将跳过现有文件并继续。
答案4
另一种方法是通过 ssh 传输(可选压缩的)tar 文件:
tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"