udevルールにUSBドライブをマウントする方法は?

udevルールにUSBドライブをマウントする方法は?

USBドライブを自動的にマウントするために、バックグラウンドでスクリプトを実行するようにudevにルールを設定しました。スクリプトを正常に実行しましたが、何らかの理由でマウントに失敗しました。

ルール:

ACTION=="add", KERNEL=="sd[a-z]*", RUN+="/etc/mntUsbChk.sh &"

このスクリプトでは:

#!/bin/sh

sleep 2

mkdir /mnt/usb

foundUsb=false

if [ -e /dev/sda1 ]; then
 mount /dev/sda1 /mnt/usb
 $foundUsb=true
fi

if [ -e /dev/sdb1 ]; then
  mount /dev/sdb1 /mnt/usb
  $foundUsb=true
fi

if [ -e /dev/sdc1 ]; then
  mount /dev/sdc1 /mnt/usb
  $foundUsb=true
fi

if [ $foundUsb -eq false ]; then
 exit
fi

echo "USB MOUNTED"

[1610.868626] FAT-fs(sdb1): ボリュームが正しく分離されていません。一部のデータが破損している可能性があります。 fsckを実行してみてください。

/mnt/usb編集:詳細:USB接続後にフォルダが作成されるため、スクリプトは確実に実行されます。

また、 mount /dev/sda1 /mnt/usbルールを有効にする前にUSBを接続してから手動で入力すると、正しくインストールされます。なぜ通常のudevにインストールできないのかわかりません。

答え1

スクリプトが/mnt/usbすでに存在する場合は失敗します。これが問題の原因であるかどうかはわかりませんが、確かにスクリプトエラーです。

mount /mnt/usb

代わりに使用してください:

mount -p /mnt/usb

~からman mount:

-p、--親

存在する場合、エラーはありません。必要に応じて親ディレクトリを作成します。

答え2

追加時にUSBドライブがsda1、sdb1、sdc1になるという保証はありません。私はそこにより良いロジックが必要になると思いますが、それは質問とまったく関係ありません。

この質問については、下記の既存のリンクをご覧ください。 LinuxでFATがインストールされた理由だけでFATを「ダーティ」とマークするのはなぜですか?

私が理解したように、USBを取り出さずにWindowsシステムから単に取り外すと、ドライブのダーティビットは消去されません。ダーティビットが設定されると、Linuxは最悪のシナリオを想定します。私は自動的にfsckを実行してこのエラーメッセージ(ある場合)のダーティビットを消去してから再インストールできると仮定します。 umountやfsckを呼び出すとダーティビットがクリアされるのかわかりません。

これが正しい方向に進むことを願っています。

答え3

よく文書化されていませんが、mountUdevルールで実行しないでください。

より同様の質問に対する私の答え代替。

関連情報