我想超越这个优秀的解决方案@AB 允许使用udev
规则自动挂载给定的可移动 ext3 FS。具体来说,我想指定几个安装选项:“ ”,最好在用于安装它的nodev,noexec,x-gvfs-show
特定规则内,因为它处理一种非常具体的物理介质。udev
如果未指定任何选项,则卷将按如下方式安装:
$ cat /proc/mounts | grep -e MYLABEL
/dev/mmcblk0p1 /mnt/MYLABEL ext3 rw,relatime,data=ordered 0 0
为了指定挂载选项,我尝试扩展udev
上一个解决方案中的规则,如下所示:
KERNEL=="mmc*", ENV{ID_FS_UUID}=="______", RUN+="/usr/local/sbin/mount_by.sh '%E{ID_FS_LABEL}' '%E{ID_FS_UUID}' 'nodev,noexec,x-gvfs-show'"
其中/usr/local/sbin/mount_by.sh
包括:
#!/bin/sh
/bin/mount "/dev/disk/by-uuid/$2" "/mnt/$1" -o "$3"
由于根定义的挂载选项似乎被拒绝,并且卷(SD 卡)被默默地挂载在 /media/MYUSER/MYLABEL,因此上述操作悄然中断。
怎么了 ?
我尝试做的是:
我见过许多帖子,涉及使用时挂载选项的规范困难udev
(例如1,2,...) 仍未得到答复。
一x-gvfs-show
处理与规则结合使用的GVFS 选项udev
,此时挂载的卷必须出现在Devices
Nautilus GUI 下,并且非 root 用户必须能够卸载它。为了至少涵盖最后一个方面,我恢复为不在我的 udev 规则中指定挂载选项,但添加了一个/etc/fstab
条目,这是一个非常丑陋的黑客行为,因为我udev
同时为相同的 uuid 卷保留了一个功能规则。尽管如此,我还是添加了:
UUID=_________ /mnt/MYLABEL ext3 nodev,noexec,x-gvfs-show 0 2
FS 已安装,但尽管它在 Nautilus 中按预期出现,却cat /proc/mounts | grep -e MYLABEL
产生与以前相同的结果……即选项nodev,noexec
似乎被忽略了。
毫不奇怪,我还在屏幕上收到错误消息:
无法安装 MYLABEL。设备 /dev/mmcblk0p1 已安装在“/mnt/MYLABEL”。
有人有什么想法吗?
赏金请尝试提供一个规范的答案,以便为该 OP 和所有对通过规则指定挂载选项感兴趣的人提供服务udev
。如果不可能,请解释原因并提供可行的解决方法。谢谢。
答案1
剧本
#!/bin/sh
export mount_point="/mnt/$1"
existing_device=$(awk '$2 == ENVIRON["mount_point"] {print $1; exit}' < /proc/mounts)
if [ -n "$existing_device" ]; then
exit 1
fi
mkdir -p "$mount_point"
sleep 1 # Perhaps not necessary, but in the test with the OP it was necessary
mount "/dev/disk/by-uuid/$2" "$mount_point" -o "$3"
exit 0
应该可以完美地与这样的 udev 规则配合使用(您必须替换 UUID)
KERNEL=="mmc*", ENV{ID_FS_UUID}=="13ededb9-41e9-4674-b9dc-40ce178af91d", RUN+="/usr/local/bin/mount_by '%E{ID_PART_ENTRY_NAME}' '%E{ID_FS_UUID}' nodev,noexec"
由于 udev-rules 以 的身份运行root
,因此-o
将使用 。
糟糕的是,在我的系统中,x-gvfs-show
选项列表中没有-o
答案2
您不应该使用 udev 规则来执行此操作。首先,它与 udisk 冲突:它们都试图将驱动器安装在不同的地方,至于哪一个会获胜,谁也说不准。此外,当您使用完驱动器后,您希望能够在 GUI 中右键单击它并弹出它,但如果 udev 规则安装了它,您就无法这样做。
如果您希望使用自定义选项或自定义位置将其挂载,您只需要在 /etc/fstab 中为其添加一个条目,并确保包含“用户”选项,该选项允许非 root 用户使用 udisks 自动挂载它,然后他们可以稍后卸载它。
答案3
补充 AB 的回答并记录如下:
安装选项 能 在特定条件下,在 udev 规则中指定...。当我运行测试时,我注意到一些选项是:
- 接受并执行:
ro
,,,rw
nodev
noexec
- 接受并忽略:
comment=x-gvfs-show
, - 不被接受,因为它们违反了 udev 规则:
mode=0XYZ
,x-gvfs-show
在后一种情况下,违反udev
规则意味着udisk
使用默认选项自动安装介质。
标签udev
,MODE="0550"
你可以认为相当于调用只读( ro
) mount-option,将被忽略。请注意,指定ro
或rw
不会像您预期的那样显示在 Nautilus 中。奇怪的是,Nautilus 显示的权限保持不变,而如果 ro
设置则尝试写入将导致警告消息和写入权限拒绝。错误?
最后但并非最不重要的,不要/etc/fstab
在为给定设备指定安装规则的同时安排条目udev
。这将导致冲突和错误消息,因为udisk
将与您的规则竞争udev
安装设备。这并不奇怪。但是设备仍将被安装(在我的情况下,根据规则udev
- 请不要问为什么......)甚至可以访问。
有点 HTH。