私は現在、コンピュータに自動的に接続されたUSBドライブをマウントしようとしています。 私の目標は、USBデバイスを持っている場合はラベルを付け、そうでない場合はuuidを使ってUSBデバイスをマウントすることです。udevのルールとシェルスクリプトからusbドライブを自動マウント
ACTION=="add", KERNEL=="sd?[0-9]", SUBSYSTEM=="block", RUN+="/usr/local/bin/add.sh"
スクリプトが追加イベントがブロック・サブシステムに追加するたびに呼び出されます。私は/etc/udev/rules.d/10-usb-detect.rulesでudevのルールを記述し、それを行うには
。
しかし、スクリプトからファイルシステムをマウントしようとすると、udevルールはうまく動作しますが、うまくいきません。 奇妙なことは、スクリプトからのmountコマンドが常に$?= 0を返すため、論理的にはファイルシステムをマウントする必要がありますが、そうでないことです。
は、ここに私のスクリプトです:
#!/bin/bash
LOG_FILE=<path_to_file>
echo "New usb device detected at $DEVNAME" >> $LOG_FILE
echo "mount $DEVNAME /media/usb/test" >> $LOG_FILE
mount $DEVNAME /media/usb/test &>> $LOG_FILE
ret=$?
echo "$ret" >> $LOG_FILE
if [ $ret == "0" ]; then
echo "$DEVNAME mounted at /media/usb/test" >> $LOG_FILE
else
echo "Failed to mount $DEVNAME at /media/usb/test" >> $LOG_FILE
fi
echo "" >> $LOG_FILE
は、私は/メディア/ USB /テストは存在しないとしようと、私は、mountコマンドから予想されるエラーを持っています。 しかし、フォルダが存在する場合、mountコマンドはファイルシステムがマウントされていなくても0を返します。ここ
は、ログファイルの出力である:
New usb device detected at /dev/sdc1
mount /dev/sdc1 /media/usb/test
mount: mount point /media/usb/test does not exist
32
Failed to mount /dev/sdc1 at /media/usb/test
New usb device detected at /dev/sdc1
mount /dev/sdc1 /media/usb/test
0
/dev/sdc1 mounted at /media/usb/test
の/ dev/SDC1は、マウントは、私は、コマンドラインからファイルシステムをマウントするときに、私は正確な0
を返しても装着されていません絶対に問題はなく、ファイルシステムは必要に応じてマウントされます。
誰かがこれをどのようにデバッグできるかについての手掛かりはありますか?
スクリプトがudevから呼び出されるのは、コマンドラインから呼び出すと動作するためです。
こんにちは、 それは-t typeオプションを使用して、何も変更しませんでした。 お勧めのおかげで、スクリプトの出力を記録するこのトリックはわかりませんでした;) – Arkaik
私はそれを行いましたが、何も変わりませんでした。 "-eq"は "=="よりも優れていますか? また、mountコマンドに-vオプションを追加しました。mount:/ dev/sdj1は/ media/usb/testにマウントされています。 また、USBキーが再度接続されるたびに、/ dev/sdx文字がインクリメントされます。以前の文字でボリュームがマウントされていないため、使用しないでください。 – Arkaik
-eqが数値比較に使用されます。私も同じ数ヶ月前にやっていて、どんな問題にも直面していませんでした。マウントコマンドが0を返しても、あなたのデバイスがマウントされない理由は、最も驚くべきことです。 システムを再起動してもう一度試して、ここにログを投稿できますか?そうでなければ、これについて専門家のアドバイスが必要になるようです。 – user7345878