
데이터 복구를 수행하는 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-cb32bca8f83d
sda/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
그만큼우회로경로는 기술적으로 특정 장치에 대한 물리적 연결을 연결하므로 유용할 수 있습니다. 드라이브가 적절한 파티션 정보와 제대로 작동하지 않고 이상한 레이블 등을 제공하는 경우 유용할 수 있습니다.