udevルールが機能しない

udevルールが機能しない

udevUSBデバイスをマウントし、いくつかのデータをバックアップし、すべてをクリーンアップするためのルールを作成しました。実は私はDebianサーバーで働いています。

私のUSBデバイスに関する情報は次のとおりです。lsusb

バス001デバイス003:ID 054c:0243 Sony Corp。 MicroVaultフラッシュドライブ

(実際にはlsusbより多くのバス/デバイスが返されますが、Debianコンピュータで公開していないので、自分で書く必要がありました:)

それから私はルールを次のように書きましたudev

10-usb_back.rules

入力する:

/etc/udev/rules.d/

(バックアップスクリプトには数秒かかるため、95を使用し、他のタスクが遅れないようにできるだけ遅く実行したいと思いました)

そして最後に、ルール自体は次のようになります。

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTR{idProduct}=="0243", RUN+="/usr/local/bin/mount_usb"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTR{idProduct}=="0243", RUN+="/usr/local/bin/backup_database"

私もこれを試しました:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="0234", RUN+="bash /usr/local/bin/mount_usb"

失敗:(

その後、再起動します。udev

sudo /etc/init.d/udev restart

USBデバイスを接続すると、次のような奇妙なメッセージが表示されます。

[1348.295280] sd 6:0:0:0: [sdc] ドライブキャッシュ仮定: 連続書き込み

二重

しかし、何も起こりませんでした。 USBデバイスがインストールされておらず、データがバックアップされていません。

I looked with tail -f /var/log/message

USBドライブが検出されたようです:

usb 1-3: Product Storage Media 
usb 1-3 Manufacturer Sony`
...

どこかに問題があるのは間違いありませんが、何なのか、どこにいるのかわかりません:(

編集:サーバー上のすべてを書き換えることができないので少し怠惰なので、必要に応じてスクリプトや追加のログメッセージなどの追加情報を要求してください。 :)

答え1

ホットプラグでバックアップを実行するタスクudevルールは次のとおりです。

SUBSYSTEM=="block" ACTION=="add" \
      ENV{DEVTYPE}=="partition" \
      ENV{ID_FS_UUID}=="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
      TAG+="store" \
      RUN+="/usr/bin/python3 /etc/systemd/autoback.py --udev"

/dev/sde1USBデバイスと一致するのではなく、そのUSBデバイスの大容量記憶装置エンドポイントにあるパーティションです。 USBホットプラグ後にディスクが準備され、パーティションが列挙されるまでに数秒かかります。これは私のユースケースに「正しい」イベントであり、バックアップを実行したい場合でも同様です。このパーティションについてID_FS_UUID報告されたものと同じです。blkid私の場合はluksUUIDです。

私のシステムでは、ルールを編集するときにudevが自動的に正しく再ロードされないようですが、うまくいくことが確認されています(デバッグにも役立ちます)。

udevadm test /sys/dev/block/8:65

udevルールを強制的に再ロード/再適用します。私はこれ8:65を通してこれを見つけましたls -l /dev/block | grep sde1。返品

udevadm info --query=property /dev/sde1

私のルールが適用されていることを確認するのに役立ちます。

注:OPが投稿して5年後にこの回答を投稿するので、当時と現在の状況が異なる場合があります。私のシステムはarm64のUbuntu 16.04.4(xenial)です。

答え2

ATTRのスペルを間違って入力しました。この場合は ATTRS でなければなりません。

答え3

出力を見ると、udevadm info --path=path/to/device --attribute-walkデバイスに有効なすべての属性とサブシステムが表示されます。たとえば、私のUSBデバイスにはSUBSYSTEM="tty"USBを識別するための記号がありますSUBSYSTEMS=="usb"(注:複数のサブシステム*S*)。私はそれがここの場合かもしれないと思います。どちらもudevadm info --attribute-walkudevの問題をデバッグするのに非常に便利なツールです。

また、ATTR{key}が無効です。 ATTRS{key}を使用してください。 (前述のように、いくつかの例ではまだ間違った形式を使用しています。)

答え4

idProductルールセクションにタイプミスはありませんか?

あなたはこれを持っています:

ATTR{idProduct}=="0234"

次のようにする必要はありませんか?

ATTR{idProduct}=="0243"

次の行に基づく出力:

Bus 001 Device 003: ID 054c:0243 Sony Corp. MicroVault Flash Drive

関連情報