在 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 尚未准备好。
- 我应该写什么规则?
- 互联网上是否有关于如何编写自定义自动挂载规则(特别是针对 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"