Impedir que o armazenamento USB use um dispositivo diferente na redefinição

Impedir que o armazenamento USB use um dispositivo diferente na redefinição

Eu tenho um disco rígido em um gabinete USB no qual estou recuperando dados. A unidade está em péssimo estado e reinicia frequentemente nas leituras.

O dispositivo é registrado como /dev/sdb. Às vezes, provavelmente uma vez a cada milhares de reinicializações, por algum motivo ele muda para /dev/sdc. A única maneira de fazer com que ele volte é desconectar fisicamente a conexão USB por alguns segundos e reconectá-la, momento em que ela será registrada /dev/sdbnovamente.

Isto é muito perturbador e causa muitos problemas para mim, pois algumas das operações que estou realizando podem levar horas ou dias, e se isso acontecer em qualquer ponto do processo (por exemplo, enquanto estou no trabalho ou dormindo), eu também tem que tentar determinarquandoaconteceu e recomeçar a partir desse ponto, ou recomeçar. Ambos são muito difíceis.

Um conjunto "normal" de redefinições, que espero e está OK, é assim:

12 de junho 11:15:28 kernel do Ubuntu: [199944.703449] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:29 kernel do Ubuntu: [199945.574141] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:29 kernel do Ubuntu: [199946.017483] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:30 kernel do Ubuntu: [199946.460816] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:30 kernel do Ubuntu: [199946.904151] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:30 kernel do Ubuntu: [199947.347659] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:31 kernel do Ubuntu: [199947.690737] sd 16:0:0:0: [sdb] Código de erro não tratado
12 de junho 11:15:31 kernel do Ubuntu: [199947.690747] sd 16:0:0:0: [sdb] Resultado: hostbyte=DID_ERROR driverbyte=DRIVER_OK
12 de junho 11:15:31 kernel do Ubuntu: [199947.690757] sd 16:0:0:0: [sdb] CDB: Leitura (10): 28 00 00 01 1d cd 00 00 01 00
12 de junho 11:15:31 kernel do Ubuntu: [199947.690780] end_request: erro de E/S, dev sdb, setor 73165
12 de junho 11:15:35 kernel do Ubuntu: [199951.585312] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:36 kernel do Ubuntu: [199952.455995] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:36 kernel do Ubuntu: [199952.899329] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:36 kernel do Ubuntu: [199953.342669] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:37 kernel do Ubuntu: [199953.786009] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:37 kernel do Ubuntu: [199954.229346] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 11:15:38 kernel do Ubuntu: [199954.572710] sd 16:0:0:0: [sdb] Código de erro não tratado
12 de junho 11:15:38 kernel do Ubuntu: [199954.572721] sd 16:0:0:0: [sdb] Resultado: hostbyte=DID_ERROR driverbyte=DRIVER_OK
12 de junho 11:15:38 kernel do Ubuntu: [199954.572730] sd 16:0:0:0: [sdb] CDB: Leitura (10): 28 00 00 01 1d cd 00 00 01 00
12 de junho 11:15:38 kernel do Ubuntu: [199954.572754] end_request: erro de E/S, dev sdb, setor 73165

Este é o comportamento esperado. Uma redefinição problemática, que muda para sdc, tem a seguinte aparência:

12 de junho 12:57:42 kernel do Ubuntu: [206070.288681] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 12:57:43 kernel do Ubuntu: [206070.732013] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 12:57:43 kernel do Ubuntu: [206071.175603] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 12:57:44 kernel do Ubuntu: [206071.618695] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 12:57:44 kernel do Ubuntu: [206072.062224] usb 1-1.2: redefina o dispositivo USB de alta velocidade número 23 usando ehci_hcd
12 de junho 12:57:44 kernel do Ubuntu: [206072.095010] usb 1-1.2: desconexão USB, dispositivo número 23
12 de junho 12:57:44 kernel do Ubuntu: [206072.098317] scsi 16:0:0:0: rejeitando E/S para dispositivo offline
12 de junho 12:57:44 kernel do Ubuntu: [206072.098327] scsi 16:0:0:0: [sdb] matando solicitação
12 de junho 12:57:44 kernel do Ubuntu: [206072.098345] scsi 16:0:0:0: [sdb] Código de erro não tratado
12 de junho 12:57:44 kernel do Ubuntu: [206072.098349] scsi 16:0:0:0: [sdb] Resultado: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
12 de junho 12:57:44 kernel do Ubuntu: [206072.098356] scsi 16:0:0:0: [sdb] CDB: Leitura (10): 28 00 03 66 90 8b 00 00 01 00
12 de junho 12:57:44 kernel do Ubuntu: [206072.098387] end_request: erro de E/S, dev sdb, setor 57053323
12 de junho 12:57:44 kernel do Ubuntu: [206072.309890] usb 1-1.2: novo dispositivo USB de alta velocidade número 26 usando ehci_hcd
12 de junho 12:57:45 ubuntu mtp-probe: verificando o barramento 1, dispositivo 26: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2"
12 de junho 12:57:45 ubuntu mtp-probe: barramento: 1, dispositivo: 26 não era um dispositivo MTP
12 de junho 12:57:45 kernel do Ubuntu: [206072.755377] scsi17: armazenamento usb 1-1.2:1.0
12 de junho 12:57:46 kernel do Ubuntu: [206074.240443] scsi 17:0:0:0: Acesso direto HTS72101 0G9SA00 PQ: 0 ANSI: 6
12 de junho 12:57:46 kernel do Ubuntu: [206074.242675] sd 17:0:0:0: SCSI genérico sg2 tipo 0 anexado
12 de junho 12:57:46 kernel do Ubuntu: [206074.243800] sd 17:0:0:0: [sdc] 195371568 blocos lógicos de 512 bytes: (100 GB/93,1 GiB)

