为什么我的电脑在将大量小文件从外部驱动器复制到另一个驱动器时速度如此之慢

为什么我的电脑在将大量小文件从外部驱动器复制到另一个驱动器时速度如此之慢

使用 Linux,我使用 rsync 复制 60Gb 的文件,并将其切成非常小的文件(每个 1MB),我以为复制会受到目标硬盘的最大写入速度的限制,但似乎我的整个系统变得非常慢(例如解锁大约需要 5 分钟)源是外部硬盘,目标也是,均通过 USB3.0 插入。

使用“htop”监控我的系统显示 CPU 几乎未使用,内存大部分可用。我将尝试使用“cp”复制文件,但我怀疑不会有任何区别。是什么导致了此性能问题?为什么在两个外部硬盘之间复制会导致我的内部系统出现性能问题?

我认为这是无法解决的,但我想了解一下。

答案1

将 60gb 文件复制到驱动器和将 600 个 10mb 文件复制到驱动器之间存在明显的程序差异。

文件传输过程包括对每个传输的数据包进行“握手”和验证过程,通常在文件完成后发生,因此整个文件都经过验证。此过程会增加文件传输的时间。

如果您传输一个文件,则会发生一次。如果传输 600 个文件...嗯,就会发生 600 次。

此外,如果您正在运行 USB2,那么该管道很可能是罪魁祸首 - - USB 2 只有 480mbit/秒,这相当缓慢且繁琐,并且由于您的驱动器要复制/握手/验证 60,000 多次,所以它会花费非常长的时间...

如果您想要备份此类数据,更好的方法是将文件执行 tgzip 或压缩为更少的较大文件,然后将其复制过去。但是,如果您这样做,如果您打算在另一端“解压缩”它们,请不要以为您会节省时间!

内置和外置之间的真正区别在于,内置驱动器运行的“管道”比外置 USB 驱动器大 45 倍且速度更快。这是一个巨大的差异……

当复制大量文件(例如您的描述)时,这会产生巨大的差异:您可以一次复制和验证数百个文件,而外部 USB2 端口每次只能复制和验证几个文件。

一个简单的类比是灌满一加仑水的过程。您的外部 USB2 端口相当于一根吸管……这需要一段时间,而且您必须在灌水时停下来喘口气……您的内置驱动器相当于使用花园软管……只需几秒钟即可完成……

如果您的系统正在将内部驱动器复制到外部驱动器,那么您的系统很可能不会让内部驱动器“自由”地进行其他活动,从而有效地“锁定”系统,并让您认为系统在此期间被冻结了……

答案2

这是由于硬盘驱动器的限制而发生的。您可以拥有出色的处理器、快速的 RAM、出色的主板等,但它处理和加载的所有数据都存在于硬盘上。当您复制大量小文件时,硬盘必须为每个文件写入附加信息。文件类型、起始位置和结束位置以及其他数据。当您写入单个大文件(.zip、.rar、.7z、.gz)时,它不必在驱动器上写入所有其他数据,因为压缩协议稍后会处理这些事情。

您已耗尽驱动器的读/写空间。它以如此小的增量写入太多数据,以至于驱动器没有足够的空间读取数据以解锁操作系统或打开程序。

我不熟悉 Linux 上的磁盘使用情况分析器,但如果你能找到一个并发布你的发现,那将会很有帮助。

相关内容