将大约300GB的文件从一台服务器传输到另一台服务器


20

我今天有大约200,000个文件正在传输到新服务器。我以前没有做过如此大规模的事情,并且想就我应该如何做得到一些建议。我正在两个Centos 6发行版之间移动它们,它们在该国的不同位置。我在原始服务器上没有足够的HDD空间,无法将所有目录和文件压缩到一个庞大的tarball中,所以我的问题是我应该如何传输所有这些文件?rsync?一些使用rsync的特殊方式?关于如何做的任何投入/建议都将是惊人的。

谢谢

编辑:对于那些想知道的人,我强烈建议screen在运行这样的大型rsync命令时使用a 。尤其是当可能发生一些愚蠢的事情并且您失去了与运行rsync命令的服务器A的连接时。然后,只需拆下屏幕,然后再恢复即可。


4
你有尝试过rsync吗?也许只有一小部分文件?应该是理想的工具。
slhck

几乎可以肯定,它不是完成这项工作的最佳工具,但是您可能对以下事实感兴趣:可以通过ssh连接流式传输tar,而不必在移动文件之前将其压缩为文件:tar cz | ssh user@example.com tar xz
Aesin

2
它可能是不合时宜的,但是(特别是对于初始负载,然后rsync用于后续更新):“永远不要低估充满磁带的旅行车的带宽”(即:您是否考虑过放置第二个HD(或插入USB2) / USB3盘),它的备份,并发送一个通过联邦快递到远程位置这可能是速度远远超过其他任何东西,并节省带宽用于其他用途?
奥利维尔·杜拉克

我对一个提供商没有任何带宽限制,而我本月也不会达到其他限制。因此,我真的没有浪费它的问题:P
MasterGberry

1
@OlivierDulac what-if.xkcd.com/31
Bob

Answers:


24

充实Simon的答案rsync是完成这项工作的完美工具:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

假设您具有对远程计算机的ssh访问权限,则需要执行以下操作:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

这会将目录复制path/to/local/foo/path/to/remote/bar远程服务器上。bar/foo将创建一个名为的新子目录。如果只想复制目录的内容,而不在目标机上创建该目录的目录,请添加斜杠:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

这会将内容复制foo/到远程目录bar/

一些相关选项:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

所以我能做rsync -hrtplu --progress,如果我想看到的进度是要一起去吗?
MasterGberry

@MasterGberry,是的。我有一个运行的备份脚本rsync --progress --stats -hrtl --update source destination

我似乎在运行它方面遇到问题。 rsync -hrtplu --progress --rsh='ssh -p2202'是我正在使用的,它无法连接。持续收到255错误。但是我被淘汰了。所以我知道它不是防火墙...我是否还需要通过cmd提供密码?还是不就问我呢?
MasterGberry

Derp,nvm。我忘记了防火墙上的出站流量。谢谢
MasterGberry

重要说明:使用rsync时,请在使用“ --delete”时格外小心:请仔细阅读有关内容,在其他(/ tmp / ...)文件夹中进行测试,并注意在添加或不添加尾随“ /”时的更改在源目录或目标目录的末尾。
Olivier Dulac

14

它取决于需要复制的速度以及可用的带宽。

对于较差的网络连接,请考虑装有磁带的卡车的带宽。(阅读:邮寄2.5英寸HDD,或自己将其驱动。应该很容易找到300 GB的驱动器)。

如果时间紧迫性较差,或者您有足够的带宽,则rsync很好。如果出现错误,您可以继续操作而无需重新复制较早的文件。

[编辑]我忘记补充一点,如果在复制过程中使用了数据,则可以多次运行rsync。

示例:
1)正在使用数据。Rsync->复制所有数据。这可能要花点时间。
2)再次运行rsync,仅复制更改的文件。这应该很快。

您可以多次执行此操作直到没有更改为止,或者可以通过在复制过程中将数据设置为只读来以智能/安全的方式进行操作。(例如,如果共享位于只读的已使用共享集上。或rsync数据,则晚上在第二次运行共享时将其设置为只读)。


1
没有服务器应该生活在带宽无法在合理的时间内处理300G的地方……
2013年

1
那取决于什么是“合理的”。假设最弱的链接是100兆位(我不在乎这是从办公室上传的限制还是从其他地方下载的限制)。大约可以达到10MB /秒。(除以10的div似乎是合理的,我知道,如果一切顺利的话,您可以得到更多。例如,没有其他人将这条线用于任何用途)。10MB /秒~~ 600MB /分钟~~ 36000MB /小时~~ 36 GB /小时~~ 300GB是8h20min。那在一夜之间是可行的。这也有很多假设。例如,如果上传的速度仅为2兆位(我们的办公室拥有这些速度),则需要50倍的时间(415小时或17.3天)。
亨内斯2013年

kes!是的,8-10是合理的,但是我确实做了很多假设。
2013年

2
@Dan如果要求服务器启动并处理请求,则饱和上游带宽可能不是一个好主意。因此,您必须人为地限制传输速度以解决此问题。
Bob

6

我会去rsync的!我正在使用它将我的服务器备份到非现场服务器,并且工作正常。通常,有几MB可以复制,但是有几天它可以达到20-30GB,并且始终可以正常工作。


0

使用千兆连接通过NFS进行rsync大约需要10个小时。最好在HDD上复制数据并在服务器之间移动它们。如果需要实际磁盘的一对一副本,请使用dd或类似的方法创建磁盘的原始映像。使用ssh(scp)会导致巨大的开销。对千兆连接进行了经验测试。rsync可以在HA或备份模式下使用的两台服务器之间实现增量同步。我猜。


此答案的语言和样式需要改进。
FSMaxB 2013年

如果文件在复制过程中可以更改,则Rsync尤其有用。只需运行几次。第一次复制所有数据。第二次只有第一(长)份副本中的更改。第三次是在晚上进行,或者共享为只读。
亨内斯2013年

will took nearly about 10h. It will be better to copy data on HDD and move them between server.除了在全国范围内,所以需要更长的时间。
罗布

@FSMaxB:我稍后再说,谢谢。
Pawel

@Rob:我已经读过;)服务器位于两个不同的位置。因此,您需要计算出什么对您更好。穿越全国(检查燃油成本等)或使用网络连接。有什么会更有益的。
Pawel

0

首次使用NFS和tar / untar(在这种情况下,NFS是最快的协议,tar通过提高CPU利用率来节省网络带宽)

tar cf - * | ( cd /target; tar xfp -)

下次使用rsync


如果您有足够的CPU能力,则可以通过在循环中添加gzip来改善这一点。如果没有NFS,则可以使用netcat。(甚至都:tar -cf - * | gzip | nc -p 4567nc -l 4567 | gunzip | tar xf -
亨尼斯

感谢亨尼斯,这是我的想法,但我在管道忘记的gzip
喷气
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.