我使用的是 Ubuntu 23.04,我假设 Ubuntu 使用 autofs 来自动挂载。我不熟悉 autofs 配置。
当我通过 USB 连接带有标签的外部驱动器时,它们会根据 中的标签自动安装/media/user/label。但是,如果/media/user/label已经存在(没有安装任何内容 - 空目录),它将安装在/media/user/label1.
这不是我想要的。如果这些旧的安装点存在,我想按原样使用它们。
这是可能的配置吗?如果没有,我希望它失败并且不安装任何东西。
@vanadium 的答案以及这个答案中有足够的解释...所以,我在这里提供一个解决方法...UDEV 规则可以自动检查并删除挂载点(如果它存在于/media/user.
基本上,您/etc/udev/rules.d/可以像这样创建一个文件:
sudo nano /etc/udev/rules.d/70-label.rules
Run Code Online (Sandbox Code Playgroud)
并使其对特定用户有效,请将这两行添加到其中,将user两行更改为所需的用户名,例如您的用户名:
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rmdir /media/user/%E{ID_FS_LABEL}"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rmdir /media/user/%E{ID_FS_UUID}"
Run Code Online (Sandbox Code Playgroud)
或者为了使其对所有用户有效,请添加以下两行:
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/sh -c '/bin/rmdir /media/*/%E{ID_FS_LABEL}'"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/sh -c '/bin/rmdir /media/*/%E{ID_FS_UUID}'"
Run Code Online (Sandbox Code Playgroud)
然后保存文件并重新加载 UDEV,如下所示:
sudo systemctl restart udev
Run Code Online (Sandbox Code Playgroud)
这应该适用于标记和未标记的分区/文件系统。
注意:上述规则将通过插入一个带有分区的 USB 磁盘来触发,并且无论当前登录的用户如何,都会运行,并且将像这样运行命令root,您可能需要记住这一点,我使用了/bin/rmdir作为一项安全措施,因为它只会删除空目录以及指定的真实路径,因此它应该只删除/media/user...下的目录。还sd[b-z][0-9]假设当您插入第一个 USB 磁盘时,它是sdb由内核指定的名称...然而,如果情况并非如此,并且您的系统上的命名是从eg开始的sdc,因为您的机器中有多个硬盘,则出于sd[c-z][0-9]性能原因将其相应地更改为eg。