用Udev规则挂载磁盘不起作用


9

我在/etc/udev/rules.d/81-external-disk.rules中包含以下内容:

ENV{ID_FS_UUID}=="6826692e-79f4-4423-8467-cef4d5e840c5", RUN{program}+="/bin/mount -o nofail,x-systemd.device-timeout=1 -t ext4 -U 6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external"

运行后:

udevadm control --reload ; udevadm trigger /dev/sdb1

它什么都不做。但是,如果II将挂载命令更改为/ bin / touch / tmp / xyz之类的命令,它将起作用。

版本:

[root@helsinki rules.d]# rpm -qa | grep udev
libgudev1-219-19.el7_2.12.x86_64
python-pyudev-0.15-7.el7_2.1.noarch
[root@helsinki rules.d]# rpm -qa | grep systemd
systemd-libs-219-19.el7_2.12.x86_64
systemd-219-19.el7_2.12.x86_64
systemd-sysv-219-19.el7_2.12.x86_64
[root@helsinki rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 

Answers:


18

这是系统功能。原始udev命令已替换为systemd-udevd(请参见其手册页)。区别之一是,它创建了自己的文件系统名称空间,因此安装已完成,但在主体名称空间中不可见。(您可以通过systemctl status systemd-udevd获取服务的主要PID,然后查看/proc/<pid>/mountinfo文件系统的内容来进行检查)。

如果要返回到共享文件而不是私有文件系统名称空间,则创建一个/etc/systemd/system/systemd-udevd.service包含内容的文件

.include /usr/lib/systemd/system/systemd-udevd.service
[Service]
MountFlags=shared 

/etc/systemd/system/systemd-udevd.service.d/myoverride.conf只有最后两行的新目录和文件,即

[Service]
MountFlags=shared

并重新启动systemd-udevd服务。我还没有发现这样做的含义。


是的,我已经应用了这种解决方法,我想知道是否也存在安全隐患。
sebelk

1
可以肯定的是,直到我[Service]在这两行之间添加之前,它才起作用。
goldilocks

1
@goldilocks您可能是对的。我将此添加到答案中,谢谢。它可能取决于所包含文件中最后一部分的内容,但似乎systemd现在更喜欢您使用*.d/*.conf进行更改的方式,因为.include似乎没有记录在案。
meuh

12

在Ubuntu 18.04中也会发生相同的问题,其根本原因相同。为了解决这个问题,我们为创建一个覆盖文件systemd-udevd

sudo systemctl edit systemd-udevd

并插入其中:

[Service]
MountFlags=shared

保存文件,然后执行:

sudo systemctl daemon-reload
sudo service systemd-udevd --full-restart

它在Raspberry(Raspbian 9“ stretch”)上像灵符一样工作。谢谢!
Maxwel Leite

2
它不适用于我的Ubuntu 18.04,无法解决USB驱动器无法自动挂载的问题。
于申,

在Ubuntu 18.04中工作。@YuShen,您可能需要检查udev规则。
格雷格·贝尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.