viv*_*oru 3 unix zip tar 7-zip
重要说明:压缩不是目标,归档/录音(将所有文件打包到一个档案中)才是目标。
我想备份一个目录,其中包含数百个子目录和数百万个小文件 (< 800 KB)。当使用rsync将这些文件从一台机器复制到另一台远程机器时,我注意到传输速度非常低,只有大约 1 MB/秒,而当我复制大文件(例如 500 GB)时,传输速度在事实上大约 120 MB/秒。所以网络连接不是问题。
在这种情况下,仅移动 200 GB 这样的小文件就花了我大约 40 个小时。所以我想压缩包含这些文件的整个目录,然后将压缩的存档传输到远程机器,然后在远程机器上解压缩。我不希望这种方法能将 40 小时减少到 5 小时,但我怀疑它肯定会花费不到 40 小时。
我可以访问具有14 个 CPU 内核(56 个线程——Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz)和 128 GB RAM 的集群。因此,CPU/RAM 功率不是问题。
但是,从这么多文件中创建单个存档的最快和最有效的方法是什么?我目前只知道这些方法:
tar.gz方法7zippigz(并行 gzip - https://zlib.net/pigz/)但是,我不知道哪个更快,以及应该如何调整参数以达到最大速度?(例如,使用 7zip 的所有 CPU 内核还是仅使用一个内核更好?)
NB文件大小和压缩率根本不重要。我根本不想节省空间。我只是想从这么多文件中创建一个存档,以便传输速率为 120 MB/s 而不是 1 MB/s。
相关:如何使 7-Zip 更快
使用tar,但放弃 gzipping 部分。TAR 的全部意义在于将文件转换为单个流(它代表磁带存档)。根据您的进程,您可以将流写入磁盘并复制它,但更有效的是,您可以将它(例如通过 SSH)通过管道传输到另一台机器 - 可能同时解压缩它。
因为该过程是 IO 密集型而不是 CPU 密集型,所以并行化该过程不会有太大帮助,如果有的话。您将减少文件传输的大小(如果文件不能被块大小完全整除),并且由于没有前后协商每个文件,您将节省很多。
要创建未压缩的 tar 文件:
tar -cf file.name /path/to/files
Run Code Online (Sandbox Code Playgroud)
要通过网络进行流式传输:
tar -c /path/to/files | ssh user@dest.domain 'cd /dest/dir && tar -x'
Run Code Online (Sandbox Code Playgroud)
注意:如果按照示例 1 将中间文件写入硬盘驱动器,如果压缩量足够大,实际上 gzip 文件可能会更快,因为它会减少写入磁盘的数量,这是过程。
| 归档时间: |
|
| 查看次数: |
7216 次 |
| 最近记录: |