我有一台 Ubuntu 8.04 LTS(服务器版),我需要编写一条 udev 规则,以便在插入 USB 拇指驱动器时执行操作。但是,我需要根据驱动器的文件系统执行不同的操作。我知道我可以使用 ID_FS_TYPE 环境变量来检查驱动器上的文件系统。
按照说明找到这里我尝试了一个虚拟的 udev 规则,如下所示:
KERNEL!="sd[a-z][0-9]", GOTO="my_udev_rule_end"
ACTION=="add", RUN+="/usr/bin/touch /tmp/test_udev_%E{ID_FS_TYPE}"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", RUN+="/usr/bin/touch /tmp/test_udev_it_works"
LABEL="my_udev_rule_end"
但是,当我插入带有 vfat 文件系统的 U 盘(这应该会触发两个规则)时,我最终得到一个名为 的文件/tmp/test_udev_vfat
,这意味着第一个规则已成功触发,和ID_FS_TYPE 环境变量是“vfat”,但我没有其他文件,这意味着虽然我知道 ID_FS_TYPE 环境变量是“vfat”,但我似乎无法检查它是否匹配。
我尝试用谷歌搜索这个东西,但几乎每个结果似乎都假设ENV{ID_FS_TYPE}=="vfat"
有效。我也在 Ubuntu 10.04 LTS 服务器上测试了完全相同的 udev 规则,得到了相同的结果。
我可能忽略了一些非常简单的东西,但我就是搞不懂。有人看到我的 udev 规则有什么问题导致它无法匹配 ENV{ID_FS_TYPE} 吗?
谢谢。
答案1
尝试在文件开头添加以下行:
IMPORT{program}="/sbin/blkid -o udev -p %N"
答案2
您是否尝试过添加此行?
KERNEL=="sd[az][]", IMPORT{program}="/lib/udev/vol_id /dev/%k"
您可以将“vol_id”定位在其他地方。