大多数 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
并调整它以创建所需的设备名称。然后,您只需进行少量配置更改即可获得为您维护的东西,而不是完整的自制解决方案。
顺便说一句,这里面有一个语法错误,但不是value
,values
从 CLI 运行它时会显示。
sudo blkid -o 值 -s 类型 /dev/sdb1 vfat
因此%N
是输入,例如块设备,RESULT 是 stdout。这在 udev 手册页中有详细说明。您可能能够执行类似这样的操作RESULT=="[vfat|fat16]"
,或者您可以将输出转发到脚本并在那里进行更丰富的比较。快速查看 usbmount 包会发现,在添加和删除的调出脚本中都进行了丰富的比较。我强烈建议您迁移到usbmount
。