我目前有两台CentOS服务器。我需要知道将图像目录“ tar”起来并将其SCP覆盖的最快方式和方法是什么?

这就是我刚才建议的最快方法,因为tarring永远都在做。 。我运行了命令:

tar cvf imagesbackup.tar images


我打算将其结束。

让我知道是否有更快的方法。我对两台机器都有远程/ SSH访问权限。

评论

Sneakernet?

参见unix.stackexchange.com/questions/227951/…

#1 楼

您可以使用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 server1 "tar -zc -C /srcdir ./path")


请注意,<(cmd)构造是bash的新增功能,不适用于较旧的系统。它运行一个程序并将输出发送到管道,然后将该管道替换为命令,就好像它是一个文件一样。

我可以很容易地将上面的代码编写如下:

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


或如下所示:

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


或者,您可以节省一些痛苦,而只需使用rsync:

或者,您可能希望考虑使用管道对自己进行gzip处理(而不是使用-z选项),以便可以指定压缩级别。我的经验是,在具有可压缩数据的快速网络连接上,在大多数情况下,使用2或3级的gzip(默认值为6)可以提供最佳的总体吞吐量。像这样:

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


评论


Rsync表现出色-即时压缩,复制整个文件夹,在断开的链接上恢复。一站式命令。爱它。这些是我发现有用的选项:z:压缩r:递归=复制子文件夹v:详细。我的Rsync命令示例:rsync -azvr / src-path / username @ dest_server:/ dest / path /

–堡垒
17年8月9日,0:32



在此特定用例中,rsync不一定是正确的工具。尽管它可以跳过下载已经传输的文件的能力显然可以克服这一缺点,但是它无法一口气复制许多小文件(例如55GB的图像),效率很低。

–克里斯·巴恩斯(Chris L. Barnes)
20 Mar 27 '20 at 16:59

#2 楼

我很想在自己身上同步它-它可以压缩并很好地处理链接丢失。

评论


rsync正是正确的工具。

–丰富
2010年12月2日,12:55

+1-Yay rsync!

–埃文·安德森(Evan Anderson)
2010年12月2日,14:08

+1,只是继续前进。另外,我真的很喜欢rsync。

–斯蒂芬星期一
2010年12月3日,下午3:31

但是,使用rsync时,无论如何都必须手动压缩数据(如果要存储压缩的数据)

– wlk
2012年8月3日,12:06

如何使用rsync存储压缩文件?

– Dolan Antenucci
2013年9月19日23:37

#3 楼

如果您只是将它们焦油化而已,那么只会以最小的速度增益浪费大量时间。

因此,只需使用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,并且由于此校验是在每个数据包上完成的,因此在传输过程中会进行非常精细的完整性检查。)因此,该协议本身速度较慢(由于额外的开销),但是成功完成转移实际上意味着已经将其整体转移了,不需要进行额外的检查。


评论


非常感谢您,md5sum在做什么? diff是什么?谢谢你,现在表演!

–安德鲁·时装(Andrew Fashion)
2010年12月2日,12:56

md5sum(或md5)对文件进行校验和。差异查找文件中的差异(man diff)。校验和会创建一个字符串(哈希),如果文件在传输过程中发生更改,则该字符串将被翻转,从而导致错误……当您再次将其放在另一侧时,它将不匹配。对于大文件,出错的机会更大。这就是为什么当您看到允许您下载.iso文件的网站时,它们通常具有MD5校验和供您比较下载的文件与之以确保文件匹配且没有损坏。

–巴特·银线
2010-12-02 13:01



scp是加密的,可以保证线路的完整性。当然,内存或磁盘上的数据损坏的可能性仍然很小,但这很少见。

– Ryan Bair
2010年12月2日,16:40

SFTP校验和的开销实际上在任何实际意义上是否重要?我无法想象。每32768个4字节听起来并不重要。每GB 128 kB。在无聊的理论意义上,称“慢”似乎有点夸大其词。

– underscore_d
15-10-27在19:16



#4 楼

在Pacey的md5sum建议的基础上,我将使用以下内容:

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

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

仍然是tar / unar,并且没有加密,但是直接到另一台服务器。同时启动它们(-w5为您提供5秒钟的宽限期。)并观察其进展。如果带宽太紧,请在两端的tar中添加-z。

评论


我认为这是另一种方法,首先他必须在目标位置执行(打开套接字),然后在源代码执行(派遣)

– Dimitrios Mistriotis
2010年12月2日,15:45

代替目标服务器,我是否只需将root@1.1.1.1放进去?

–安德鲁·时装(Andrew Fashion)
2010年12月2日,16:12

不,只是IP。 netcat除了TCP以外没有使用其他协议:)该命令也是上面给出的所有命令中最快的。源上每个文件只有一次读取,传输文件的确切最小网络流量是,目标上每个文件只有一个写入。如果您有多余的CPU周期,则添加-z标志(用于压缩)将进一步加快速度,因为必须传输的网络数据较少。

– Jeff McJunkin
2010-12-02 17:10



@ user36845-是的。我并不是在暗示上述顺序的时间顺序,但是您是对的,首先需要打开套接字。我将对其进行澄清。 :)

–SmallClanger
2010年12月2日在18:07

我不确定为什么ssh / scp的上限为125MB / s到133MB / s,但是netcat可以轻松地以〜380MB / s的速度传送数据(相同链接)

–雷神召唤师
18年5月17日在7:32

#5 楼

要点-并非所有主机都具有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。

希望这会有所帮助。

评论


他确实提到这是两个CentOS盒子,因此它们具有rsync和tar的文件兼容版本。创建了rsync之类的工具来替换cpio :)之类的工具。至少在不知道确切要从何处开始并适当过滤搜索结果的情况下,您无法使用cpio“恢复”。这是不必要的时间开销。话虽如此,有关“旧” UNIX盒的有用信息:)

–拉菲克·马尼亚尔(Rafiq Maniar)
2010-12-02 15:02



是的,那个cmmand让我迷路了哈哈

–安德鲁·时装(Andrew Fashion)
2010年12月2日,16:12

#6 楼

如果您具有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”选项可为您提供百分比的传输,如果您愿意的话,这会很好诸如此类的事情。

#7 楼

它们是否在共享网络上,而不需要互联网传输文件? NFS或FTP可能比SCP的开销快很多,尽管您在传输过程中会丢失加密。

评论


远程位置的不同服务器

–安德鲁·时装(Andrew Fashion)
2010-12-02 16:16

#8 楼

或者,您始终可以使用tar管道:

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


'j'= bzip2,如果tar支持,则可以对gzip或--lzma使用'z'。