这是SATA次优的领域之一。问题出在存储设备互连协议级别,因此与您正在运行的软件无关。使用另一台文件复印机或另一台操作系统不会神奇地使事情变得更好,只是它可能会尝试设置不同的超时值以减少问题的影响(这可能会或可能不会,具体取决于硬件和固件;请参见下文)。 )。
这里有一些要点:
- 使用SATA,如果驱动器停止响应,则可能会占用整个存储系统,而不仅仅是出现问题的一个驱动器。当然,它有可能捆绑整个控制器,并且由于大多数消费者系统只有一个磁盘控制器(集成在主板上的一个磁盘控制器),因此意味着所有存储空间。如果驱动器以某种非标准和/或意外的方式发生故障,则更糟,如果驱动器处于临界状态,则肯定会发生这种情况。您可能对以下硬件感兴趣:硬件SATA RAID-10阵列中的单个磁盘如何使整个阵列停止运转?服务器故障。
- 大多数消费者SATA驱动器具有较长的默认超时时间(以分钟为单位),并且许多消费者SATA驱动器缺乏可配置的错误恢复控制。所谓的“ NAS”驱动器通常具有可配置的ERC,而高端驱动器实际上总是如此。此类驱动器的默认超时时间也可能较短(常见值为7秒)。如果驱动器仅保留数据副本,则较长的超时时间是有利的,这在用户系统上很常见;它们在冗余配置中是不利的,或者您只是想在驱动器进一步恶化之前尽可能多地离开驱动器。
- 驱动器将继续尝试读取坏扇区,直到达到超时阈值或主机发出中止信号为止。由于可以通过等待读取完成来捆绑SATA总线,因此操作系统可能无法发出存储级命令中止的信号,并且在极端情况下,驱动器甚至可能无法很好地响应SATA总线复位在这种情况下。
第一点是服务器上SAS的主要卖点之一;SAS有显著比SATA更好的错误处理。第2点是驱动器固件的限制,第3点实际上仅是由于#2而成为问题。
因此,发生的情况是操作系统向磁盘发出了“读取扇区”命令,并且特定的扇区受到了某种程度的损坏。因此,磁盘进入重试模式以尝试从磁盘中取出数据,一次又一次地尝试读取,直到获得足够的数据以使磁盘自身的纠错(FEC)能够纠正剩余的错误。如果您不走运,可能永远都不会,但是驱动器将继续尝试相当长的时间,然后再决定读取不会成功。
由于操作系统正在等待读取,因此这至少会减慢复制到爬网的速度,并且取决于确切的OS体系结构,可能会导致OS在整个过程中变得生硬甚至冻结。此时,磁盘正忙于原始读取,并且直到当前正在执行的读取结束(成功或不成功)之前,它都不会响应其他读取命令,并且其他软件通常不会比其操作系统更好。正在运行。
因此,任何触发其他地方(理想情况下,仅在损坏的驱动器上)读取的内容都必须排队等待,直到损坏的驱动器成功读取所讨论的扇区或确定无法读取该扇区为止。由于SATA不能很好地处理无响应驱动器,因此这可能意味着不仅要复制的驱动器的I / O都会延迟。这很容易导致其他软件变慢或无响应,因为该软件会等待其他I / O请求完成,即使操作系统能够应付。
同样重要的是,即使您没有显式访问磁盘上的任何文件,也可能发生磁盘I / O。造成这种情况的两个主要原因是按需加载可执行代码和交换。由于有时即使在系统没有内存压力的情况下也使用交换功能,并且按需加载的可执行代码在现代系统和现代可执行文件格式中很常见,因此在正常使用期间发生意外的磁盘读取活动是非常现实的可能性。
正如Matteo Italia在对问题的评论中所指出的那样,一种缓解策略是使用不同的存储互连,这是一种复杂的说法,即“将磁盘放入USB机箱”。通过USB大容量存储协议进行抽象,可以将有问题的SATA部分与系统的其余部分隔离开,这意味着从理论上讲,该磁盘上的I / O问题仅会影响该特定磁盘上的I / O。
顺便说一句,这就是为什么通常不建议将SATA(特别是不具有驱动器级ERC的SATA)用于RAID(尤其是具有冗余的RAID级别,在标准级别中除RAID 0以外的所有RAID))。较长的超时时间和差的错误处理能力很容易导致整个设备因单个坏扇区而被扔出阵列,如果存在冗余并且存储控制器完全知道这就是问题,那么RAID控制器就可以很好地处理它。SAS是为大型存储阵列而设计的,因此期望偶尔会在各种驱动器上出现问题,这导致它被设计为可以优雅地处理单个有问题的驱动器或I / O请求的情况。即使驱动器没有。有问题的磁盘在用户系统中不是很常见,原因仅在于这些磁盘往往没有安装太多磁盘,而实际上安装的磁盘从来没有冗余。由于SATA旨在代替PATA / IDE而不是SCSI(后者是针对SAS的小众市场),因此它的错误处理功能和要求(或保证)可能被认为足以满足其预期的使用情况。