我有一个外部 USB 硬盘,我想让备份程序将备份写入其中。备份程序需要某些权限。我知道 Ubuntu 下的 NTFS 不允许我在目录或文件上设置 unix 样式的权限...我必须在安装时将必要的权限应用于 HDD 根目录。我希望此驱动器继续自动安装。我了解了 udev 规则,并尝试使用这些规则。但是我看到了严重的错误,驱动器变得无法访问。
对于 udev 匹配器,这似乎有效:ATTRS{vendor}=="ASMT", ATTRS{model}=="2105"
。但我对之后的一切都不确定。最初,我能够在 上更改组名/dev/sd??
,但 (a) 我现在无法重现它,并且 (b) 当它确实有效时,它仍然不会影响已安装驱动器上的权限……我猜改变这些的唯一方法是更改命令mount
。
我知道的:
- 我知道如何使用来
blkid
获取驱动器的当前设备路径。 - 我知道
udevadm monitor --environment --udev
在插入或拔出 USB 驱动器时使用获取信息 - 我知道如何使用来
udevadm info -a -p $(udevadm info -q path -n /dev/sd?)
获取设备的可能匹配器 - 我知道使用
sudo udevadm control --reload
重新加载我对规则文件所做的更改/etc/udev/rules.d
- 在规则文件中放入类似的内容
RUN+="echo bingo %k"
将使其显示在输出中udevadm test
,这让我相信我的匹配器没有问题。
我不知道的是:
- 如何根据 udev 规则文件阻止或覆盖自动挂载,以便我可以
mount
在规则文件中放置自己的命令。(我曾经在那里有一个挂载命令,但它导致错误并且驱动器无法访问)。 - 真的有多么有效
udevadm control --reload
。(我似乎无法复制使用所取得的一些部分成功GROUP="urbackup", MODE="0666"
。) - 如果
udev
规则是可行的,我想做的就是修改已安装的驱动器权限。 - 如果 udev 规则文件名开头的数字对我的用例确实很重要,我尝试过较小的数字(如 )
10
和较大的数字(如 )100
。
Ubuntu 20.04。
以下是一些详细信息:我拥有的最新规则是ATTRS{vendor}=="ASMT", ATTRS{model}=="2105", ACTION=="add", GROUP="urbackup", MODE="0666", RUN+="/usr/bin/mount -o umask=001,dmask=007,fmask=117,gid=134,uid=1000 /dev/%k /media/eddie/Interstellar"
。——udevadm test
显示运行命令,但在重新加载规则并实际插入驱动器后,似乎没有任何变化。
更新:如果我将命令稍微改为:
ATTRS{vendor}=="ASMT", ATTRS{model}=="2105", ACTION=="add", GROUP="urbackup", MODE="0666", RUN+="/usr/bin/mount -o umask=001,dmask=007,fmask=117,gid=134,uid=1000 /dev/%k /media/Interstellar"
--- 并将文件名设置为以 开头10-
,则在关闭 USB 驱动器电源后,我会收到Transport endpoint is not connected
错误。在文件名开头使用 时,我不会收到此错误70-
,但随后它表现得好像我根本没有创建 udev 规则一样。
答案1
简洁版本:
如果更改自动安装的外部驱动器上的组是您唯一需要的自定义内容,则 udev 规则不是正确的解决方案。对于这种情况,fstab
编辑是可行的方法。我通过尝试Disks
提供编辑 HDD 分区上的安装选项的 UI 发现了这一点。在玩了一会儿之后,我意识到它只是一个用于创建fstab
条目的 UI。特别是,对于这个问题,我需要添加gid=<groupId>
到安装选项。我还使用了umask
、dmask
和fmask
值,以及uid=<userId>
,但我不确定其中哪些是绝对必要的。以下是 UIDisks
帮助我写入 FSTAB 的完整行:
LABEL=Interstellar /media/Interstellar auto nosuid,nodev,nofail,x-gvfs-show,umask=001,dmask=007,fmask=117,gid=134,uid=1000,noauto 0 0