Verhindern, dass USB-Speicher beim Zurücksetzen ein anderes Gerät verwendet

Verhindern, dass USB-Speicher beim Zurücksetzen ein anderes Gerät verwendet

Ich habe eine Festplatte in einem USB-Gehäuse, auf der ich eine Datenwiederherstellung durchführe. Die Festplatte ist in einem sehr schlechten Zustand und wird beim Lesen häufig zurückgesetzt.

Das Gerät wird als registriert /dev/sdb. Manchmal, wahrscheinlich etwa einmal bei jedem tausendsten Reset, wechselt es aus irgendeinem Grund zu /dev/sdc. Die einzige Möglichkeit, es wieder in den ursprünglichen Zustand zu versetzen, besteht darin, die USB-Verbindung für einige Sekunden zu trennen und dann wieder anzuschließen. Dann wird es /dev/sdbwieder als registriert.

Dies ist sehr störend und verursacht eine Menge Probleme für mich, da einige der Operationen, die ich durchführe, Stunden oder Tage dauern können, und wenn dies zu irgendeinem Zeitpunkt in diesem Prozess geschieht (z. B. während ich bei der Arbeit bin oder schlafe), muss ich entweder versuchen, festzustellenWannes passiert ist, und an diesem Punkt weitermachen oder von vorne beginnen. Beides ist sehr schwierig.

Ein „normaler“ Satz von Zurücksetzungen, den ich erwarte und der in Ordnung ist, sieht folgendermaßen aus:

12. Juni 11:15:28 Ubuntu-Kernel: [199944.703449] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:29 Ubuntu-Kernel: [199945.574141] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:29 Ubuntu-Kernel: [199946.017483] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:30 Ubuntu-Kernel: [199946.460816] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:30 Ubuntu-Kernel: [199946.904151] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:30 Ubuntu-Kernel: [199947.347659] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:31 Ubuntu-Kernel: [199947.690737] sd 16:0:0:0: [sdb] Unbehandelter Fehlercode
12. Juni 11:15:31 Ubuntu-Kernel: [199947.690747] sd 16:0:0:0: [sdb] Ergebnis: hostbyte=DID_ERROR driverbyte=DRIVER_OK
12. Juni 11:15:31 Ubuntu-Kernel: [199947.690757] sd 16:0:0:0: [sdb] CDB: Lesen (10): 28 00 00 01 1d cd 00 00 01 00
12. Juni 11:15:31 Ubuntu-Kernel: [199947.690780] end_request: E/A-Fehler, dev sdb, Sektor 73165
12. Juni 11:15:35 Ubuntu-Kernel: [199951.585312] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:36 Ubuntu-Kernel: [199952.455995] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:36 Ubuntu-Kernel: [199952.899329] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:36 Ubuntu-Kernel: [199953.342669] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:37 Ubuntu-Kernel: [199953.786009] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:37 Ubuntu-Kernel: [199954.229346] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 11:15:38 Ubuntu-Kernel: [199954.572710] sd 16:0:0:0: [sdb] Unbehandelter Fehlercode
12. Juni 11:15:38 Ubuntu-Kernel: [199954.572721] sd 16:0:0:0: [sdb] Ergebnis: hostbyte=DID_ERROR driverbyte=DRIVER_OK
12. Juni 11:15:38 Ubuntu-Kernel: [199954.572730] sd 16:0:0:0: [sdb] CDB: Lesen (10): 28 00 00 01 1d cd 00 00 01 00
12. Juni 11:15:38 Ubuntu-Kernel: [199954.572754] end_request: E/A-Fehler, dev sdb, Sektor 73165

Dies ist das erwartete Verhalten. Ein problematischer Reset, der auf umschaltet sdc, sieht folgendermaßen aus:

