udevでマウントされたときにコマンドを実行する
udevとはで書いたように udev によってデバイスを検出できるし、udevイベントでコマンドを実行することも可能なのだから、特定のデバイスがマウントされたときにコマンドを実行できないか。
まずはルールで使える属性を調べる。udevadm をみてもデバイスは idVendor のような値を提供していないので、USBポートのシリアル番号でデバイスを特定する。
ATTRS{serial}=="0708418EB1969504", RUN+=""次に、udevイベントの調査方法でみたように、マウントされたときに bdi デバイスが add イベントを発行しているようなのでこれを使えないか。bdi とはカーネルのドキュメント backing_dev_info のことを示すようだった。これはアドレス空間の背後にある周辺機器を管理する構造体のことらしい。
udevadm info -a /sys/devices/virtual/bdi/btrfs-7これを見る限りはデバイスを特定するための属性を見つけられなかった。なのでブロックデバイスの change イベントをみるしかないが、これだとマウントとアンマウントの区別ができない。
ACTION=="change", SUBSYSTEM=="block", ATTRS{serial}=="0708418EB1969504", RUN+=""