如何通过网络压缩文件夹并将其从一台服务器传输到另一台服务器

如何通过网络压缩文件夹并将其从一台服务器传输到另一台服务器

我们是否有任何选项可以将文件夹从一台服务器传输到另一台服务器,这种方法更快、可压缩且带宽限制可设置?服务器在 Linux 上运行。

我尝试了 tar + ssh 但同样无法将带宽限制设置为 3 或 4 MBPS。

还有其他服务吗?

答案1

您可以使用同步可以选择--bwlimit=限制带宽并-z在传输过程中压缩文件数据。例如,使用 SSH 作为传输。

答案2

bsdtar cf - . | xz | pv -L 3m | ssh host 'cd /there && xz -d | bsdtar xpSf -'

(这里使用 bsdtar,因为其他文件通常不存储所有文件元数据)。

xz可能是您可以获得的最佳压缩(但非常占用 CPU 资源),pv用于速率限制(请注意,它是 3 兆 (2 20 )字节每秒)。

如果用于备份并且您想保留 uids/gids,请将该选项添加--numeric-owner到第二个。bsdtar

rsync这比使用(压缩)进行完整传输更有效(就两台服务器上的带宽和资源而言)xz,但如果您需要恢复传输或同步具有共同文件的文件夹,那就是rsync派上用场(但请rsync仔细阅读手册页以选择需要哪些选项来保留要保留的元数据)。

答案3

为了微调网络吞吐量,还有一些工具,例如流媒体或者缓冲区

例如,除了-t num将数据吞吐量限制为num每秒字节数之外,它cstream不仅可以-b num选择设置用于读/写的块大小,还可以-B num选择在写入之前将输入块缓冲最多num字节。

ssh作为and的替代方案,rsync您可以尝试nc (netcat)or ncat,特别是如果数据流不打算通过互联网传输。ncat是 Nmap 项目的一部分,并且具有 SSL 支持。

# netcat + tar + cstream example to throttle network throughput
# requires netcat on both servers
# cf. http://superuser.com/questions/291803/best-way-to-copy-millions-of-files-between-2-servers/
# cstream -T 10 -t 4m </dev/urandom >/dev/null   # test

nc -l -p 2342 | tar -C /target/dir -xzf -                       # destination box
tar -cz /source/dir | cstream -T 30 -t 4m | nc Target_Box 2342  # source box

相关内容