![USB 드라이브를 어떻게 삽입하나요?](https://linux55.com/image/127349/USB%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%BD%EC%9E%85%ED%95%98%EB%82%98%EC%9A%94%3F.png)
질문
내 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" 옵션을 사용하여 디스크를 다시 로드합니다. 그러나 이 설명은 이동식 미디어가 있는 장치에만 적용됩니다.