我有一个在 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"
当这不起作用时,我尝试解决这个问题,而不是在插入时执行,而是编写了一个 cron 作业,尝试每隔几分钟挂载软盘并测试挂载点中是否有某些文件。然而,当没有插入软盘时,这会导致一些令人讨厌的输出:
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
组的成员才能以非 root 用户身份运行它,因为它需要直接访问软盘设备(例如/dev/fd0
)。它使用FDPOLLDRVSTAT
ioctl(请参阅 参考资料man 4 fd
)来轮询设备。
还有手册页/文档有以下警告:
该程序的工作原理是在很短的时间内打开电机,然后寻找跟踪 -1。从长远来看,这可能会损坏硬件。 Amigas 也使用这些技术,但众所周知,其磁盘驱动器在使用几个月后就无法正常旋转。
我不确定这是否真的是一个严重的问题,但如果您要在生产环境中使用它,那么手头有一个备用驱动器可能会很有用。它们不再那么贵了,对吧?
(该fdmountd
实用程序听起来相当古老,我非常怀疑它是否可以在“较新”内核上使用普通 FAT12 格式的磁盘。)