我正在本地网络内移动大约 20Gb(100 Mbit/秒)。这些文件来自典型的 Linux 桌面系统。
使用 Tar\Gzip 压缩它们然后发送它们是否会提高性能?
编辑:我正在移动开发人员的工作区,这意味着有很多源和 PDF,但没有太多的多媒体。
答案1
这很大程度上取决于您要移动的文件类型。
- 如果您的文件是 PDF、JPEG 电影、安装文件等,
它们可能已经被压缩,不会给您带来很大的优势。 - 如果其源文件压缩将非常有用。
- 如果有很多小文件,至少一个
tar
存档会很有用。
最后,如果您的源机器具有大量处理能力和内存,则
压缩将会很有用 - 否则仅tar
(基于以上几点)就足够了。
由于您的网络速度只有 100 Mbps,因此您应该倾向于压缩(如果有帮助的话)。
但是,如果您要传输的文件无法压缩太多,则
应该开始考虑传输时间
或者,您可以考虑使用其他介质进行传输(如 USB/DVD)。
答案2
除了文件类型之外,这尤其取决于数量文件。虽然理论上可以以网络速度传输大量数据,但文件系统操作(例如枚举文件和属性、创建和删除文件和属性)会产生大量开销。
如果您有大量小文件,则开销甚至可能比要传输的数据还大。
在这种情况下,在传输之前存档数据可以带来巨大的好处。如果数据压缩性很差(加密和/或已压缩数据),我建议不要压缩存档以节省大量时间 - 只需使用 tar。
如果文件是可压缩的(未压缩的位图、文本),那么压缩也可能有意义。
答案3
可能最快的技术是将数据打包,通过管道传输,然后在另一端解包。
像这样
$ tar -czf - root_dir | ssh -c blowfish remote_machine (cd parent_dir ; tar -xzf -)
-z 标志告诉 tar 进行压缩,这与单独的 gzip 步骤非常相似,如果您愿意,可以单独包含它。
如果您需要后续复制或同步数据,则可以使用 rsync(-z 提供压缩)。特别是,如果上述命令中断,rsync 将确认您的数据,并发送您错过的任何内容。
如果 ssh 不要求您输入密码,它会更干净,但我认为即使有密码它也能工作。
答案4
从技术上来说确实如此,不过在局域网中收益会很小。
基本上,在网络传输中,您会经历几个阶段,先请求目的地是否准备好接收您的信息,然后发送一些信息并检查它是否已成功接收。每个单独的文件都会产生一个额外的步骤,即“新文件传入”和“完成该文件”。因此,如果您将它们全部压缩/tar 在一起,那么您只会收到一条“新文件传入”消息和一条“完成该文件”消息,而不是数百或数千条用于发送非压缩文件的消息。
通过 LAN 传输文件时,可能需要更长的时间来压缩文件然后发送,而不是简单地发送。将发送介质更改为 WAN,然后压缩才是最佳方法。