新しい基本ルールを作成しています
/etc/udev/rules.d/10-myrule.rules
含む:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
保存して再起動し、SDカードを挿入しました(/dev/sdb1
、dmesg
)で表示されますが、何も起こりません。手動で行う場合mount /dev/sdb1 /media
、 できます。
このようなudev
ルールをトラブルシューティング/デバッグするにはどうすればよいですか?
注:私はArchLinuxを使用していますが、どのディストリビューションでも同じでなければなりませんか?
10-
jasonwryanが述べたように、高い番号を使用します(90年代が良い)。したがって、あなたのルールは別のルールによって上書きされることはありません。本当に必要なだけ最小限のキーを使用してください。例、!=
&GOTO
/LABEL
、代わりに直接使用する==
ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
ターゲットはsdb1
で、コマンドは修正されました。KERNEL=="sdb1"
を使用してブラインドマッチを最小化してください
シャドウデバッグルールを作成すると便利です。常に同じファイルに残しておくため、shadowを呼び出しました。必要なときに使用します。
ACTION=="add", KERNEL=="sdb*", RUN+="/bin/sh -c 'echo == >> /home/user/Desktop/udev-env.txt; env >> /home/user/Desktop/udev-env.txt'"
#ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
注:udev-env.txt
が作成され、ルールがトリガーされます。 oneに一致するノードに対応する行==
。そのファイルに記録されたENVは2ノード以上の混合である可能性があり、ほぼ同時に作成されました。これはstdout
バッファリングの問題です。
udevadm monitor -u
、udevadm test ...
、udevadm trigger ...
を使用して、イベントを処理したルールを確認します。
スクリプト内では、stdout
&stderr
メッセージも戻り値として保存することにより、デバッグログを作成し、失敗したコマンドをキャッチできます。
更新:
参照:dev_237-man udev
(Ubuntu_18.04)
RUN{type}
Note that running programs that access the network or mount/unmount filesystems is not allowed inside of udev rules, due to the default sandbox that is enforced on systemd-udevd.service.
Udevルールファイルを作成する
Sudo nano /etc/udev/rules.d/99-removable-sd.rules
Udisksに自動マウントするように指示するルールを追加します
SUBSYSTEM=="block", SUBSYSTEMS=="mmc", DRIVERS=="mmcblk", ATTRS{type}=="SD", ENV{UDISKS_AUTO}="1", ENV{UDISKS_SYSTEM}="0"
ATTRS{type}=="SD"
は、異なるタイプを使用している場合は必要ない場合があります。
ルールの再読み込み
Sudo udevadm control -R
イジェクトしてから元に戻します。
ここで探しているコマンドはudevadm
だと思います。 trigger
およびtest
パラメーターを使用して、udevイベントの再スキャンをトリガーし、特定のイベントをそれぞれテストします。
EL 7での新しいネットワークデバイスの命名を試してみたとき、私はこれを難しい方法で学びました。
私はRaspberry Pi 3 B +でも同じ問題を抱えていましたが、上記のコマンドが役立つ可能性があります。しかし、それはDID助けにはなりません。USBストレージデバイスを挿入するときにスクリプトを呼び出そうとしていました。ルールはsyslogに記録されないため、どのルールが機能したかを理解するのが非常に難しくなります。失敗したルール.
だから私は次のことをしました:
(1)/etc/udev/rules.d/100-myrule.rulesにルールファイルを作成しました
(2)次に、コマンドSudo /etc/init.d/udev restart
それが機能することを確認しました。情報の一部は、役立つ場合もあればそうでない場合もありますが、(2)のコマンドが実行されるまで、ファイルシステムはudevに対して読み取り専用です。