USBストレージデバイスがリセット時に他のデバイスを使用するのを防ぐ

USBストレージデバイスがリセット時に他のデバイスを使用するのを防ぐ

データ復旧を実行するUSB​​エンクロージャにハードドライブがあります。ドライブの状態は非常に悪く、読み込み中に頻繁にリセットされます。

デバイスは/dev/sdb時々数千回リセットする/dev/sdcたびに 。/dev/sdbもう一度登録してください。

これは非常に破壊的であり、多くの問題を引き起こします。なぜなら、プロセス中いつでも(たとえば、仕事中や寝ている間)、このようなことが起こると、私がやっていることのいくつかは数時間または数日かかるかもしれません。決めようとするいつその時点から発生し、続行または再開します。どちらもとても難しいです。

私が予想して問題のない「通常の」リセットセットは次のとおりです。

6月12日 11:15:28 Ubuntuカーネル: [199944.703449] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:29 Ubuntuカーネル: [199945.574141] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:29 Ubuntuカーネル: [199946.017483] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:30 Ubuntuカーネル: [199946.460816] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:30 Ubuntuカーネル: [199946.904151] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:30 Ubuntuカーネル: [199947.347659] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:31 Ubuntu カーネル: [199947.690737] sd 16:0:0:0: [sdb] 未処理のエラーコード
6月12日 11:15:31 Ubuntu カーネル: [199947.690747] sd 16:0:0:0: [sdb] 結果: ホストバイト=DID_ERROR ドライババイト=DRIVER_OK
6月12日 11:15:31 Ubuntu カーネル: [199947.690757] sd 16:0:0:0: [sdb] cdb: 読み取り (10): 28 00 00 01 1d cd 00 00 01 00
6月12日 11:15:31 Ubuntu カーネル: [199947.690780] end_request: I/O エラー、dev sdb、セクタ 73165
6月12日 11:15:35 Ubuntuカーネル: [199951.585312] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:36 Ubuntuカーネル: [199952.455995] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:36 Ubuntuカーネル: [199952.899329] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:36 Ubuntuカーネル: [199953.342669] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:37 Ubuntuカーネル: [199953.786009] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:37 Ubuntuカーネル: [199954.229346] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 11:15:38 Ubuntu カーネル: [199954.572710] sd 16:0:0:0: [sdb] 未処理のエラーコード
6月12日 11:15:38 Ubuntu カーネル: [199954.572721] sd 16:0:0:0: [sdb] 結果: ホストバイト=DID_ERROR ドライババイト=DRIVER_OK
6月12日 11:15:38 Ubuntu カーネル: [199954.572730] sd 16:0:0:0: [sdb] cdb: 読み取り (10): 28 00 00 01 1d cd 00 00 01 00
6月12日 11:15:38 ubuntu カーネル: [199954.572754] end_request: I/O エラー、dev sdb、セクタ 73165

これは予想される動作です。このリセットはsdc以下のようにに切り替わります。

