cp -R 或解压 tar.gz 文件哪个更快?

But*_*kus 2 compression copy centos

我有一些 tar.gz 文件,在 CentOS 系统上总共有很多 GB。大多数 tar.gz 文件实际上很小,但带有图像的文件很大。一个是7.7G,另一个是4G左右,还有一对1G左右。

我已经解压了一次文件,现在我想要所有这些文件的第二个副本。

我认为复制解压缩的文件比重新解压缩它们要快。但是我大约在 10 分钟前开始运行 cp -R 并且到目前为止复制了不到 500M。我确信拆包过程更快。

我对吗?

如果是这样,为什么?解包比简单地复制现有结构更快似乎没有意义。

cyb*_*x86 9

考虑两种情况:

  • 复制要求您从磁盘读取完整文件并将其写入磁盘
  • Tar-Gzip 要求您从磁盘读取较小的文件,解压缩,然后将其写入磁盘。

如果您的 CPU 没有被解压过程占用,那么 I/O 操作受到限制是理所当然的。根据这个论点(并且由于您必须在两种情况下写入相同的数量),读取较小的文件(tar.gz)比读取较大的文件花费的时间更少。还节省了时间,因为读取单个文件比读取许多小文件更快。

节省的时间取决于读取 (I/O) 和解压缩 (CPU) 所花费的时间之间的差异。因此,对于最小可压缩性的文件(例如已经压缩的文件,如mp3、jpg、zip等),解压所需的时间很可能大于读取操作节省的时间,实际上将是解压比复制慢。

(值得注意的是,I/O 越慢,使用压缩文件节省的时间就越多 - 如果复制操作的源和目标位于同一物理磁盘上,则会出现这种情况。)

  • +1 但是...某些文件类型不能很好地压缩,或者根本不能压缩,并且上述内容不适用于这种情况,在这种情况下,副本实际上可以更快。可以肯定的是不寻常,但它确实发生了。 (3认同)
  • cp 还必须处理文件系统开销以读取属性和获取目录列表——这对于一大群小文件来说可能很重要。tar 只是从单个文件中读取,因此不必担心。 (2认同)