And*_*ion 71 file-transfer tar scp
我目前有两台 CentOS 服务器。我需要知道如何以及最快的方法是“tar”图像目录并对其进行 SCP 处理?
这是我刚刚建议的最快方法吗,因为 tarring 需要永远......我运行了命令:
tar cvf imagesbackup.tar images
Run Code Online (Sandbox Code Playgroud)
我打算把它scp过去。
让我知道是否有更快的方法。我可以远程/SSH 访问两台机器。
tyl*_*erl 105
您可以使用 ssh 通过网络直接写入远程服务器,而不是使用 tar 写入本地磁盘。
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Run Code Online (Sandbox Code Playgroud)
“ssh”命令后面的任何字符串都将在远程服务器上运行,而不是交互式登录。您可以通过 SSH 将输入/输出通过管道传入和传出这些远程命令,就好像它们是本地的一样。将命令放在引号中可以避免任何混淆,尤其是在使用重定向时。
或者,您可以直接在其他服务器上提取 tar 文件:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Run Code Online (Sandbox Code Playgroud)
注意很少使用的-C选项。意思是“在做任何事情之前先切换到这个目录”。
或者,也许您想从目标服务器“拉”:
server2$ tar -zx -C /destination < <(ssh server1 "tar -zc -C /srcdir ./path")
Run Code Online (Sandbox Code Playgroud)
请注意,该 <(cmd) 构造对于 bash 来说是新的,并且不适用于旧系统。它运行一个程序并将输出发送到一个管道,然后将该管道替换为命令,就像它是一个文件一样。
我可以很容易地将上述内容写成如下:
server2$ tar -zx -C /destination -f <(ssh server1 "tar -zc -C /srcdir ./path")
Run Code Online (Sandbox Code Playgroud)
或如下:
server2$ ssh server1 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Run Code Online (Sandbox Code Playgroud)
或者,您可以为自己省去一些悲伤,而只需使用 rsync:
server1$ rsync -az ./path server2:/destination/
Run Code Online (Sandbox Code Playgroud)
最后,请记住,在传输之前压缩数据会减少带宽,但在非常快的连接上,它实际上可能会使操作花费更多时间。这是因为您的计算机可能无法以足够快的速度进行压缩以跟上:如果压缩100MB 所需的时间比发送100MB所需的时间长,则发送未压缩的数据会更快。
或者,您可能需要考虑通过管道自行进行 gzip(而不是使用 -z 选项),以便您可以指定压缩级别。根据我的经验,在具有可压缩数据的快速网络连接上,在大多数情况下,在级别 2 或 3(默认为 6)使用 gzip 可提供最佳的整体吞吐量。像这样:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"
Run Code Online (Sandbox Code Playgroud)
pac*_*cey 12
如果您只是将它们压缩而没有其他任何事情,这将浪费大量时间,而速度增益却很小。
因此,简单地使用 cvf 开关对文件进行去皮将有效地花费读取所有 55GB 图像并将它们写回磁盘所需的时间。(实际上会浪费更多的时间,因为会有相当大的开销)。
您在这里只有一个优势,上传许多文件的开销正在减少。如果您压缩图像,您可能会获得更快的传输时间(但因为我相信它们已经是压缩格式,这不会有太大帮助)。只是更浪费计算时间。
通过网络传输巨大的 tar 档案的最大缺点是,如果出现问题,可能意味着您必须重新开始。
我会用这种方式:
md5sum /images/* > md5sum.txt
scp -r images/* user@host:/images/
Run Code Online (Sandbox Code Playgroud)
在新服务器上
md5sum /images/* > md5sum_new.txt
Run Code Online (Sandbox Code Playgroud)
然后只是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/untar,并且没有加密,但它直接发送到另一台服务器。将它们同时启动(-w5给你 5 秒钟的宽限期。)然后看着它运行。如果带宽紧张,请在两端的 tar 中添加 -z。
| 归档时间: |
|
| 查看次数: |
92746 次 |
| 最近记录: |