6月12日 12:57:42 Ubuntuカーネル: [206070.288681] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 12:57:43 Ubuntuカーネル: [206070.732013] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 12:57:43 Ubuntuカーネル: [206071.175603] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 12:57:44 Ubuntuカーネル: [206071.618695] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 12:57:44 Ubuntuカーネル: [206072.062224] usb 1-1.2: ehci_hcdを使用して高速USBデバイス番号23をリセット
6月12日 12:57:44 Ubuntu カーネル: [206072.095010] usb 1-1.2: USB 切断、デバイス番号 23
6月12日12:57:44 Ubuntuカーネル:[206072.098317] scsi 16:0:0:0:オフラインデバイスへのI / Oが拒否されました。
6月12日 12:57:44 Ubuntu カーネル: [206072.098327] scsi 16:0:0:0: [sdb] リクエスト終了中
6月12日 12:57:44 Ubuntu カーネル: [206072.098345] scsi 16:0:0:0: [sdb] 未処理のエラーコード
6月12日 12:57:44 Ubuntu カーネル: [206072.098349] scsi 16:0:0:0: [sdb] 結果: ホストバイト=DID_NO_CONNECT ドライババイト=DRIVER_OK
6月12日 12:57:44 Ubuntu カーネル: [206072.098356] scsi 16:0:0:0: [sdb] CDB: read(10): 28 00 03 66 90 8b 00 00 01 00
6月12日 12:57:44 Ubuntuカーネル: [206072.098387] end_request: I/Oエラー、dev sdb、セクタ 57053323
6月12日 12:57:44 Ubuntuカーネル: [206072.309890] usb 1-1.2: ehci_hcdを使用する新しい高速USBデバイス番号26
6月12日 12:57:45 ubuntu mtp-probe: バス1、デバイス26確認中: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2"
6月12日 12:57:45 ubuntu mtp-probe: バス: 1, デバイス: 26 MTP デバイスではない
6月12日 12:57:45 Ubuntu カーネル: [206072.755377] scsi17: usb リポジトリ 1-1.2:1.0
6月12日 12:57:46 Ubuntu カーネル: [206074.240443] scsi 17:0:0:0: 直接アクセス HTS72101 0G9SA00 PQ: 0 ANSI: 6
6月12日 12:57:46 Ubuntu カーネル: [206074.242675] sd 17:0:0:0: 添付 scsi 一般 sg2 タイプ 0
6月12日 12:57:46 Ubuntuカーネル: [206074.243800] sd 17:0:0:0: [sdc] 195371568 512バイト論理ブロック: (100GB/93.1GiB)

問題はリセットではなくUSB切断から始まりました。これが私が避けるべき問題です。

私は何とかそれが存在するように強制したいと思いました/dev/sdb。私ができる方法はありますか?

それとも、このタイプのハードリセットは避けられないようですが、これが発生しないように一時的に変更できる設定はありますか?再試行タイマーのようなものがありますか?それとも、/dev/sdb再利用のためにすぐに再利用できるようにする方法はありますか?

現在実行中のアプリは、起動時にデバイスを一度開き、再起動しようとすると開いたままになります。私はアプリを書いてその動作を制御できるので、コードで解決する方法も可能ですが、まずシステムレベルの解決策があるかどうかを確認したいと思います。 (まだソフトウェアの回避策を試していませんが、より簡単な方法があることを確認してください)。

ログには電源に関する問題は表示されませんが、これが電源装置の問題である可能性があるかどうか疑問に思います。まだパワーハブを使ったことがありません。このデバイスはLenovo ThinkPad T520(AC電源で動作)であり、過去に使用可能なUSB電流の面で私を失望させませんでした。

システムはUbuntu 12.04 LTS、カーネル3.2.0-64、64ビットです。

ベストアンサー1

「/dev/disk/by-xxx」パスを介してデバイスにアクセスします。

デバイス/パーティションの場合、これらのパスは変更されずに維持され、システムが維持する正しい/dev/sdXYデバイス自体を指すシンボリックリンクが含まれています。したがって、デバイスが他のデバイスに再接続できる間仮想使用できるデバイスとパスは変更されません。

/dev/disk/by-uuid/

  • 各ドライブ/デバイスには固有のUUIDがあるため、そのUUIDに基づくパスは、接続されている「デバイス」に関係なく常に同じです。私のシステムを例にしてみましょう。

    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
    
  • パスは、/dev/disk/by-uuid/b2254550-cc90-46e4-a84f-cb32bca8f83dsda/sdb/sdc などであれ、常にそのドライブのパーティション 1 を指します。

利用可能な他の方法があります:

/dev/disk/by-label/

    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

/ dev / sdcがWD 1TB、Samsung 2TB、または1GBのフラッシュドライブであるかどうか疑問に思う代わりに、特定のデバイスを非常に簡単にアーカイブ/使用/インストールできるようにパーティションにラベルを付けます。

また、インストールが簡単になります。/etc/fstab)

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

これバイパスパスは技術的に物理的な接続を特定のデバイスに接続するため、便利です。これは、ドライブが正しいパーティション情報を正しく処理できない場合や、奇妙なラベルを提供する場合などに役立ちます。

おすすめ記事