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

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

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

장치는 으로 등록됩니다 /dev/sdb. 때로는 수천 번의 재설정에 한 번 정도 어떤 이유로 /dev/sdc. 다시 되돌리는 유일한 방법은 몇 초 동안 USB 연결을 물리적으로 분리한 다음 다시 연결하는 것입니다. 그러면 /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: 읽기(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-storage 1-1.2:1.0
6월 12일 12:57:46 우분투 커널: [206074.240443] scsi 17:0:0:0: Direct-Access 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다시 사용할 수 있도록 강제로 다시 사용할 수 있게 만드는 방법일까요 ?

현재 실행 중인 응용 프로그램은 시작 시 장치를 한 번 열고 복구를 시도하는 동안 전체 시간 동안 열어 둡니다. 저는 이 애플리케이션을 작성했고 그 동작을 제어할 수 있으므로 코드의 솔루션도 가능하지만 먼저 시스템 수준 솔루션이 있는지 확인하고 싶습니다(아직 소프트웨어 해결 방법을 시도하지 않았으므로 더 쉬운 방법이 있습니다).

또한 로그에는 전원 관련 문제가 없지만 전원 문제인지 궁금합니다. 아직 전원이 공급되는 허브를 사용해 본 적이 없습니다. 이 기기는 과거에 사용 가능한 USB 전류 측면에서 단 한 번도 실패한 적이 없는 Lenovo ThinkPad T520(AC 전원으로 실행)입니다.

시스템은 Ubuntu 12.04 LTS, 커널 3.2.0-64, 64비트입니다.

답변1

/dev/disk/by-xxx 경로를 통해 장치에 액세스합니다.

이러한 경로는 시스템에서 유지 관리하는 적절한 /dev/sdXY 장치 자체에 대한 심볼릭 링크와 함께 장치/파티션에 대해 동일하게 유지됩니다. 따라서 장치가 다른 장치에 다시 연결될 수 있는 동안가상장치에서 사용할 수 있는 경로는 변경되지 않습니다.

/dev/disk/by-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

그만큼우회로경로는 기술적으로 특정 장치에 대한 물리적 연결을 연결하므로 유용할 수 있습니다. 드라이브가 적절한 파티션 정보와 제대로 작동하지 않고 이상한 레이블 등을 제공하는 경우 유용할 수 있습니다.

관련 정보