我想/media根据磁盘的 UUID挂载 USB 驱动器。如何在 udev 规则文件中使用 USB 驱动器的 UUID,以及使用 UUID 编号作为文件夹名称安装 USB 驱动器的 udev 规则是什么。
该blkid命令仅在安装时输出磁盘的 UUID。
小智 14
尽管 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
[…]
Run Code Online (Sandbox Code Playgroud)
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]"
Run Code Online (Sandbox Code Playgroud)
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}"
Run Code Online (Sandbox Code Playgroud)
您可能想要配置 udisks,但是,它专门用于您要解决的问题空间。请参阅https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia作为起点。
我使用 udev 而不是/etc/fstabudisks挂载设备的实际用例是挂载 zfs 文件系统,这些文件系统有一些特性,使它们不太适合常用工具。
| 归档时间: |
|
| 查看次数: |
12462 次 |
| 最近记录: |