什么是Linux SCSI命令超时,并且是适用于软件RAID的默认值?

我对SCSI超时的理解是,任何读,写,刷新和其他命令都有一个有限的时间来完成。 如果超过,命令将中止,并向上层报告错误。 在等待命令完成时,依赖于I / O的任何应用程序都将停止。

我的下一层将是mdraid,Linux软件RAID。 从我读的内容来看,mdraid本身没有超时,但依靠低层超时命令。

Kernel 3.2(Debian)默认的SCSI超时值是90秒。

遇到读取错误的硬盘将尽力在由固件定义的时间范围内纠正错误。 对于桌面驱动器(通常是独立的,因此校正具有高优先级),对于服务器驱动器(通常是RAID,因此很快报告坏扇区,让其他驱动器应答),该超时设置为高。 有时可以通过smartctl(SCTERC,TLER等)进行调整。

所以我猜如果一个硬盘被设置为高ERC超时,那么在放弃请求之前,内核默认会等待90秒。 只有这样,mdraid才能将应用程序的请求redirect到另一个磁盘。

90秒是一个网页加载的懒惰时间。

假设默认的SCSI超时是用于桌面用途还是非硬盘SCSI设备(磁带驱动器,磁带库可以想起),并且可以安全调整到7秒用于RAID使用,是正确的吗?

适合性取决于您的需求。 对你来说,这听起来像是90秒不适合。

过去我曾经见过厂商文档,build议将光纤通道 HBA超时设置为超过60秒,以便更好地处理诸如arrays故障切换,控制器固件更新等等。 正如你所指出的那样,这可能导致很长的滞后时间来恢复存储。

其实这不是一件坏事。 如果HBA超时,许多操作系统将强制卸载LUN,这可能会比偶尔长时间返回块更具破坏性。 诀窍是平衡以下几点:

  • 您的存储堆栈可能会产生长时滞
  • 您对后期数据的容忍度
  • 您对卸除的LUN的容忍度

通常情况下,放入RAIDarrays的磁盘应该具有较低的超时值,因为它使RAID控制器知道在别处处理块请求。 这是使用硬件RAID卡时消费级驱动器不好的一个重要原因。 他们的超时时间很长,这可能会导致你不想要的问题。