USB 저장 장치가 재설정 시 다른 장치를 사용하지 못하도록 방지

USB 저장 장치가 재설정 시 다른 장치를 사용하지 못하도록 방지

데이터 복구를 수행하는 USB 인클로저에 하드 드라이브가 있습니다. 드라이브의 상태가 매우 좋지 않으며 읽는 동안 자주 재설정됩니다.

장치는 /dev/sdb때때로 수천 번 재설정할 /dev/sdc때마다 . /dev/sdb다시 등록하세요.

이는 매우 파괴적이며 많은 문제를 야기합니다. 왜냐하면 프로세스 중 언제든지(예: 직장에 있을 때나 잠자는 동안) 이런 일이 발생하면 내가 하고 있는 일 중 일부는 몇 시간 또는 며칠이 걸릴 수 있기 때문입니다. 결정하려고 노력하다언제해당 시점부터 발생하고 계속되거나 다시 시작됩니다. 둘 다 매우 어렵습니다.

제가 예상하고 문제가 없는 "정상적인" 재설정 세트는 다음과 같습니다.

6월 12일 11:15:28 우분투 커널: [199944.703449] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:29 우분투 커널: [199945.574141] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:29 우분투 커널: [199946.017483] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:30 우분투 커널: [199946.460816] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:30 우분투 커널: [199946.904151] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:30 우분투 커널: [199947.347659] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:31 우분투 커널: [199947.690737] sd 16:0:0:0: [sdb] 처리되지 않은 오류 코드
6월 12일 11:15:31 우분투 커널: [199947.690747] sd 16:0:0:0: [sdb] 결과: 호스트바이트=DID_ERROR 드라이버바이트=DRIVER_OK
6월 12일 11:15:31 우분투 커널: [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 우분투 커널: [199947.690780] end_request: I/O 오류, dev sdb, 섹터 73165
6월 12일 11:15:35 우분투 커널: [199951.585312] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:36 우분투 커널: [199952.455995] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:36 우분투 커널: [199952.899329] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:36 우분투 커널: [199953.342669] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:37 우분투 커널: [199953.786009] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:37 우분투 커널: [199954.229346] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 11:15:38 우분투 커널: [199954.572710] sd 16:0:0:0: [sdb] 처리되지 않은 오류 코드
6월 12일 11:15:38 우분투 커널: [199954.572721] sd 16:0:0:0: [sdb] 결과: 호스트바이트=DID_ERROR 드라이버바이트=DRIVER_OK
6월 12일 11:15:38 우분투 커널: [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 우분투 커널: [206070.288681] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 12:57:43 우분투 커널: [206070.732013] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 12:57:43 우분투 커널: [206071.175603] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 12:57:44 우분투 커널: [206071.618695] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 12:57:44 우분투 커널: [206072.062224] usb 1-1.2: ehci_hcd를 사용하여 고속 USB 장치 번호 23 재설정
6월 12일 12:57:44 우분투 커널: [206072.095010] usb 1-1.2: USB 연결 끊김, 장치 번호 23
6월 12일 12:57:44 우분투 커널: [206072.098317] scsi 16:0:0:0: 오프라인 장치에 대한 I/O가 거부되었습니다.
6월 12일 12:57:44 우분투 커널: [206072.098327] scsi 16:0:0:0: [sdb] 요청 종료 중
6월 12일 12:57:44 우분투 커널: [206072.098345] scsi 16:0:0:0: [sdb] 처리되지 않은 오류 코드
6월 12일 12:57:44 우분투 커널: [206072.098349] scsi 16:0:0:0: [sdb] 결과: 호스트바이트=DID_NO_CONNECT 드라이버바이트=DRIVER_OK
6월 12일 12:57:44 우분투 커널: [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 우분투 커널: [206072.098387] end_request: I/O 오류, dev sdb, 섹터 57053323
6월 12일 12:57:44 우분투 커널: [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 우분투 커널: [206072.755377] scsi17: usb 저장소 1-1.2:1.0
6월 12일 12:57:46 우분투 커널: [206074.240443] scsi 17:0:0:0: 직접 액세스 HTS72101 0G9SA00 PQ: 0 ANSI: 6
6월 12일 12:57:46 우분투 커널: [206074.242675] sd 17:0:0:0: 첨부된 scsi 일반 sg2 유형 0
6월 12일 12:57:46 우분투 커널: [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

이것우회로경로는 기술적으로 물리적 연결을 특정 장치에 연결하므로 유용할 수 있습니다. 이는 드라이브가 올바른 파티션 정보를 제대로 처리하지 못하거나 이상한 레이블을 제공하는 경우 등에 유용할 수 있습니다.

관련 정보