USB 드라이브를 어떻게 삽입하나요?

USB 드라이브를 어떻게 삽입하나요?

질문

내 USB 드라이브(/dev/sdd)에서 다음 명령을 사용한 후:

# physically plugging usb-drive in at /dev/sdd
> umount /dev/sdd1
> eject /dev/sdd

마지막 작업을 실행취소할 수 없습니다. 프로그래밍 방식으로 드라이브를 다시 마운트하려면 어떻게 해야 합니까?

장치에 물리적으로 액세스할 수 없으며 재부팅할 방법도 없습니다.


무엇을 시도해 보셨나요?

보시다시피 일반적인 작업은 작동하지 않습니다.

> mount /dev/sdd1
mount: /dev/sdd1: can't find in /etc/fstab.

/dev/sdd1더 이상 존재하지 않는 것을 확인할 수 있습니다 .

> ls /dev/sdd*
/dev/sdd

이제 동일한 유틸리티를 다시 사용하여 팝업을 취소해 보겠습니다.

> eject --trayclose /dev/sdd
> ls /dev/sdd*
/dev/sdd

아무 일도 일어나지 않는 것 같으니 USB 드라이브를 드라이버에 바인딩해 보겠습니다.

> udevadm info /dev/sdd | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/host6/target6:0:0/6:0:0:0/block/sdd
> echo -n "1-1:1.0" > /sys/bus/usb/drivers/usb-storage/unbind
> ls -d /sys/bus/usb/drivers/usb-storage/1-1\:1.0
ls: cannot access '/sys/bus/usb/drivers/usb-storage/1-1:1.0': No such file or directory
> echo -n "1-1:1.0" > /sys/bus/usb/drivers/usb-storage/bind
> ls -d /sys/bus/usb/drivers/usb-storage/1-1\:1.0
1-1:1.0

좋습니다. 바인딩 해제 및 바인딩이 성공했습니다. 이는 문제가 아니며 해결책도 아닙니다. 또한 장치의 전원이 여전히 켜져 있는 것 같습니다. 뭔가를 촉발시켜 봅시다.

> udevadm trigger --name-match=/dev/sdd

이것도 문제가 해결되지 않는 것 같습니다. 이제 파티션 테이블은 /dev/sdd존재하지만 /dev/sdd1존재하지 않으므로 다시 읽어 보도록 하겠습니다 . 나는 이것을 달성하기 위해 세 가지 다른 방법을 찾았습니다.

> partprobe /dev/sdd
Error: Error opening /dev/sdd: No medium found
> hdparm -z /dev/sdd

/dev/sdd:
 re-reading partition table
> partx -u /dev/sdd
partx: cannot open /dev/sdd: No medium found
> ls /dev/sdd*
/dev/sdd

아직 /dev/sdd1. 다시 검색해 보세요.

> echo 1 > /sys/block/sdd/device/rescan
> ls /dev/sdd*
/dev/sdd

fdisk아직 아무것도 아닙니다 . 이 문장이 말하는 내용을 확인해 보겠습니다 .

> fdisk -l | grep sdd

글쎄요. 그런 다음 USB 드라이브를 재설정하려고했습니다.

> echo 0 > /sys/bus/usb/devices/1-1\:1.0/authorized
> echo 1 > /sys/bus/usb/devices/1-1\:1.0/authorized
> ls /dev/sdd*
ls: cannot access '/dev/sdd*': No such file or directory

상황을 더욱 악화시키는 것은 시행착오가 실패하는 것입니다. 나는 포기한다. 내가 여기서 무엇을 놓치고 있는 걸까요?


*얼굴 손바닥* eject왜요? !

사실 저는 Linux가 I/O 오류 이후 더 이상 USB 드라이브를 마운트하기를 원하지 않는 또 다른 문제를 해결하기 위해 이 솔루션이 필요했습니다. USB 드라이브를 물리적으로 다시 삽입하면 문제가 해결되므로 프로그래밍 방식으로 이 작업을 수행하는 방법을 알아야 합니다. 이렇게 해도 원래 문제가 해결되지 않더라도 취소하는 방법을 알고 싶습니다 eject.


편집: 자세한 내용

의 추가 소스입니다.kernel.org USB 핫 플러그 ​​정보, 무슨 일이 일어나야 하는지 알려줍니다:

  • 장치를 처리할 수 있는 드라이버를 찾으십시오. 여기에는 커널 모듈 로드가 포함될 수 있습니다. 최신 드라이버는 module-init-tools를 사용하여 해당 장치(및 클래스) 지원을 사용자 유틸리티에 게시할 수 있습니다.
  • 드라이버를 장치에 바인딩합니다. 버스 프레임워크는 이를 수행하기 위해 장치 드라이버의 프로브() 루틴을 사용합니다.
  • 다른 하위 시스템에 새 장치를 구성하도록 지시합니다. 인쇄 대기열 활성화, 네트워크 시작, 디스크 파티션 마운트 등이 필요할 수 있습니다. 경우에 따라 이는 드라이버별 작업이 됩니다.

아직 마지막 단계가 더 필요한 것 같습니다. USB 드라이브에 전원이 공급되고 Linux가 USB 드라이브와 통신할 수 있음을 보여주는 "꺼내기" 후 USB 드라이브 상태에 대한 추가 정보가 지원됩니다.

> cat /sys/block/sdd/device/state
running
> cat /sys/block/sdd/device/power/runtime_status
active
> cat /sys/block/sdd/device/power/runtime_suspended_time
0
> cat /sys/block/sdd/device/power/control
on

답변1

장치가 CDROM 드라이브가 아닌 경우 eject일반 SCSI "START STOP" 명령으로 돌아가서 "eject" 옵션을 설정하십시오.

반대의 "START STOP"은 "start" 옵션을 사용하여 보낼 수 있습니다 sg_start -s. sg_start는 대부분의 배포판에서 sg3_utils 패키지의 일부로 제공됩니다.

이 경우에는 sg_start -s드라이브를 재부팅하는 것만으로도 충분합니다. sg_start --load불필요한. (나는 이것이 발생한 팝업 작업이라고 생각하지 않기 때문에 이것은 나에게 의미가 있습니다).

다른 사용자들은 이것이 작동하지 않는다고 주장합니다. USB 드라이브 컨트롤러(특히 소형 플래시 드라이브)는 약간 이상할 수 있으므로 일부 드라이브가 이 명령을 거부하더라도 놀라지 않을 것입니다.

https://unix.stackexchange.com/a/394961/29483

플래시 ROM 스틱의 USB 컨트롤러는 일반적으로 장치의 전원을 끄고 더 이상의 상호 작용을 방지하는 방식으로 반응합니다. 즉, USB 하위 시스템에서 완전히 사라지며 다시 액세스하려면 먼저 다시 열거해야 합니다.

예를 들어 CD/DVD 드라이브로 전송되면 동일한 명령이 디스크를 꺼내고 "START STOP" 명령의 기존 "LOAD" 옵션을 사용하여 디스크를 다시 로드합니다. 그러나 이 설명은 이동식 미디어가 있는 장치에만 적용됩니다.

관련 정보