VMware ESXi 6 인프라에서 실행되는 RedHat 7 가상 머신이 있습니다. 플로피 디스크 삽입 이벤트를 감지한 다음 해당 삽입 이벤트를 기반으로 스크립트를 시작해야 합니다.
나의 초기 접근 방식은 플로피 삽입 시 스크립트 실행을 트리거하기 위해 Udev 규칙을 사용하는 것이었지만 이벤트가 실행되지 않는 것 같습니다.
/etc/udev/rules.d/99-my.rules
SUBSYSTEM=="block", KERNEL=="fd0", ACTION=="change", RUN+="sh -c /my-custom-script"
그것이 작동하지 않았을 때 나는 문제를 해결하려고 노력했고 플러그인에서 실행하는 대신 몇 분마다 플로피를 마운트하고 특정 파일이 마운트 지점에 있는지 테스트하는 크론 작업을 작성했습니다. 그러나 플로피를 삽입하지 않으면 다음과 같은 불쾌한 출력이 발생합니다.
end_request: I/O error, dev fd0, sector0
그래서 저는 Udev 규칙이 작동하지 않는 이유를 알아내려고 노력했습니다. 제가 Udev 규칙을 잘못된 방식으로 사용하고 있는 걸까요, 아니면 이를 달성할 수 있는 다른 방법이 있나요?
답변1
내가 아는 한, udev는 플로피 드라이브를 모니터링하는 방법을 제공하지 않습니다. 플로피 드라이브는 삽입을 감지하는 수단을 제공하지 않습니다. 디스크 삽입을 감지하려면 드라이브를 지속적으로 폴링해야 합니다.
이 diskd
유틸리티는 귀하의 요구를 충족시킬 수 있습니다. 지속적으로 드라이브를 폴링하고 연결되면 명령을 종료하거나 실행합니다. 그것은 일부이다fdutils, Debian 아래 저장소에서 설치할 수 있습니다. RHEL/Fedora에서는 소스 코드를 컴파일해야 합니다.
용법:
diskd [-d drive] [-i interval] [-e command]
다음은 디스크 드라이브를 모니터링하고, 연결 시 마운트한 다음 종료해야 합니다. 나는 IDE 플로피 드라이브(LS-120 SuperDisk)만 가지고 있기 때문에 이것을 시도하지 않았습니다.
diskd -d /dev/fd0 -e "udisks --mount /dev/fd0 --mount-fstype=vfat"
floppy
플로피 장치(예: )에 직접 액세스해야 하므로 루트가 아닌 사용자로 이 그룹을 실행하려면 이 그룹의 구성원 이어야 합니다 /dev/fd0
. FDPOLLDRVSTAT
ioctl(참고자료 참조 )을 사용하여 man 4 fd
장치를 폴링합니다.
게다가매뉴얼 페이지/문서다음과 같은 경고가 있습니다.
프로그램은 짧은 시간 동안 모터를 켠 다음 트랙 1을 찾는 방식으로 작동합니다. 장기적으로 하드웨어가 손상될 수 있습니다. Amigas도 이러한 기술을 사용했지만 디스크 드라이브는 몇 달 사용 후 제대로 회전하지 않는 것으로 알려져 있습니다.
이것이 정말 심각한 문제인지는 잘 모르겠지만, 프로덕션 환경에서 사용하려는 경우 예비 드라이브를 준비하는 것이 유용할 수 있습니다. 더 이상 그렇게 비싸지 않죠?
(이 fdmountd
유틸리티는 꽤 오래된 것처럼 들리며 "최신" 커널의 일반 FAT12 형식 디스크에서 작동할지 의심됩니다.)