添加硬盘时 Udev 规则拒绝触发

添加硬盘时 Udev 规则拒绝触发

我使用的是 Ubuntu 20.04。

我试图在使用 UUID 识别驱动器的 udev 规则连接特定硬盘驱动器时执行操作。该脚本最终将执行一个例程,它将安装驱动器并运行 rsync。为了排除该过程中的任何错误,我现在只是尝试一个测试命令。

硬盘通过 SATA Hotswap 连接,并且有一个已确认正确的 UUID。我遵循了许多似乎使用此确切语法的指南,但无论我如何尝试,仍然没有任何反应。

以下是我已完成的步骤:

  • 在 中创建了一个名为 90-backup.rules 的文件/etc/udev/rules.d。内容是:

ACTION=="add", ENV{ID_FS_UUID}=="b527aadc-9dce-4ead-8937-e53ca2cfac84", RUN+="/bin/echo 1 >> /rule.test"

  • 尝试过 udevadm control --reload-rules && udevadm trigger

  • 尝试过systemctl reload udev

  • 运行udevadm test /dev/sdX我可以看到它列出了规则文件:

Reading rules file: /etc/udev/rules.d/90-backup.rules

  • 使用udevadm info /dev/sdX确认ID_FS_UUID环境变量正确并且可以读取。

  • 尝试在参数KERNEL=='sd?'之前添加ACTION

由于服务器当前正在使用中,我还没有尝试重新启动它。最好一劳永逸地确定让 udev 在不重新启动的情况下正确重新加载规则所需的内容,以进行正确的调试。

任何帮助表示赞赏。

祝一切顺利,安德烈亚斯

答案1

RUN+="/bin/echo 1 >> /rule.test

udev不要尝试重定向输出(我认为在规则进程中完成时这实际上不起作用RUN),而是让RUN进程使用 shell 脚本来运行您需要的任何命令。

在调试过程中,跟踪脚本何时工作会很有用,因此通过将以下代码保存到/usr/local/bin/myscript.sh(显然给它任何你想要的名称)来创建一个 shell 脚本:

#!/bin/sh
printf '%s\n' "Script run by udev $( date +%c )" > /tmp/rule-test

每当脚本运行时,上面的脚本都会将当前时间写入目录rule-test中的文件中。/tmp但你需要给脚本执行权限:

sudo chmod +x /usr/local/bin/myscript.sh

现在更改您的 udev 规则,以便 RUN 部分包含脚本的完整路径:

ACTION=="add", ENV{ID_FS_UUID}=="b527aadc-9dce-4ead-8937-e53ca2cfac84", RUN+="/usr/local/bin/myscript.sh"

最后重新加载udev规则:

sudo udevadm control --reload

现在连接您的硬盘并查看时间是否被写入/tmp/rule-test

一旦它起作用,您就可以设置myscript.sh执行您想要的不同操作(rsync例如运行),并且不必继续更改 udev 规则 - 只需更改 shell 脚本即可。

udev在不重新启动的情况下正确重新加载规则需要什么

使用sudo udevadm control --reload

相关内容