在 14.04.3 上安装 ext3 fs 的 udev-rule 的安装选项

在 14.04.3 上安装 ext3 fs 的 udev-rule 的安装选项

我想超越这个优秀的解决方案@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(例如12,...) 仍未得到答复。

x-gvfs-show处理与规则结合使用的GVFS 选项udev,此时挂载的卷必须出现在DevicesNautilus 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,,,rwnodevnoexec
  • 接受并忽略:comment=x-gvfs-show
  • 不被接受,因为它们违反了 udev 规则:mode=0XYZx-gvfs-show

在后一种情况下,违反udev规则意味着udisk使用默认选项自动安装介质。

标签udevMODE="0550"你可以认为相当于调用只读( ro) mount-option,将被忽略。请注意,指定rorw不会像您预期的那样显示在 Nautilus 中。奇怪的是,Nautilus 显示的权限保持不变,而如果 ro设置则尝试写入将导致警告消息和写入权限拒绝。错误?

最后但并非最不重要的,不要/etc/fstab在为给定设备指定安装规则的同时安排条目udev。这将导致冲突和错误消息,因为udisk将与您的规则竞争udev安装设备。这并不奇怪。但是设备仍将被安装(在我的情况下,根据规则udev- 请不要问为什么......)甚至可以访问。

有点 HTH。

相关内容