我想/media
基于磁盘的UUID 挂载USB驱动器。如何在udev规则文件中使用USB驱动器的UUID,以及将UUID号作为文件夹名称安装USB驱动器的udev规则是什么。
该blkid
命令仅在安装时输出磁盘的UUID。
我想/media
基于磁盘的UUID 挂载USB驱动器。如何在udev规则文件中使用USB驱动器的UUID,以及将UUID号作为文件夹名称安装USB驱动器的udev规则是什么。
该blkid
命令仅在安装时输出磁盘的UUID。
Answers:
尽管udev无法直接访问UUID,但至少在Fedora和Ubuntu中,它们被设置为环境变量(ENV
)。您可以通过调用读取设备的所有环境变量udevadm info /dev/sdc
。例如在外部驱动器上的NTFS,我得到:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
E:
前面带有的所有内容均设置为环境变量。
您可以使用进行匹配ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
。作为第一个过滤器,我进行匹配KERNEL=="sd?2"
以确保仅处理具有正确分区号的块设备。完整的规则如下所示:
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
logger命令可用于断言该规则实际上已在运行。接下来,您应该检查规则是否包含任何语法错误udevadm test /dev/sdc2
。您的规则文件应在输出中列出,并且旁边没有错误消息。现在,您可以触发设备的所有规则,以检查您的规则是否按计划工作:sudo udevadm trigger /dev/sdc2
。如果您的规则匹配,您将在系统日志中找到自定义日志消息(/var/log/syslog
或通过journalctl -b
)。
编辑: ali_m指出环境变量是由以前的规则设置的,因此仅当.rules
文件具有足够高的词典顺序时才可访问。以“ 60”开头应该足够了。我个人以“ zz”(如果可能)开始我的规则,以便一眼就将它们与预定义规则区分开。
RUN
命令和其他地方使用UUIDUdev具有非常强大的变量和属性替换语法。具体来说,每次出现$env{ID_FS_UUID}
都会用驱动器的UUID代替。因此,要在下面安装设备,/media/
UUID
可以使用以下规则:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
但是,您可能想配置udisk,它专门用于您要解决的问题空间。请参阅https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia作为起点。
我使用udev而不是/etc/fstab
udisk 挂载设备的实际用例是挂载具有某些特质的zfs文件系统,使其不太适合通常的工具。
.rules
文件名必须以> 60开头。