Infelizmente, quando um disco rígido (geralmente uma unidade virtual) está lento, o Linux interrompe as solicitações para essa unidade após um tempo limite, possivelmente causando corrupção de dados.
Última vez que isso aconteceu comigo, eu tinha 2 vms rodando (Linux e FreeBSD) em um armazenamento, que tinha problemas de conectividade e estava congelado por mais de uma hora. O armazenamento em si é bom, não há erros lá, e depois de corrigir a conexão, o vms (que obviamente também estava congelado) parecia estar funcionando novamente.
No entanto, o Linux vm tinha decidido abortar pedidos, tornando o sistema inutilizável (na maioria dos diretórios, o ls ficou preso, o mesmo aconteceu com o mount sem opções e muitas outras coisas não funcionaram mais); uma reinicialização foi necessária. Estes são os erros (dmesg):
...
[86707.916728] Write(10): 2a 00 02 4c 9e 38 00 03 c0 00
[86707.916732] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff880036865500)
[86707.916734] mptscsih: ioc0: attempting task abort! (sc=ffff880036866100)
[86707.916735] sd 2:0:0:0: [sda] CDB:
[86707.916736] Write(10): 2a 00 02 4c a1 f8 00 03 c0 00
[86707.916739] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff880036866100)
[86707.916741] mptscsih: ioc0: attempting task abort! (sc=ffff880036865c80)
[86707.916742] sd 2:0:0:0: [sda] CDB:
[86707.916743] Write(10): 2a 00 02 4c a5 b8 00 03 c0 00
[86707.916746] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff880036865c80)
[86707.916748] mptscsih: ioc0: attempting task abort! (sc=ffff880036864300)
[86707.916749] sd 2:0:0:0: [sda] CDB:
[86707.916750] Write(10): 2a 00 02 4c a9 78 00 02 b0 00
[86707.916753] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff880036864300)
É interessante que o FreeBSD vm não tenha erros registrados e esteja funcionando bem. Então, aparentemente, apenas o FreeBSD funcionava como esperado, não abortando nada (embora eu ache que eu tenha visto mensagens do kernel similares em sistemas FreeBSD).
Eu não sei porque o kernel está matando pedidos pendentes de gravação depois de um tempo limite. Provavelmente faz sentido em alguns casos, mas certamente não no meu caso - é na verdade um risco desnecessário (sem esse tempo limite, o Linux teria continuado normalmente depois que a conexão tivesse sido restaurada, tudo teria funcionado de novo).
Como o tempo limite do kernel do Linux (vm) para discos rígidos congelados pode ser DESABILITADO?
Editar:
O Linux vm tem apenas 1 disco rígido (/ dev / sda), que deve se parecer com um disco físico normal (tipo SCSI) para ele.
O lspci lista este controlador: "Controlador de armazenamento SCSI [0100]: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI [1000: 0030] (rev 01)".
Aqui está outro exemplo (vm diferente, mesmo host, também Linux) (nesse caso, o armazenamento não foi removido, mas o host estava sobrecarregado):
[1179039.664031] ata2: lost interrupt (Status 0x18)
[1179039.727188] ata2: drained 8 bytes to clear DRQ
[1179039.727272] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[1179039.740720] sr 1:0:0:0: CDB:
[1179039.740759] Get event status notification: 4a 01 00 00 10 00 00 00 08 00
[1179039.740768] ata2.00: cmd a0/00:00:00:08:00/00:00:00:00:00/a0 tag 0 pio 16392 in
res 40/00:02:00:08:00/00:00:00:00:00/a0 Emask 0x4 (timeout)
[1179039.740770] ata2.00: status: { DRDY }
[1179039.748067] ata2: soft resetting link
[1179039.937757] ata2.00: configured for UDMA/33
[1179039.943435] ata2: EH complete
Editar:
E é assim que os erros de tempo limite aparecem em um sistema Debian / kBSD (kernel do FreeBSD) (mesmo host, mesma situação, diferente vm):
mpt0: request 0xffffff80007305d0:62955 timed out for ccb 0xfffffe000a3bb800 (req->ccb 0xfffffe000a3bb800)
mpt0: request 0xffffff800072fa90:62956 timed out for ccb 0xfffffe000a3d1000 (req->ccb 0xfffffe000a3d1000)
mpt0: request 0xffffff8000726070:62962 timed out for ccb 0xfffffe000a428000 (req->ccb 0xfffffe000a428000)
mpt0: attempting to abort req 0xffffff80007305d0:62955 function 0
mpt0: completing timedout/aborted req 0xffffff8000726070:62962
mpt0: completing timedout/aborted req 0xffffff80007305d0:62955
mpt0: completing timedout/aborted req 0xffffff800072fa90:62956
mpt0: abort of req 0xffffff80007305d0:0 completed
mpt0: request 0xffffff8000726190:64136 timed out for ccb 0xfffffe000a3d1800 (req->ccb 0xfffffe000a3d1800)
mpt0: attempting to abort req 0xffffff8000726190:64136 function 0
mpt0: completing timedout/aborted req 0xffffff8000726190:64136
mpt0: abort of req 0xffffff8000726190:0 completed
mpt0: request 0xffffff8000721990:50970 timed out for ccb 0xfffffe00024bf800 (req->ccb 0xfffffe00024bf800)
mpt0: attempting to abort req 0xffffff8000721990:50970 function 0
mpt0: completing timedout/aborted req 0xffffff8000721990:50970
mpt0: abort of req 0xffffff8000721990:0 completed
mpt0: request 0xffffff80007279c0:61393 timed out for ccb 0xfffffe000a3cf000 (req->ccb 0xfffffe000a3cf000)
mpt0: request 0xffffff8000732550:61395 timed out for ccb 0xfffffe000a428000 (req->ccb 0xfffffe000a428000)
mpt0: attempting to abort req 0xffffff80007279c0:61393 function 0
mpt0: completing timedout/aborted req 0xffffff80007279c0:61393
mpt0: completing timedout/aborted req 0xffffff8000732550:61395
mpt0: abort of req 0xffffff80007279c0:0 completed