O problema começa com uma desconexão do USB em vez de uma redefinição. Esse é o problema que preciso evitar.

Eu gostaria de forçá-lo de alguma forma a permanecer ligado /dev/sdb. Existe alguma maneira de fazer isso?

Como alternativa, embora pareça que esse tipo de reinicialização forçada seja inevitável, há alguma configuração em algum lugar que eu possa alterar temporariamente para evitar que isso aconteça? Algum cronômetro de repetição ou algo assim? Ou talvez uma forma de forçar /dev/sdba disponibilização imediata novamente para que seja reutilizado?

O aplicativo que estou executando atualmente abre o dispositivo uma vez na inicialização e o mantém aberto o tempo todo enquanto tenta a recuperação. Eu escrevi este aplicativo e posso controlar seu comportamento, portanto, uma solução em código também é uma possibilidade, mas gostaria de ver primeiro se existe uma solução em nível de sistema (ainda não tentei uma solução alternativa de software, quero ver se Existe uma maneira mais fácil).

Também me pergunto se talvez seja um problema de energia, embora não veja nenhum problema relacionado à energia no log. Ainda não experimentei um hub alimentado. A máquina é um Lenovo ThinkPad T520 (funcionando com alimentação CA) que nunca me falhou em termos de corrente USB disponível no passado.

O sistema é Ubuntu 12.04 LTS, kernel 3.2.0-64, 64 bits.

Responder1

Acesse o dispositivo através dos caminhos /dev/disk/by-xxx.

Esses caminhos permanecem os mesmos para o dispositivo/partição, com links simbólicos para o próprio dispositivo /dev/sdXY, mantido pelo sistema. Portanto, embora o dispositivo possa se reconectar a outrovirtualdispositivo, o caminho que você pode usar não muda.

/dev/disco/by-uuid/

  • Cada unidade/dispositivo possui um UUID exclusivo, portanto, usar um caminho baseado nele é sempre o mesmo, independentemente de qual 'dispositivo' ele leva. Por exemplo, meu sistema:

    xenon-lornix:/> ll /dev/disk/by-uuid/
    total 0
    lrwxrwxrwx 1 root root 10 Jun 10 02:33 24c80c49-3f88-4343-9b91-c34087e49102 -> ../../sda5
    lrwxrwxrwx 1 root root 10 Jun 10 02:33 b2254550-cc90-46e4-a84f-cb32bca8f83d -> ../../sda1
    
  • O caminho /dev/disk/by-uuid/b2254550-cc90-46e4-a84f-cb32bca8f83dsempre apontará para a partição 1 dessa unidade, independentemente de ser sda/sdb/sdc, etc.

Existem outros métodos disponíveis também:

/dev/disco/por-rótulo/

    xenon-lornix:/> ll /dev/disk/by-label/
    total 0
    lrwxrwxrwx 1 root root 10 Jun 10 02:33 swap -> ../../sda5
    lrwxrwxrwx 1 root root 10 Jun 10 02:33 xenon -> ../../sda1

Eu sempre rotulo minhas partições, tornando super simples arquivar/usar/montar uma unidade específica, em vez de me perguntar se /dev/sdc é o WD 1TB, ou o Samsung 2TB, ou a unidade flash de 1GB.

Também facilita a montagem: (de/etc/fstab)

    LABEL=xenon   /   ext4   defaults,... and so forth

Ocaminho secundáriopath pode ser útil, pois associa tecnicamente uma conexão física a um dispositivo específico, talvez útil para você se a unidade não funcionar bem com informações de partição adequadas, fornecendo rótulos estranhos ou algo assim.

informação relacionada