udev+udisks2:udisksctl 给出“查找设备对象时出错”

udev+udisks2:udisksctl 给出“查找设备对象时出错”

在 Debian Wheezy 中,我对 ntfs usb 硬盘有一个特殊的规则。插入后,它会安装在 /media 的特定子文件夹下。

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/mount <options>", OPTIONS="last_rule"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/umount <options>"

在我更新到 Jessie 之后,它停止工作了。我发现在 udev 更改后,您无法使用 mount,建议使用 udisks2 或一些自行编写的 systemd 单元。我选择udisks2并重写规则如下

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/su storage_user -c '/usr/bin/udisksctl mount --block-device /dev/mx1 --filesystem-type ntfs --options locale=en_IE.UTF-8,fmask=0113,dmask=0002 --no-user-interaction'", OPTIONS="last_rule"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/usr/bin/udisksctl unmount --block-device /dev/mx1 --no-user-interaction"

这不起作用。在系统日志中我看到:

Error looking up object for device /dev/mx1

但如果我从 cli 运行这个命令,它就可以正常工作。我相信,由于 systemd 服务的异步特性,当 udisk2 尝试挂载 USB 硬盘时,/dev/mx1 尚未准备好。

  1. 我应该写什么规则?
  2. 互联网上是否有关于如何编写自定义自动挂载规则(特别是针对 ntfs 文件系统)的良好指南?

答案1

不幸的是我无法找到原因乌德夫优盘2没有一起工作。但我找到了解决我的问题的方法这里。下面是一个如何实现 ntfs usb 硬盘自动挂载的简单示例。首先是一个脚本挂载文件安装驱动器

#!/bin/bash
mkdir -p /media/usbhdd
mount -t ntfs-3g -o locale=en_IE.UTF-8,fmask=0113,dmask=0002,uid=storage-user,gid=storage-group /dev/mx1 /media/usbhdd

然后我们创建一个systemd单元/etc/systemd/system/mount-hdd.service

[Unit]
Description=mount usb hdd
[Service]
Type=forking
ExecStart=/usr/local/scripts/storage/mount.sh
[Install]
WantedBy=multi-user.target

最后是 udev 规则

ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd*", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd*1", ATTRS{serial}=="<serial_number>", RUN+="/bin/systemctl start mount-hdd"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/umount /media/usbhdd", RUN+="/bin/rmdir /media/usbhdd"

相关内容