udev
USBデバイスをマウントし、いくつかのデータをバックアップし、すべてをクリーンアップするためのルールを作成しました。実は私は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/sde1
USBデバイスと一致するのではなく、そのUSBデバイスの大容量記憶装置エンドポイントにあるパーティションです。 USBホットプラグ後にディスクが準備され、パーティションが列挙されるまでに数秒かかります。これは私のユースケースに「正しい」イベントであり、バックアップを実行したい場合でも同様です。このパーティションについてID_FS_UUID
報告されたものと同じです。blkid
私の場合はluks
UUIDです。
私のシステムでは、ルールを編集するときに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-walk
udevの問題をデバッグするのに非常に便利なツールです。
また、ATTR{key}が無効です。 ATTRS{key}を使用してください。 (前述のように、いくつかの例ではまだ間違った形式を使用しています。)
答え4
idProduct
ルールセクションにタイプミスはありませんか?
あなたはこれを持っています:
ATTR{idProduct}=="0234"
次のようにする必要はありませんか?
ATTR{idProduct}=="0243"
次の行に基づく出力:
Bus 001 Device 003: ID 054c:0243 Sony Corp. MicroVault Flash Drive