ext4 格式的移动硬盘在传输大文件时会速度会周期变化

原来 ntfs 格式的机械硬盘被我弄坏了(非物理),于是格式化成 ext4 并抱着在 Linux 下 ext4 格式能比 ntfs 传输更快的希望。但在传输大文件(16G左右)的时候会发生文件在传送 2G 左右后速度突然变慢(从 200MB/s 变成小于 5MB/s)。

然后在 100KB/s 和 100MB/s 间波动(常态是 5MB/s 以下),怀疑此时比初始速度慢是这块硬盘的某种缓存机制造成开始速度很快,但无法理解周期性速度降到零的情况。

现在处于想格式化成 ntfs 但是又不确定是硬件还是配置问题的状态

图片

格式化回ntfs再次测试? ntfs下传输同样的大文件有无此现象? 测试结果是否显示ntfs与ext4有明显差距?

此外,硬盘是否为smr盘?

硬盘内的缓存机制肯定是硬盘的写速度周期性降到很低的原因之一。另外,EXT4文件系统本身使用硬盘的方式、磁盘本身的结构也是原因。

硬盘可以看作是只有一个磁头,读和写数据都靠移动磁头到旋转的盘面上的目标位置来实现。EXT4使用硬盘时先在盘面上分配若干个大块连在一起的空间来写,这些大块的空间用地差不多之后再申请若干个大块的空间继续写,直到盘面的空间被用完。大文件首先写的2GB左右,应该是硬盘内的缓存作用,加上早先申请的大块空间连续在一起,磁头基本不怎么移动、靠盘面的旋转来把数据填到盘面的连续空间里,这种按顺序的方式填、文件的元数据也在附近带来的磁头额外移动少,因此速度快到200MB/s左右。这些大块用完之后,EXT4分配新的大块继续填文件的数据。但这时硬盘的缓存基本是用完了,虽然磁头有可能仍然有大量数据的顺序写(也就是性能可以回到100MB/s左右 ),但也需要更多地移动磁头去修改和更新这个大文件已经写到磁盘上的元数据来让EXT4能够找到这个大文件在新申请的大块里新写的数据,而磁头的移动对磁盘性能影响很明显,所以写文件的数据的速度就降地很低到5MB/s左右。