당신이 나를 도울 수 있기를 바랍니다. USB를 통해 연결된 외장(슬림) Blu-ray 드라이브가 있습니다. 드라이브를 켤 때마다 활동 LED가 빠르게 깜박이기 시작하고 드라이브를 끌 수 없습니다. 닫으려고 하면 트레이가 즉시 나타납니다. 트레이를 닫으려면 USB를 분리해야 합니다.
Windows에서는 이 문제가 발생하지 않으므로 소프트웨어 관련 문제인 것 같습니다. 우분투 20.04.3 LTS가 있습니다. 시스템 로그에 흥미로운 내용이 있습니다:
Sep 14 11:36:07 linux-gurke kernel: scsi 6:0:0:0: CD-ROM PIONEER BD-RW BDR-UD04 1.11 PQ: 0 ANSI: 0
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Power-on or device reset occurred
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: [sr0] scsi3-mmc drive: 62x/62x writer dvd-ram cd/rw xa/form2 cdda tray
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Attached scsi CD-ROM sr0
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Attached scsi generic sg2 type 5
Sep 14 11:36:13 linux-gurke kernel: usb 6-1: USB disconnect, device number 4
Sep 14 11:36:13 linux-gurke kernel: scsi 6:0:0:0: rejecting I/O to dead device
Sep 14 11:36:13 linux-gurke systemd-udevd[8161]: sr0: Process 'cdrom_id --eject-media /dev/sr0' failed with exit code 1.
드라이브 연결을 끊자마자 마지막 줄 "미디어 꺼내기 실패"가 시스템 로그에 기록됩니다. 분명히 일부 프로세스는 트레이가 열려 있는 동안 트레이 꺼내기/닫기 명령을 실행하려고 시도하고 있는데, 이는 씬 드라이브이고 트레이를 닫으려면 수동으로 밀어야 하기 때문에 분명히 작동하지 않습니다.
몇가지 정보:
$> lsusb -s 006:005 -t
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
|__ Port 1: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
$> lsusb -s 006:005
Bus 006 Device 005: ID 18a5:0428 Verbatim, Ltd Verbatim 4K BD RW
드라이브는 그대로 제조되었지만 시스템 로그에는 Pioneer 드라이브로 나타납니다.
나는 이것을 시도했지만 echo 0 > /proc/sys/dev/cdrom/autoclose
아무런 echo 0 > /proc/sys/dev/cdrom/autoeject
차이가 없습니다. 문제를 파악하도록 도와주실 수 있나요?
답변1
문제를 일으키는 나쁜 놈들을 찾았습니다. 활동 LED가 빠르게 깜박일 때마다 systemd-udevd
CPU 시간의 약 3%를 차지하는 것으로 나타났습니다. 이로 인해 CD를 삽입하고 꺼내기 버튼을 눌렀을 때 명령을 실행하게 되었습니다 udevadm monitor -u
(버튼을 누른 순간을 선으로 표시했습니다 press
).
$> udevadm monitor -u
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
UDEV [6294.187246] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
press
UDEV [6319.266413] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.393838] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.481907] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.574832] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.672829] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.770823] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.868807] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6319.966829] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6320.064811] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV [6320.163830] change /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
이러한 변경 이벤트는 장치 연결을 끊을 때까지 계속 나타납니다. 약간의 조사 끝에 /lib/udev/rules.d/60-cdrom_id.rules
다음 줄이 포함된 이 파일을 발견했습니다 .
# media eject button pressed
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
시스템 로그에 표시된 오류를 기억하시나요? 파일을 복사하고 줄 /etc/udev/rules.d
을 다음으로 변경했습니다.
ENV{DISK_EJECT_REQUEST}=="?*", GOTO="cdrom_end"
또 다른 문제가 발생했지만 이로 인해 문제가 즉시 해결되었습니다. 꺼내기 버튼을 눌러도 아무 일도 일어나지 않습니다. 그러나 꺼내기 명령을 실행하면 eject /dev/sr0
제대로 작동하고 드라이브가 이상하게 작동하지 않습니다. (이 명령은 이전에는 하드웨어 꺼내기 버튼을 누르는 것과 동일한 효과를 가졌습니다!)
확실하지는 않지만 udev 패키지 내의 버그일 수 있습니다. 내 "수정"은 확실히 해결 방법일 뿐입니다. 무언가가 udev 이벤트의 끝없는 소스를 생성하고 있어 트레이가 닫히자마자 미디어가 배출되는 것으로 보입니다...
어쩌면 이 문제가 발생한 다른 사람에게 도움이 될 수도 있습니다!