
Tengo un disco duro en una caja USB en el que estoy recuperando datos. La unidad está en muy mal estado y se reinicia con frecuencia durante las lecturas.
El dispositivo se registra como /dev/sdb
. A veces, probablemente una vez cada pocos miles de reinicios, por alguna razón cambia a /dev/sdc
. La única forma de volver a conectarlo es desconectar físicamente la conexión USB durante unos segundos y luego volver a conectarla, momento en el que se registra nuevamente /dev/sdb
.
Esto es muy perturbador y me causa muchos problemas, ya que algunas de las operaciones que estoy realizando pueden llevar horas o días, y si esto sucede en algún momento del proceso (por ejemplo, mientras estoy en el trabajo o durmiendo), hay que tratar de determinarcuandosucedió y continuar desde ese punto, o comenzar de nuevo. Ambos son muy difíciles.
Un conjunto "normal" de reinicios, que espero y que están bien, se ve así:
12 de junio 11:15:28 kernel de ubuntu: [199944.703449] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:29 kernel de ubuntu: [199945.574141] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:29 kernel de ubuntu: [199946.017483] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:30 kernel de ubuntu: [199946.460816] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:30 kernel de ubuntu: [199946.904151] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:30 kernel de ubuntu: [199947.347659] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:31 kernel de ubuntu: [199947.690737] sd 16:0:0:0: [sdb] Código de error no controlado 12 de junio 11:15:31 kernel de ubuntu: [199947.690747] sd 16:0:0:0: [sdb] Resultado: hostbyte=DID_ERROR driverbyte=DRIVER_OK 12 de junio 11:15:31 kernel de ubuntu: [199947.690757] sd 16:0:0:0: [sdb] CDB: Lectura(10): 28 00 00 01 1d cd 00 00 01 00 12 de junio 11:15:31 kernel de ubuntu: [199947.690780] end_request: error de E/S, dev sdb, sector 73165 12 de junio 11:15:35 kernel de ubuntu: [199951.585312] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:36 kernel de ubuntu: [199952.455995] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:36 kernel de ubuntu: [199952.899329] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:36 kernel de ubuntu: [199953.342669] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:37 kernel de ubuntu: [199953.786009] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:37 kernel de ubuntu: [199954.229346] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 11:15:38 kernel de ubuntu: [199954.572710] sd 16:0:0:0: [sdb] Código de error no controlado 12 de junio 11:15:38 kernel de ubuntu: [199954.572721] sd 16:0:0:0: [sdb] Resultado: hostbyte=DID_ERROR driverbyte=DRIVER_OK 12 de junio 11:15:38 kernel de ubuntu: [199954.572730] sd 16:0:0:0: [sdb] CDB: Lectura(10): 28 00 00 01 1d cd 00 00 01 00 12 de junio 11:15:38 kernel de ubuntu: [199954.572754] end_request: error de E/S, dev sdb, sector 73165
Este es el comportamiento esperado. Un reinicio problemático, que cambia a sdc
, se ve así:
12 de junio 12:57:42 kernel de ubuntu: [206070.288681] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 12:57:43 kernel de ubuntu: [206070.732013] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 12:57:43 kernel de ubuntu: [206071.175603] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 12:57:44 kernel de ubuntu: [206071.618695] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 12:57:44 kernel de ubuntu: [206072.062224] usb 1-1.2: restablezca el dispositivo USB de alta velocidad número 23 usando ehci_hcd 12 de junio 12:57:44 kernel de ubuntu: [206072.095010] usb 1-1.2: desconexión USB, número de dispositivo 23 12 de junio 12:57:44 kernel de ubuntu: [206072.098317] scsi 16:0:0:0: rechazando E/S al dispositivo fuera de línea 12 de junio 12:57:44 kernel de ubuntu: [206072.098327] scsi 16:0:0:0: [sdb] solicitud de eliminación 12 de junio 12:57:44 kernel de ubuntu: [206072.098345] scsi 16:0:0:0: [sdb] Código de error no controlado 12 de junio 12:57:44 kernel de ubuntu: [206072.098349] scsi 16:0:0:0: [sdb] Resultado: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK 12 de junio 12:57:44 kernel de ubuntu: [206072.098356] scsi 16:0:0:0: [sdb] CDB: Lectura(10): 28 00 03 66 90 8b 00 00 01 00 12 de junio 12:57:44 kernel de ubuntu: [206072.098387] end_request: error de E/S, dev sdb, sector 57053323 12 de junio 12:57:44 kernel de ubuntu: [206072.309890] usb 1-1.2: nuevo dispositivo USB de alta velocidad número 26 usando ehci_hcd 12 de junio 12:57:45 ubuntu mtp-probe: comprobando bus 1, dispositivo 26: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" 12 de junio 12:57:45 ubuntu mtp-probe: bus: 1, dispositivo: 26 no era un dispositivo MTP 12 de junio 12:57:45 kernel de ubuntu: [206072.755377] scsi17: almacenamiento usb 1-1.2:1.0 12 de junio 12:57:46 kernel de ubuntu: [206074.240443] scsi 17:0:0:0: acceso directo HTS72101 0G9SA00 PQ: 0 ANSI: 6 12 de junio 12:57:46 kernel de ubuntu: [206074.242675] sd 17:0:0:0: scsi genérico sg2 tipo 0 adjunto 12 de junio 12:57:46 kernel de ubuntu: [206074.243800] sd 17:0:0:0: [sdc] 195371568 bloques lógicos de 512 bytes: (100 GB/93,1 GiB)
El problema comienza con una desconexión del USB en lugar de un reinicio. Ese es el problema que necesito evitar.
Me gustaría forzarlo de alguna manera para que permanezca encendido /dev/sdb
. ¿Hay alguna manera de que pueda hacer esto?
Alternativamente, si bien parece que este tipo de restablecimiento completo es inevitable, ¿hay alguna configuración en algún lugar que pueda cambiar temporalmente para evitar que esto suceda? ¿Algún temporizador de reintento o algo así? ¿O tal vez una forma de obligarlo /dev/sdb
a volver a estar disponible de inmediato para que se pueda reutilizar?
La aplicación que estoy ejecutando actualmente abre el dispositivo una vez al inicio y lo mantiene abierto todo el tiempo mientras intento la recuperación. Escribí esta aplicación y puedo controlar su comportamiento, por lo que una solución en el código también es una posibilidad, pero primero me gustaría ver si hay una solución a nivel de sistema (todavía no he intentado una solución alternativa de software, quiero ver si Hay una manera más fácil).
También me pregunto si tal vez se trate de un problema de energía, aunque no veo problemas relacionados con la energía en el registro. Todavía no he probado un concentrador motorizado. La máquina es una Lenovo ThinkPad T520 (que funciona con alimentación de CA) que nunca me ha fallado en términos de corriente USB disponible en el pasado.
El sistema es Ubuntu 12.04 LTS, kernel 3.2.0-64, 64 bits.
Respuesta1
Acceda al dispositivo a través de las rutas /dev/disk/by-xxx.
Estas rutas siguen siendo las mismas para el dispositivo/partición, con enlaces simbólicos al dispositivo /dev/sdXY adecuado, mantenido por el sistema. Entonces, si bien el dispositivo puede volver a conectarse a otrovirtualdispositivo, la ruta que puede utilizar no cambia.
/dev/disco/por-uuid/
Cada unidad/dispositivo tiene un UUID único, por lo que usar una ruta basada en ese es siempre la misma, independientemente de a qué "dispositivo" conduzca. Por ejemplo, mi 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
La ruta
/dev/disk/by-uuid/b2254550-cc90-46e4-a84f-cb32bca8f83d
siempre apuntará a la partición 1 de esa unidad, independientemente de si es sda/sdb/sdc, etc.
También hay otros métodos disponibles:
/dev/disco/por-etiqueta/
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
Siempre etiqueto mis particiones, lo que hace que sea muy sencillo archivar/usar/montar una unidad en particular, en lugar de preguntarme si /dev/sdc es el WD de 1 TB, el Samsung de 2 TB o la unidad flash de 1 GB.
También facilita el montaje: (desde/etc/fstab)
LABEL=xenon / ext4 defaults,... and so forth
ElcaminoLa ruta puede ser útil ya que técnicamente asocia una conexión física a un dispositivo en particular, quizás útil para usted si la unidad no funciona bien con la información de partición adecuada, con etiquetas extrañas o algo así.