我有一个有两个分区的 USB 盘。插入后,我使用以下命令来查找设备。
dmesg
示例输出
[11195.236020] usb 2-2: new high-speed USB device number 9 using ehci-pci
[11195.375432] usb 2-2: New USB device found, idVendor=058f, idProduct=6387
[11195.375436] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[11195.375439] usb 2-2: Product: Mass Storage
[11195.375441] usb 2-2: Manufacturer: Generic
[11195.375444] usb 2-2: SerialNumber: 605DD851
[11195.375968] usb-storage 2-2:1.0: USB Mass Storage device detected
[11195.376732] scsi host10: usb-storage 2-2:1.0
[11196.377830] scsi 10:0:0:0: Direct-Access Generic Flash Disk 8.07 PQ: 0 ANSI: 4
[11196.378159] sd 10:0:0:0: Attached scsi generic sg3 type 0
[11196.379647] sd 10:0:0:0: [sdc] 15769600 512-byte logical blocks: (8.07 GB/7.51 GiB)
[11196.381548] sd 10:0:0:0: [sdc] Write Protect is off
[11196.381552] sd 10:0:0:0: [sdc] Mode Sense: 23 00 00 00
[11196.383579] sd 10:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[11196.390454] sdc: sdc1 sdc2
[11196.394696] sd 10:0:0:0: [sdc] Attached SCSI removable disk
因此,我的设备是/sdc
和我的分区/dev/sdc1
和/dev/sdc2
我使用了这两个命令来获取它们的 UUID
udevadm info /dev/sdc1 | grep ID_FS_UUID=
示例输出
E: ID_FS_UUID=dbf323e9-8d63-444c-9c11-76b9b9a0fed4
和
udevadm info /dev/sdc2 | grep ID_FS_UUID=
示例输出
E: ID_FS_UUID=0eeb7004-8955-4358-a205-07d7376adb8c
因此我的 UUID 是dbf323e9-8d63-444c-9c11-76b9b9a0fed4
和0eeb7004-8955-4358-a205-07d7376adb8c
或每个分区
/dev/sdc1
>>dbf323e9-8d63-444c-9c11-76b9b9a0fed4
/dev/sdc2
>>0eeb7004-8955-4358-a205-07d7376adb8c
现在我创建了一个文件/etc/udev/rules.d/100-myusb.rules
sudo nano /etc/udev/rules.d/100-myusb.rules
并添加以下规则
KERNEL=="sd??", ENV{ID_FS_UUID}=="0eeb7004-8955-4358-a205-07d7376adb8c", ENV{UDISKS_IGNORE}="1"
并重新启动udev
sudo service udev restart
但再次插入后,两个分区都显示在FilesakaNautilus
我做错了什么?
编辑于 2015 年 9 月 6 日 21:07:50 CEST
规则
KERNEL=="sd??", ENV{ID_FS_UUID}=="0eeb7004-8955-4358-a205-07d7376adb8c", RUN+="/bin/mkdir /tmp/folder1"
创建文件夹/tmp/folder1
对于@Sneetsher
KERNEL=="sd??", ENV{ID_FS_UUID}=="0eeb7004-8955-4358-a205-07d7376adb8c", RUN+="/usr/bin/env > /tmp/udev-partition-env.log"
有效,但输出文件是env_root.output
?o_O
编辑时间:2015 年 9 月 7 日星期一 20:31:06 CEST
测试过,无效
KERNEL=="sd??", ENV{ID_FS_UUID}=="0eeb7004-8955-4358-a205-07d7376adb8c", ENV{UDISKS_AUTO}="0", ENV{UDISKS_SYSTEM}="0"
和
KERNEL=="sd??", ENV{ID_FS_UUID}=="0eeb7004-8955-4358-a205-07d7376adb8c", ENV{UDISKS_AUTO}="0"
答案1
最后,我在 VirtualBox 机器中设置了相同的环境 Ubuntu 15.04。
ACTION=="add", ENV{ID_FS_UUID}=="bf50cb5d-60bf-44de-9a8f-1bf74850a5a1", ENV{UDISKS_IGNORE}="1"
它的运行正如预期的那样完美。
:DI 讨厌 3 位数字前缀
100-
(通用/标准是 2),所以我使用99-
大部分时候都是这样。我以前从未尝试过,将其重命名为类似于您的:# mv /etc/udev/rules.d/99-sneetsher-tests.rules /etc/udev/rules.d/100-myusb-sneetsher-tests.rules
瞧!现在它不起作用了。
该规则被其他规则覆盖,很确定系统规则来自
/lib/udev/rules.d/
您可以尝试列出所有规则文件来检查:
find /etc/udev/rules.d/ /lib/udev/rules.d/ -iname "*.rules" -printf "%f\n" | sort
规则文件
udev 规则从位于系统规则目录 /lib/udev/rules.d、易失性运行时目录 /run/udev/rules.d 和本地管理目录 /etc/udev/rules.d 中的文件中读取。所有规则文件都按词汇顺序集体排序和处理,无论它们位于哪个目录中。但是,文件名相同的文件会互相替换。/etc 中的文件具有最高优先级,/run 中的文件优先于 /lib 中同名的文件。如果需要,这可用于用本地文件覆盖系统提供的规则文件;/etc 中与 /lib 中的规则文件同名的符号链接指向 /dev/null,将完全禁用规则文件。规则文件必须具有扩展名 .rules;其他扩展名将被忽略。
来源:
man udev
也许这是检查的最佳方法
udevadm test <path>
, 例子:udevadm test /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.0/host9/target9:0:0/9:0:0:0/block/sdb/sdb2
对名称
100-myusb.rules
&进行测试99-myusb.rules
,您将看到规则文件读取的顺序以及触发了哪些规则。参考: 哪条 udev 规则触发?