udev ルールは、ハードドライブがホットプラグされるとシェルスクリプトを実行します。

udev ルールは、ハードドライブがホットプラグされるとシェルスクリプトを実行します。

shドライブメーカー、モデル、その他の仕様に関係なく、ハードドライブがマイコンピュータにホットプラグされるたびにカスタムスクリプトを実行したいと思います。

私のudevルールは次のとおりです/etc/udev/rules.d/10-TEST-RULE.rules

ACTION=="add", KERNEL=="sd*", RUN+="/usr/loca/bin/DRIVE_INSERT_MESSAGE.sh"

udevルールを数回再ロードし、ほとんどの変更後にデバイスを再起動しました。何が間違っていますか?

答え1

問題の性格

問題は、udevdデフォルトでは、UbuntuがルートLinuxカーネルネームスペースで実行されないことです。

# ps -axe -o user,pid,ipcns,mntns,netns,pidns,userns,utsns,comm | awk '$3!="-"' | grep -E "udevd|$$|MNTNS"
USER         PID      IPCNS      MNTNS      NETNS      PIDNS     USERNS      UTSNS COMMAND
root         477 4026531839 4026532239 4026531840 4026531836 4026531837 4026532259 systemd-udevd
root     1663933 4026531839 4026531841 4026531840 4026531836 4026531837 4026531838 bash

すべてのインストールは、udevdコンピュータで実行されている残りのプロセスには見えません。スクリプトDRIVE_INSERT_MESSAGE.shは、システムの他の多くの部分と通信できない名前空間で実行されています。

問題をさらにデバッグするには、これを実行するsudo nsenter --all -t $(pgrep systemd-udevd) /bin/bashと、あるスクリプトに移動しますudevd。その後、スクリプトをナビゲートして調整できますDRIVE_INSERT_MESSAGE.sh

また、見ることができます

  • /usr/lib/udev/rules.dudevルールを参照するには
  • udevadmudevとの対話に使用されるEGは、トラブルシューティング時にudevイベントをトリガーします。
  • sudo systemctl edit systemd-udevdudevd systemctl デバイスの調整
  • udevadm test-builtin --help組み込みudevモジュールのリスト

長い話を短く

スクリプトが実行される可能性が高いが、制限されたカーネルネームスペースで実行されています。

関連情報