在 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 到它的挂载点,目录是空的。
我尝试改变mount
,udisksctl 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、标签或类似信息时,它才有效,这可能不适用于您的情况。