将55GB图像传输到新服务器的最快方法

我目前有两个CentOS服务器。 我需要知道如何以及如何以最快的方式“tar”图像目录和SCP

这是我刚才build议的最快捷的方式,因为沥青正在永久…我跑了命令:

tar cvf imagesbackup.tar images 

而且我只是把它翻过来。

让我知道如果有更快的方法。 我有远程/ SSH访问这两台机器。

    您可以使用ssh通过networking直接写入远程服务器,而不是使用tar写入本地磁盘。

     server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz" 

    任何遵循“ssh”命令的string都将在远程服务器上运行,而不是交互式login。 您可以通过SSH将input/输出与这些远程命令进行pipe道通信,就像它们是本地的一样。 将该命令放在引号中可避免混淆,特别是在使用redirect时。

    或者,您可以直接提取其他服务器上的tar文件:

     server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination" 

    注意很less使用-C选项。 这意味着“在做任何事情之前先改变到这个目录”。

    或者,也许你想从目标服务器“拉”:

     server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path") 

    请注意, <(cmd) 构造对于bash是新的,不适用于较旧的系统。 它运行一个程序并将输出发送到一个pipe道,并将该pipe道replace为命令,就像它是一个文件一样。

    我可以很容易地写出如下:

     server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path") 

    或者如下所示:

     server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination 

    或者,你可以救自己一些悲伤,只需使用rsync:

     server1$ rsync -az ./path server2:/destination/ 

    最后,请记住,在传输之前压缩数据会降低您的带宽,但在非常快速的连接上,实际上可能会使操作花费更多时间 。 这是因为您的计算机可能无法快速压缩以保持:如果压缩 100MB比发送 100MB需要的时间更长,那么发送未压缩的速度会更快。

    或者,您可能需要考虑使用pipe道自定义gzip(而不是使用-z选项),以便可以指定压缩级别。 根据我的经验,在使用可压缩数据的快速networking连接时,在级别2或3使用gzip(缺省值为6)可以在大多数情况下提供最佳的整体吞吐量。 像这样:

     server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz" 

    我会试图rsync它自己 – 它压缩,并处理好链接丢失。

    如果你只是把他们打了,没有别的东西,这将浪费大量的时间,只有极小的速度增益。

    所以简单地使用cvf开关来定制文件将会花费时间读取所有55GB的图像并将其写回到磁盘。 (实际上会浪费更多的时间,因为会有相当大的开销)。

    您在这里获得的优势只有一个,上传许多文件的开销正在减less。 如果你压缩图像,你可能会得到更快的传输时间(但是因为我相信它们已经是压缩格式,所以不会有多大的帮助)。 计算时间只是更多的浪费。

    把一个巨大的焦油档案转移到电线上的最大缺点是,如果出现问题,可能意味着你必须重新开始。

    我会用这种方式:

     md5sum /images/* > md5sum.txt scp -r images/* user@host:/images/ 

    在新的服务器上

     md5sum /images/* > md5sum_new.txt 

    然后只是diff 。 而且由于scp支持dynamic压缩,所以不需要单独的归档。

    编辑

    我将保留MD5的信息,因为它对OP有用。 但是有一个评论让我有了新的见解。 所以一些search提供了这个有用的信息。 请注意,这里的主题是SFTP,而不是SCP

    与FTP相比,SFTP确实增加了文件传输的开销。 当文件在客户端和服务器之间传输时,它被分解成称为“数据包”的更小的块。 例如,假设每个数据包是32KB。 SFTP协议在发送每个32KB文件时执行校验和,并将该校验和与该数据包一起包括在内。 接收方获取该数据包并解密数据,然后validation校验和。 校验和本身比CRC32校验和“更强”。 (因为SFTP使用128位或更高的校验和,例如MD5或SHA,并且因为这是在每个数据包上完成的,所以作为传输的一部分来完成非常精细的完整性检查。)因此,协议本身是较慢的(因为额外的开销),但是成功完成转移意味着它已被整体转移,并且不需要额外的检查。

    在Pacey的md5sumbuild议之上,我会使用以下内容:

    在目的地: nc -w5 -l -p 4567 | tar -xvf - nc -w5 -l -p 4567 | tar -xvf -

    然后在源代码中: tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567 tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567

    它仍然是一个tar / untar,没有encryption,但是直接到另一个服务器。 开始他们两个串联( -w5给你5秒的恩典),并观看它。 如果带宽很紧,请在两端添加-z到tar。

    有一点 – 不是所有的主机都有rsync,可能主机可能有不同版本的tar。 出于这个原因,可以推荐使用经常忽略的cpio作为第一个停靠港。

    你可以通过SSH上的cpio来在主机之间进行文件/目录结构的临时复制。 通过这种方式,您可以更好地控制发送的内容,因为您需要“提供”cpio,nom-nom。 这也是更多的参数可移植性,cpio不会有太大的变化 – 如果您在异构环境中查看多个主机,这是一个重要的一点。

    复制/导出/主目录和子目录到远程主机的示例:

     cd /export/ find . home -print | cpio -oaV | ssh 10.10.10.10 'cd /export/home; cpio -imVd' 

    以上将复制/ export / home和任何子目录的内容到远程主机上的/ export / home。

    希望这可以帮助。

    我有ssh访问权限,你有rsync访问权限。

     rsync -av -e ssh /storage/images/ user@[ip or domain name]:/storage/images/ 

    要么

     rsync -av -e "ssh -l user" /storage/images/ [ip or domain name]:/storage/images/ 

    如果收到“rsync错误:main.c(977)[sender = 2.6.9]”中的某些文件无法传输(代码23)的错误,请检查服务器之间的用户和组; 你可能有一个不匹配的。

    如果您希望rsync压缩传输,请使用rsync“-z”选项。 此选项将使用更多的CPU,但带宽较less,所以要注意这一点。

    有一个“ – 进步”的选项,将给你一个百分比转移,这是一种很好,如果你喜欢这样的事情。

    他们是在一个共享的networking,而不是需要互联网传输文件? NFS或FTP可能要比SCP的开销快得多,尽pipe在传输过程中您将失去encryption。

    或者你可以使用tarpipe道:

     (cd /path && tar -cjf - * ) | ssh user@host 'tar -xjf - -C /path' 

    'j'= bzip2,如果你的tar支持,你可以使用'z'作为gzip或–lzma。