Fedora 21+systemd-udev 无法自动挂载 USB 棒,但 Gentoo 可以在同一台机器上实现

Fedora 21+systemd-udev 无法自动挂载 USB 棒,但 Gentoo 可以在同一台机器上实现

在 Gentoo 中,我创建了一个由 udev 调用的小脚本,它允许我将由其序列号标识的 USB 设备挂载到我选择的任何挂载点。

基本上/etc/udev/rules.d/00-removable.rules包含

SUBSYSTEM=="block", ACTION=="add", KERNEL=="sd[b-z]*", RUN+="/usr/local/bin/mountRemovableMedia.sh %k"

并且我的mountRemovableMedia.sh脚本使用传递的设备参数来确定设备序列,然后将其挂载到我想要的挂载点。

现在,在F21, 和systemd,它不起作用。脚本被调用(我有一个脚本写入的日志文件),挂载命令被执行(返回 0,无错误),但实际挂载并没有发生:如果我在终端中输入“mount”,我看不到该设备,如果我 cd 到它的挂载点,目录是空的。

我尝试改变mountudisksctl mount --block-device ...但仍然不起作用。

答案1

我在 Fedora 20 及更早版本中遇到过同样的问题,但这个脚本运行正常。我认为这在 Fedora 21 中不再起作用的原因是 udev 使用私有挂载命名空间运行脚本,尽管我还没有证实这一点。

我想到的解决方法如下:我现在不再使用 udev 执行脚本,而是通过 systemd 单元执行它。

具体来说,我创建了以下 systemd 单元文件/etc/systemd/system/mount_device.service

[Unit]
After=dev-[UUID].device

[Service]
ExecStart=/etc/systemd/scripts/mount_device.sh

[Install]
WantedBy=dev-[UUID].device

其中,正确的dev-[UUID].device必须替换为正确的 systemd 设备 ID,可以使用 确定systemctl --all --full -t device。需要通过运行 来启用该单元systemctl enable mount_device.service

如果以此方式执行脚本,挂载将按预期显示。唯一的缺点是,只有您事先知道 UUID、标签或类似信息时,它才有效,这可能不适用于您的情况。

相关内容