12. Juni 12:57:42 Ubuntu-Kernel: [206070.288681] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 12:57:43 Ubuntu-Kernel: [206070.732013] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 12:57:43 Ubuntu-Kernel: [206071.175603] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 12:57:44 Ubuntu-Kernel: [206071.618695] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 12:57:44 Ubuntu-Kernel: [206072.062224] USB 1-1.2: Hochgeschwindigkeits-USB-Gerät Nummer 23 mit ehci_hcd zurücksetzen
12. Juni 12:57:44 Ubuntu-Kernel: [206072.095010] USB 1-1.2: USB-Verbindung getrennt, Gerätenummer 23
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098317] SCSI 16:0:0:0: I/O für Offline-Gerät wird abgelehnt
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098327] scsi 16:0:0:0: [sdb] Anforderung beenden
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098345] scsi 16:0:0:0: [sdb] Unbehandelter Fehlercode
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098349] scsi 16:0:0:0: [sdb] Ergebnis: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098356] scsi 16:0:0:0: [sdb] CDB: Lesen (10): 28 00 03 66 90 8b 00 00 01 00
12. Juni 12:57:44 Ubuntu-Kernel: [206072.098387] end_request: E/A-Fehler, dev sdb, Sektor 57053323
12. Juni 12:57:44 Ubuntu-Kernel: [206072.309890] USB 1-1.2: neues Hochgeschwindigkeits-USB-Gerät Nummer 26 mit ehci_hcd
12. Juni 12:57:45 Ubuntu MTP-Probe: Überprüfe Bus 1, Gerät 26: „/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2“
12. Juni 12:57:45 Ubuntu MTP-Probe: Bus: 1, Gerät: 26 war kein MTP-Gerät
12. Juni 12:57:45 Ubuntu-Kernel: [206072.755377] scsi17: USB-Speicher 1-1.2:1.0
12. Juni 12:57:46 Ubuntu-Kernel: [206074.240443] scsi 17:0:0:0: Direktzugriff HTS72101 0G9SA00 PQ: 0 ANSI: 6
12. Juni 12:57:46 Ubuntu-Kernel: [206074.242675] sd 17:0:0:0: Angehängter SCSI-Generischer SG2-Typ 0
12. Juni 12:57:46 Ubuntu-Kernel: [206074.243800] sd 17:0:0:0: [sdc] 195371568 512-Byte-logische Blöcke: (100 GB/93,1 GiB)

Das Problem beginnt dort mit einer USB-Trennung statt einem Reset. Das ist das Problem, das ich vermeiden muss.

Ich möchte es irgendwie zwingen, eingeschaltet zu bleiben /dev/sdb. Gibt es eine Möglichkeit, das zu tun?

Obwohl diese Art von Hard-Reset unvermeidbar scheint, gibt es alternativ irgendwo eine Einstellung, die ich vorübergehend ändern kann, um dies möglicherweise zu verhindern? Irgendeinen Wiederholungstimer oder so etwas? Oder vielleicht eine Möglichkeit, die /dev/sdbsofortige Wiederverfügbarkeit zu erzwingen, damit es wiederverwendet wird?

Die Anwendung, die ich gerade ausführe, öffnet das Gerät einmal beim Start und hält es während des Wiederherstellungsversuchs die ganze Zeit geöffnet. Ich habe diese Anwendung geschrieben und kann ihr Verhalten steuern, daher ist auch eine Lösung im Code möglich, aber ich möchte zuerst sehen, ob es eine Lösung auf Systemebene gibt (ich habe noch keinen Software-Workaround versucht, ich möchte sehen, ob es einen einfacheren Weg gibt).

Ich frage mich auch, ob es vielleicht ein Stromproblem ist, obwohl ich im Protokoll keine strombezogenen Probleme sehe. Ich habe noch keinen Hub mit Stromversorgung ausprobiert. Bei dem Gerät handelt es sich um ein Lenovo ThinkPad T520 (mit Wechselstrom), das mich in Bezug auf den verfügbaren USB-Strom in der Vergangenheit nie im Stich gelassen hat.

Das System ist Ubuntu 12.04 LTS, Kernel 3.2.0-64, 64-Bit.

Antwort1

Greifen Sie über die Pfade /dev/disk/by-xxx auf das Gerät zu.

Diese Pfade bleiben für das Gerät/die Partition gleich, mit Symlinks zum eigentlichen /dev/sdXY-Gerät selbst, die vom System verwaltet werden. Während das Gerät also möglicherweise eine Verbindung zu einem anderen Gerät herstellt,virtuellGerät, der verwendbare Pfad ändert sich nicht.

/dev/disk/nach-uuid/

  • Jedes Laufwerk/Gerät hat eine eindeutige UUID, daher ist die Verwendung eines darauf basierenden Pfads immer gleich, unabhängig davon, zu welchem ​​„Gerät“ er führt. Zum Beispiel mein System:

    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
    
  • Der Pfad /dev/disk/by-uuid/b2254550-cc90-46e4-a84f-cb32bca8f83dverweist immer auf Partition 1 dieses Laufwerks, unabhängig davon, ob es sda/sdb/sdc usw. ist.

Es stehen auch andere Methoden zur Verfügung:

/dev/Datenträger/nach-Bezeichnung/

    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

Ich beschrifte meine Partitionen immer. Das macht es ganz einfach, eine bestimmte Einheit abzulegen/zu verwenden/zu mounten, und ich muss mich nicht fragen, ob es sich bei /dev/sdc um die 1 TB-Festplatte von WD, die 2 TB-Festplatte von Samsung oder den 1 GB-Flash-Speicher handelt.

Erleichtert auch die Montage: (von/etc/fstab)

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

DerNebenwegDer Pfad kann nützlich sein, da er technisch gesehen eine physische Verbindung mit einem bestimmten Gerät verbindet. Das kann für Sie nützlich sein, wenn das Laufwerk nicht gut mit den richtigen Partitionsinformationen funktioniert, seltsame Bezeichnungen angibt oder Ähnliches.

verwandte Informationen