使用 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 上的磁盘使用情况分析器,但如果你能找到一个并发布你的发现,那将会很有帮助。