我目前有两个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。