我目前有两台CentOS服务器。我需要知道将图像目录“ tar”起来并将其SCP覆盖的最快方式是什么?
这是我刚刚建议的最快方法,因为焦油永远消耗着……我运行了命令:
tar cvf imagesbackup.tar images
我打算把它结束。
让我知道是否有更快的方法。我对两台计算机都有远程/ SSH访问权限。
我目前有两台CentOS服务器。我需要知道将图像目录“ tar”起来并将其SCP覆盖的最快方式是什么?
这是我刚刚建议的最快方法,因为焦油永远消耗着……我运行了命令:
tar cvf imagesbackup.tar images
我打算把它结束。
让我知道是否有更快的方法。我对两台计算机都有远程/ SSH访问权限。
Answers:
您可以使用ssh通过网络直接写入远程服务器,而不必使用tar写入本地磁盘。
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
跟随“ ssh”命令的任何字符串都将在远程服务器上运行,而不是交互式登录。您可以通过SSH将输入/输出与那些远程命令进行管道传输,就像它们是本地的一样。将命令放在引号中可以避免任何混乱,尤其是在使用重定向时。
或者,您可以直接在其他服务器上提取tar文件:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
请注意很少使用的-C
选项。这意味着“在执行任何操作之前先更改此目录”。
或者,也许您想从目标服务器“拉”:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
请注意,该 <(cmd)
构造是bash的新增功能,不适用于较旧的系统。它运行一个程序并将输出发送到管道,然后将该管道替换为命令,就好像它是文件一样。
我可以很容易地将上述内容写成如下:
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 所需的时间长,则发送未压缩的速度更快。
或者,您可能需要考虑使用管道进行gzip压缩(而不是使用-z选项),以便您可以指定压缩级别。我的经验是,在具有可压缩数据的快速网络连接上,在大多数情况下,使用2或3级的gzip(默认值为6)可以提供最佳的总体吞吐量。像这样:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"
如果您只是将它们焦油化而已,那么只会以最小的速度增益浪费大量时间。
因此,只需使用cvf开关对文件进行涂脂即可有效地花费读取所有55GB图像并将它们写回到磁盘所需的时间。(实际上,由于存在相当大的开销,这将浪费更多的时间)。
您在这里获得的唯一好处是,减少了上传许多文件的开销。如果压缩图像,可能会获得更快的传输时间(但是由于我相信图像已经是压缩格式,所以不会有太大帮助)。只是浪费了计算时间。
通过电线传输巨大的tar存档的最大缺点是,如果出现问题,可能意味着您必须重新开始。
我会用这种方式:
md5sum /images/* > md5sum.txt
scp -r images/* user@host:/images/
在新服务器上
md5sum /images/* > md5sum_new.txt
然后就diff
。由于scp支持动态压缩,因此无需单独的存档。
我将保留MD5信息,因为它对OP很有用。但是有一条评论使我有了新的见解。因此,进行一些搜索即可提供此有用的信息。 请注意,此处的主题是SFTP而不是SCP。
与FTP相比,SFTP确实会增加文件传输的开销。当文件在客户端和服务器之间传输时,它被分解成称为“数据包”的较小数据块。例如,假设每个数据包是32KB。SFTP协议在发送每个32KB文件时都会对其执行校验和,并将该校验和与该数据包一起包括在内。接收者获取该数据包并解密数据,然后验证校验和。校验和本身比CRC32校验和“强”。(由于SFTP使用128位或更高的校验和,例如MD5或SHA,并且由于此校验是在每个数据包上完成的,因此在传输过程中会进行非常精细的完整性检查。)因此,该协议本身比较慢(由于额外的开销),但是成功完成转移实际上意味着,
除了Pacey的md5sum建议,我将使用以下内容:
在目的地: nc -w5 -l -p 4567 | tar -xvf -
然后在源上: tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567
它仍然是tar / unar,并且没有加密,但是直接连接到另一台服务器。串联启动它们(-w5
给您5秒钟的宽限期。),然后观察它。如果带宽太紧,请在两端的tar中添加-z。
一点-并非所有主机都具有rsync,并且主机可能具有不同版本的tar。因此,可以建议使用经常被忽略的cpio作为第一个呼叫端口。
您可以通过ssh进行cpio,以在主机之间进行文件/目录结构的临时复制。这样,您就可以更好地控制需要发送的cpio nom-nom的发送内容。它还具有更多的参数可移植性,cpio并没有太大变化-如果您要在异构环境中照顾多个主机,则这一点很重要。
将/ export / home和子目录复制到远程主机的示例:
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,但占用的带宽更少,因此请注意。
有一个“ --progress”选项将为您提供一定百分比的转让,如果您喜欢这种事情,那会很好。