在功能强大的群集上以最快的方式压缩(即存档为单个文件)数百万个小文件,以加快文件传输


2

重要说明:压缩不是目标,而是归档/录音(将所有文件打包到单个存档中)是目标。

我想备份一个目录,其中包含数百个子目录和数百万个小文件(<800 KB)。当rsync用于将这些文件从一台计算机复制到另一台远程计算机时,我注意到传输速度非常低,只有大约1 MB /秒,而当我复制大文件(例如500 GB)时大约120 MB /秒。因此,网络连接绝不是问题。

在这种情况下,仅移动200 GB这样的小文件花了我大约40个小时。因此,我正在考虑压缩包含这些文件的整个目录,然后将压缩的存档传输到远程计算机,然后在远程计算机上将其解压缩。我不希望这种方法可以将40小时减少到5小时,但我怀疑肯定会少于40小时。

我可以访问具有14个CPU内核(56个线程-Intel®Xeon®Gold 5120 CPU @ 2.20GHz)和128 GB RAM的群集。因此,CPU / RAM电源不是问题。

但是,从这么多文件中创建单个存档的最快,最有效的方法是什么?我目前仅了解以下方法:

但是,我不知道哪个更快,应该如何调整参数以达到最大速度?(例如,将所有CPU内核与7zip一起使用还是仅使用一个内核会更好?)

注意文件大小和压缩率根本不重要。我根本不想节省空间。我只是试图从这么多文件中创建一个档案,以使传输速率为120 MB / s,而不是1 MB / s。

相关如何使7-Zip更快


我想到的第一种可能的方法是:gzip然后tar:通过分别gzip压缩多个文件,您可以同时压缩多个文件(每个CPU线程最多压缩1个文件)。在您的情况下,这会将压缩时间除以最多 56。您可以使用gzip以外的任何其他压缩方法。
Nathan.Eilisha Shiraini,

压缩可能并不重要。另外,由于文件较小,因此通过单独压缩文件获得的收益可能会很小。如果总文件大小很重要,那么进行反向操作可能会产生更好的结果。
赛斯

如果只是想让连接完全饱和,压缩是否重要?不只是tar做这份工作吗?
Mokubai

Answers:


2

使用tar,但放弃gziping部分。TAR的全部目的是将文件转换为单个流(它代表磁带存档)。根据您的进程,您可以将流写入磁盘并将其复制,但是,更有效地,您可以将其通过管道(例如,通过SSH)传输到另一台计算机上-可能同时解压缩它。

因为该进程是IO而不是CPU密集型的,所以将进程进行并行化并没有多大帮助。您将减小文件传输大小(如果文件不能完全被块大小整除),并且由于没有用于协商每个文件的来回传递,您将节省很多

要创建未压缩的tar文件:

tar -cf file.name /path/to/files

要通过网络流式传输:

tar -c /path/to/files | ssh user@dest.domain 'cd /dest/dir && tar -x'

注意:如果按照示例1将中间文件写入硬盘驱动器,则在压缩程度不错的情况下,将文件gzip压缩实际上可能会更快,因为这会减少写入磁盘的速度,这是硬盘压缩的较慢时间。过程。


由于几乎所有文件都是.bmp,压缩无疑会大大减小文件的大小(尤其是如果我使用类似的文件,7z -mx9我肯定最终存档的压缩率至少为60%)。但是我一点也不在乎压缩率,对我来说,传输的速度以及尽快将文件放在远程计算机上是至关重要的。是不是7zip(.7z压缩)比更有效tar甚至录音?
vivoru

我已经调试了很多第二个例子。请检查这是否是您的意思。
卡米尔Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.