udev 为 USB 密钥创建设备文件,但不为分区创建设备文件

udev 为 USB 密钥创建设备文件,但不为分区创建设备文件

大多数 USB 密钥都可以在我的系统上使用:插入一个密钥并将udev为整个密钥创建一个设备文件(例如/dev/uba),以及为分区创建一个设备文件(例如/dev/uba1)。

我有一个特定的 USB 密钥(Sandisk Cruzer Micro 2Gb),它udev出现故障。密钥的设备文件已创建,但分区的设备文件未创建。

如果我比较dmesg工作密钥和问题密钥之间的输出,除了使用问题密钥时缺少一行之外,它们是相同的:uba: uba1。从中可以看出,它mknod永远不会为磁盘分区创建节点。

奇怪的是,我可以这样做......

sudo sfdisk -R /dev/uba

...强制重新检查驱动器分区,然后突然识别出分区,mknod创建一个设备文件,然后我就可以顺利访问密钥了。是不是有什么时间问题?

编辑:

自动挂载 USB 规则:

ACTION=="add", KERNEL=="ub[a-z]*[1-9]*", PROGRAM="/sbin/blkid -o values -s TYPE %N", RESULT=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="remove", KERNEL=="ub[a-z]*", RUN+="/home/ubuntu/.unmount_usb"

还: 问题密钥在重新格式化时默认为 FAT16。强制将其设置为 FAT32 会导致udevadm monitor --property设备和分区的属性与工作密钥完全相同,但问题仍然存在。这让我认为这不太可能是设备检测规则的问题,可能是设备本身的问题?这是一个合乎逻辑的结论吗?

答案1

仅从/dev/uba命名结构来看,听起来您创建了自己的 UDEV 规则,但现在它对您不起作用。我们需要查看该代码来帮助您。

我确信您已经查阅过此内容,但为了以防万一,请查阅此参考资料以创建 UDEV 规则。http://wiki.debian.org/udev

根据更新的反馈

ACTION=="添加", KERNEL=="ub[az]*[1-9]*", 程序="/sbin/blkid -o values -s TYPE %N", 结果=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="删除", KERNEL=="ub[az]*", RUN+="/home/ubuntu/.unmount_usb"

看来您的前任不知道usbmount。此规则仅适用于 vfat 格式的驱动器,现在您可以扩展该列表,或者...您可以安装 usbmount并调整它以创建所需的设备名称。然后,您只需进行少量配置更改即可获得为您维护的东西,而不是完整的自制解决方案。

顺便说一句,这里面有一个语法错误,但不是valuevalues从 CLI 运行它时会显示。

sudo blkid -o 值 -s 类型 /dev/sdb1
vfat

因此%N是输入,例如块设备,RESULT 是 stdout。这在 udev 手册页中有详细说明。您可能能够执行类似这样的操作RESULT=="[vfat|fat16]",或者您可以将输出转发到脚本并在那里进行更丰富的比较。快速查看 usbmount 包会发现,在添加和删除的调出脚本中都进行了丰富的比较。我强烈建议您迁移到usbmount

相关内容