我有我的自定义NASconfiguration为空转20分钟后减速驱动器。
刚才我检查了/proc/mdstat ,注意到一个驱动器被标记为失败,但是SMART显示驱动器处于非常好的状态。 因此我怀疑md-raid认为spin-up时间太长,标志着drive失败。
重新添加和重build似乎也不成问题。
dmesg显示以下有趣的线条,我在Google上找不到太多东西。
[97144.228682] sd 0:0:2:0: attempting task abort! scmd(ffff97f7b14ce948) [97144.228688] sd 0:0:2:0: [sdc] tag#0 CDB: opcode=0x12 12 00 00 00 24 00 [97144.228692] scsi target0:0:2: handle(0x000c), sas_address(0x5001438020b9ee12), phy(18) [97144.228694] scsi target0:0:2: enclosure_logical_id(0x5001438020b9ee25), slot(49) [97148.184253] sd 0:0:2:0: task abort: SUCCESS scmd(ffff97f7b14ce948) [97148.235864] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) --- last message repeated a couple dozen times --- [97148.490304] sd 0:0:2:0: [sdc] tag#16 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490308] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490310] sd 0:0:2:0: [sdc] tag#13 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490315] sd 0:0:2:0: [sdc] tag#13 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e af f0 00 00 00 10 00 00 [97148.490317] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490321] print_req_error: I/O error, dev sdc, sector 225357808 [97148.490326] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490331] sd 0:0:2:0: [sdc] tag#16 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e b0 18 00 00 00 20 00 00 [97148.490334] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490337] print_req_error: I/O error, dev sdc, sector 225357848 [97148.490341] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490354] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490358] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490366] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490370] sd 0:0:2:0: [sdc] tag#15 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490374] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490378] sd 0:0:2:0: [sdc] tag#15 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e ae 68 00 00 00 08 00 00 [97148.490380] print_req_error: I/O error, dev sdc, sector 225357416 [97148.490383] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490392] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490399] mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) [97148.490403] sd 0:0:2:0: [sdc] tag#14 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490407] sd 0:0:2:0: [sdc] tag#14 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e ad 90 00 00 00 30 00 00 [97148.490409] print_req_error: I/O error, dev sdc, sector 225357200 [97148.490435] sd 0:0:2:0: [sdc] tag#11 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490439] sd 0:0:2:0: [sdc] tag#11 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e ad c8 00 00 00 58 00 00 [97148.490441] print_req_error: I/O error, dev sdc, sector 225357256 [97148.490450] sd 0:0:2:0: [sdc] tag#10 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490454] sd 0:0:2:0: [sdc] tag#10 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e ad 00 00 00 00 50 00 00 [97148.490456] print_req_error: I/O error, dev sdc, sector 225357056 [97148.490464] sd 0:0:2:0: [sdc] tag#9 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490468] sd 0:0:2:0: [sdc] tag#9 CDB: opcode=0x35 35 00 00 00 00 00 00 00 00 00 [97148.490472] print_req_error: I/O error, dev sdc, sector 16 [97148.490474] md: super_written gets error=10 [97148.490477] md/raid:md0: Disk failure on sdc, disabling device. md/raid:md0: Operation continuing on 3 devices. [97148.490496] sd 0:0:2:0: [sdc] tag#8 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490500] sd 0:0:2:0: [sdc] tag#8 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e b0 40 00 00 00 20 00 00 [97148.490502] print_req_error: I/O error, dev sdc, sector 225357888 [97148.490510] sd 0:0:2:0: [sdc] tag#7 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490514] sd 0:0:2:0: [sdc] tag#7 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e af b8 00 00 00 30 00 00 [97148.490516] print_req_error: I/O error, dev sdc, sector 225357752 [97148.490524] sd 0:0:2:0: [sdc] tag#6 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=0x00 [97148.490528] sd 0:0:2:0: [sdc] tag#6 CDB: opcode=0x88 88 00 00 00 00 00 0d 6e b0 00 00 00 00 08 00 00 [97148.490530] print_req_error: I/O error, dev sdc, sector 225357824
是否有一个超时值,我可以增加,使MD – RAID等待几分钟的驱动器上网?
任何其他的select,以防止在未来(除了保持我的驱动器24/7旋转,因为我也想睡觉的时间)?
更新2017-10-07
更新控制器固件(这是一个Perc H310交叉闪存到9211-8i IT模式),更新SAS扩展器固件和增加超时似乎已经大大减less了上述错误的频率,但他们仍然发生,在这些场合仍然有一些md-raid仍然驱动器失败。
我已经解码了SAS错误代码:
Value 31110101h Type: 30000000h SAS Origin: 01000000h PL Code: 00110000h PL_LOGINFO_CODE_RESET See Sub-Codes below (PL_LOGINFO_SUB_CODE) Sub Code: 00000100h PL_LOGINFO_SUB_CODE_OPEN_FAILURE SubSub Code: 00000001h PL_LOGINFO_SUB_CODE_OPEN_FAILURE_NO_DEST_TIMEOUT
除此之外,我在网上找不到任何东西(在2009年的一份LSI pdf中):
无法打开错误打开拒绝(无目的地)的连接。 重试50毫秒。
经过一些进一步的testing(挑衅hdparm -y ...的问题hdparm -y ...旋转驱动器和hddtemp ...旋转它们一个简单的命令)我发现超时时间略高于11秒,这是奇怪的,因为只剩下值为10的超时设置是“顺序”,“可移动”和“未知”设备的通用I / O超时。
更新2017-10-08
以下是我的设置的拓扑结构:
Dell Perc H310 (LSISAS2008: FWVersion(20.00.07.00), ChipRevision(0x03), BiosVersion(07.39.02.00)) (flashed to 9211-8i IT-mode) `- HP SAS Expander card (FW 2.10) |- Hitachi HDS72404 } md0 |- Hitachi HDS72404 } md0 |- HGST HDN724040AL } md0 |- HGST HDN724040AL } md0 |- ST8000AS0002-1NA (btrfs) |- ST8000AS0002-1NA (btrfs) `- ST8000AS0002-1NA (xfs)
四个Hitachi / HGST驱动器包括md-raidarrays,希捷驱动器与md-raid无关,但也受到根本问题的影响(但是btrfs似乎不太在意)。
这是我迄今为止所做的,经过许多小时的研究和实验,并没有太多的帮助:
在启动时运行以下代码,增加一些mpt2sas超时:
for f in /sys/block/sd?/device/timeout; do echo 90 > "$f" done for f in /sys/block/sd?/device/eh_timeout; do echo 90 > "$f" done for f in /sys/class/scsi_disk/*/manage_start_stop; do echo 1 > "$f" done
我已经更新了我的HBA和扩展器固件。
我已经将HBA BIOSconfiguration实用程序中的所有超时设置为90秒。
然而,在11到12秒之间硬盘从待机状态唤醒(旋转起来)期间,超时仍然可预料地发生。 (我怀疑10秒的超时,因为这是默认的很多超时,有一些额外的延迟。)
更新2017-10-10
我现在已经写了一个脚本,不断地扫描dmesg查看丢失的md设备,并自动为它们发出mdadm --manage /dev/md0 --re-add /dev/sdx 。 随着写意图位图恢复现在需要几秒钟,而不是一天。 但这不可能是解决这个问题的恰当方法。
我也刚刚写信给博通,也许他们能帮忙。
更新2017-10-11
我正在debugging我的内核的过程中可能的问题:
--drive put to standby with hdparm -y-- 18:16:35 sd 0:0:1:0: [sdb] sd_open 18:16:35 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:35 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:35 sd 0:0:1:0: [sdb] tag#0 Send: scmd 0xffff989bc94ea548 18:16:35 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 06 20 00 00 00 00 00 00 00 00 00 00 40 e0 00 18:16:35 SCSI DEBUG: scsi_check_sense() scsi_check_sense 442 18:16:35 SCSI DEBUG: scsi_check_sense() continuing default behaviour past line 484 18:16:35 sd 0:0:1:0: [sdb] tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:35 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 06 20 00 00 00 00 00 00 00 00 00 00 40 e0 00 18:16:35 sd 0:0:1:0: [sdb] tag#0 Sense Key : Recovered Error [current] [descriptor] 18:16:35 sd 0:0:1:0: [sdb] tag#0 Add. Sense: ATA pass through information available 18:16:35 sd 0:0:1:0: [sdb] tag#0 scsi host busy 1 failed 0 18:16:35 sd 0:0:1:0: Notifying upper driver of completion (result 8000002) 18:16:35 sd 0:0:1:0: [sdb] sd_release 18:16:35 sd 0:0:1:0: [sdb] sd_check_events 18:16:35 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:35 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bc866e148 18:16:35 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:35 SCSI DEBUG: scsi_check_sense() scsi_check_sense 442 18:16:35 SCSI DEBUG: scsi_check_sense()=>SUCCESS [nasty midlayer TURs] 18:16:35 sd 0:0:1:0: tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:35 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:35 sd 0:0:1:0: tag#0 Sense Key : Unit Attention [current] 18:16:35 sd 0:0:1:0: tag#0 Add. Sense: Power on, reset, or bus device reset occurred 18:16:35 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:35 sd 0:0:1:0: Notifying upper driver of completion (result 8000002) 18:16:35 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bc866e148 18:16:35 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:35 SCSI DEBUG: scsi_check_sense() scsi_check_sense 442 18:16:35 SCSI DEBUG: scsi_check_sense()=>SUCCESS [nasty midlayer TURs] 18:16:35 sd 0:0:1:0: tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:35 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:35 sd 0:0:1:0: tag#0 Sense Key : Not Ready [current] 18:16:35 sd 0:0:1:0: tag#0 Add. Sense: Logical unit not ready, initializing command required 18:16:35 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:35 sd 0:0:1:0: Notifying upper driver of completion (result 8000002) --command executed on drive with hddtemp-- 18:16:45 sd 0:0:1:0: [sdb] sd_open 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: [sdb] tag#0 Send: scmd 0xffff989bc8669548 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: Inquiry 12 00 00 00 24 00 18:16:45 sd 0:0:1:0: [sdb] tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: Inquiry 12 00 00 00 24 00 18:16:45 sd 0:0:1:0: [sdb] tag#0 scsi host busy 1 failed 0 18:16:45 sd 0:0:1:0: Notifying upper driver of completion (result 0) 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: [sdb] tag#0 Send: scmd 0xffff989bc8669548 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 08 2e 00 00 00 00 00 00 00 00 00 00 00 ec 00 18:16:45 SCSI DEBUG: scsi_check_sense() scsi_check_sense 442 18:16:45 SCSI DEBUG: scsi_check_sense() continuing default behaviour past line 484 18:16:45 sd 0:0:1:0: [sdb] tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 08 2e 00 00 00 00 00 00 00 00 00 00 00 ec 00 18:16:45 sd 0:0:1:0: [sdb] tag#0 Sense Key : Recovered Error [current] [descriptor] 18:16:45 sd 0:0:1:0: [sdb] tag#0 Add. Sense: ATA pass through information available 18:16:45 sd 0:0:1:0: [sdb] tag#0 scsi host busy 1 failed 0 18:16:45 sd 0:0:1:0: Notifying upper driver of completion (result 8000002) 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: [sdb] tag#0 Send: scmd 0xffff989bc8669548 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 08 2e 00 00 00 00 00 00 00 00 00 00 00 ec 00 18:16:45 SCSI DEBUG: scsi_check_sense() scsi_check_sense 442 18:16:45 SCSI DEBUG: scsi_check_sense() continuing default behaviour past line 484 18:16:45 sd 0:0:1:0: [sdb] tag#0 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 08 2e 00 00 00 00 00 00 00 00 00 00 00 ec 00 18:16:45 sd 0:0:1:0: [sdb] tag#0 Sense Key : Recovered Error [current] [descriptor] 18:16:45 sd 0:0:1:0: [sdb] tag#0 Add. Sense: ATA pass through information available 18:16:45 sd 0:0:1:0: [sdb] tag#0 scsi host busy 1 failed 0 18:16:45 sd 0:0:1:0: Notifying upper driver of completion (result 8000002) 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:45 sd 0:0:1:0: [sdb] tag#0 Send: scmd 0xffff989bc8669548 18:16:45 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 06 20 00 d8 00 00 00 00 00 4f 00 c2 00 b0 00 18:16:53 sd 0:0:1:0: [sdb] tag#0 Done: TIMEOUT_ERROR Result: hostbyte=DID_OK driverbyte=DRIVER_OK 18:16:53 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 06 20 00 d8 00 00 00 00 00 4f 00 c2 00 b0 00 18:16:53 sd 0:0:1:0: [sdb] tag#0 scsi host busy 1 failed 0 18:16:53 sd 0:0:1:0: [sdb] tag#0 abort scheduled 18:16:53 sd 0:0:1:0: [sdb] tag#0 aborting command 18:16:53 sd 0:0:1:0: attempting task abort! scmd(ffff989bc8669548) 18:16:53 sd 0:0:1:0: [sdb] tag#0 CDB: ATA command pass through(16) 85 06 20 00 d8 00 00 00 00 00 4f 00 c2 00 b0 00 18:16:53 scsi target0:0:1: handle(0x000a), sas_address(0x5001438020b9ee10), phy(16) 18:16:53 scsi target0:0:1: enclosure_logical_id(0x5001438020b9ee25), slot(51) 18:16:57 sd 0:0:1:0: task abort: SUCCESS scmd(ffff989bc8669548) 18:16:57 sd 0:0:1:0: [sdb] tag#0 finish aborted command 18:16:57 sd 0:0:1:0: Notifying upper driver of completion (result 30000) 18:16:57 sd 0:0:1:0: [sdb] sd_release 18:16:57 sd 0:0:1:0: [sdb] sd_check_events 18:16:57 sd 0:0:1:0: scsi_block_when_processing_errors: rtn: 1 18:16:57 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:57 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:57 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:57 sd 0:0:1:0: tag#0 Done: NEEDS_RETRY Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:57 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:57 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:57 sd 0:0:1:0: tag#0 Inserting command ffff989bd1de9148 into mlqueue 18:16:57 sd 0:0:1:0: unblocking device at zero depth 18:16:57 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:58 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:57 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 Done: NEEDS_RETRY Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:58 sd 0:0:1:0: tag#0 Inserting command ffff989bd1de9148 into mlqueue 18:16:58 sd 0:0:1:0: unblocking device at zero depth 18:16:58 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:58 sd 0:0:1:0: tag#0 Done: NEEDS_RETRY Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:58 sd 0:0:1:0: tag#0 Inserting command ffff989bd1de9148 into mlqueue 18:16:58 sd 0:0:1:0: unblocking device at zero depth 18:16:58 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:58 sd 0:0:1:0: tag#0 Done: NEEDS_RETRY Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:58 sd 0:0:1:0: tag#0 Inserting command ffff989bd1de9148 into mlqueue 18:16:58 sd 0:0:1:0: unblocking device at zero depth 18:16:58 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:58 sd 0:0:1:0: tag#0 Done: NEEDS_RETRY Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:58 sd 0:0:1:0: tag#0 Inserting command ffff989bd1de9148 into mlqueue 18:16:58 sd 0:0:1:0: unblocking device at zero depth 18:16:58 sd 0:0:1:0: tag#0 Send: scmd 0xffff989bd1de9148 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 mpt2sas_cm0: log_info(0x31110101): originator(PL), code(0x11), sub_code(0x0101) 18:16:58 sd 0:0:1:0: tag#0 Done: SUCCESS Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK 18:16:58 sd 0:0:1:0: tag#0 CDB: Test Unit Ready 00 00 00 00 00 00 18:16:58 sd 0:0:1:0: tag#0 scsi host busy 1 failed 0 18:16:58 sd 0:0:1:0: Notifying upper driver of completion (result b0000) 18:16:58 sd 0:0:1:0: device_block, handle(0x000a) 18:16:59 sd 0:0:1:0: device_unblock and setting to running, handle(0x000a)
我觉得特别担心的是
18:16:53 sd 0:0:1:0: [sdb] tag#0 Done: TIMEOUT_ERROR Result: hostbyte=DID_OK driverbyte=DRIVER_OK
立即导致
18:16:53 sd 0:0:1:0: [sdb] tag#0 abort scheduled 18:16:53 sd 0:0:1:0: [sdb] tag#0 aborting command
我想知道在哪里定义了超时,以及如何改变它。
更新2017-10-13
通过debugging我在实践中遇到以下超时:
/sys/block/sd?/device/timeout ) 额外的超时在内核源代码中定义:
./include/linux/blkdev.h :
#define BLK_DEFAULT_SG_TIMEOUT (60 * HZ) #define BLK_MIN_SG_TIMEOUT (7 * HZ)
./include/scsi/scsi.h :
#define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ) #define START_STOP_TIMEOUT (60 * HZ) #define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ) #define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ) #define READ_DEFECT_DATA_TIMEOUT (60 * HZ )
这些被应用于./block/scsi_ioctl.c函数sg_scsi_ioctl(...)和blk_fill_sghdr_rq(...) 。
这解释了短暂的7s超时来自何处( BLK_MIN_SG_TIMEOUT )。
15s和20s的超时似乎来自sg_io_hdr*->timeout blk_fill_sghdr_rq(...) sg_io_hdr*->timeout ,但我无法find它以前设置的位置。