我拥有一个 Seagate Expansion Desktop 5TB 外置硬盘,根据hdparm. 虽然在互联网上找到的信息尚无定论,但我强烈怀疑该驱动器使用叠瓦式磁记录——我观察到的 I/O 模式很难用其他方式解释。显然,它属于驱动器管理的类型,因此对用户(和操作系统)是透明的。
阅读这项技术,我发现对于即将到来的主机管理(部分地,主机感知)类型,驱动器的每个区域都将有一个关联的写指针,并且设备驱动程序和文件系统将必须始终继续写入该位置的区域。或者,要完全重写区域,可以将写指针重置到开头。我假设驱动器管理的 SMR 驱动器的工作原理相同,驱动器控制器管理区域访问。任何不碰巧落在写指针上的写操作都将首先放入随机访问持久缓存,从而在大多数情况下保持速度。
然而,由于操作系统不知道这是一个 SMR 驱动器(即使它正确猜测,它也不知道区域边界在哪里),它无法告诉驱动器重置写入指针区。第一次填充区域后,任何后续写入命令(不会一次写入整个区域)将触发读取-修改-写入循环。至少,这就是我的假设,为什么我不能传输连续的 100 GB 文件,而在第一个 20 GB 左右的速度之后,速度不会磨到个位数 MB/s。(它很可能是写入驱动器的一个区域,该区域以前被一个大文件占用,此后已被删除。)
那么,有没有人知道,或者有没有人甚至想知道是否有任何方法可以告诉驱动器管理的 SMR 驱动器特定区域不再包含任何有用的数据,并且可以安全地部分覆盖而无需先通过缓存?(我可以想象一个安全擦除来触发它,但这几乎不是人们经常做的事情。)