元質問者の近藤です。こんにちは。
> 全くのアイディアだけで、できるかどうかわかりませんが、
> dump_usbdev の出力で、vendeor IDなどがわかるので、
> これでマウント先を分けてやるのはどうでしょうか?
アドバイスありがとうございます。
dump_usbdev というコマンドは知らなかったのですが、
いろいろと情報が得られそうですね。参考にします。
さて、
今の所、下のように、今つながったデバイスを判定させるところまで来ましたが、
そのデバイスのデバイスファイルを判定できていません。
ちょっと長いですが、整理したスクリプトを示します。
なんせ、ちゃんとしたシェルスクリプトを書いたのは
今日がはじめてなので、みっともないですが。
/etc/murasaki/bin/mount-usb-storage2.sh のところで、
# find now conected device の所、いまつながったUSBデバイスを
/var/log/message へ出力される murasaki のログから見てるところは
ほぼ、正しくとれています。
ただし、その下で、
# find device file の所、そのUSBデバイスがどのデバイスファイルに割り当て
られているところがうまく判別できません。
うーん、うまく説明できないですが、次のような状況です。
1番目のデバイスを USB に接続→ sda1 をデバイスファイルと判定: 正常
2番目のデバイスを USB に接続→ sdb1 をデバイスファイルと判定: 正常
2番目のデバイスを USB からはずす → デバイスファイルを判別できなくても
umount 可能
1番目のデバイスを USB に接続→ sda1 をデバイスファイルと判定: 正常
2番目のデバイスを USB に接続→ sdb1 をデバイスファイルと判定: 正常
1番目のデバイスを USB からはずす → デバイスファイルを判別できなくても
umount 可能
再度、1番目のデバイスを USBに接続 → /var/log/message に kernel からのロ
グが出てこないので、デバイスファイルを見つけられない。
○ /etc/murasaki/murasaki.call の内容↓
usb-storage: /etc/murasaki/bin/mount-usb-storage2.sh
○ /etc/murasaki/bin/usb-storage-mountpoint の内容↓
各項目を 一個のスペースで区切って並べてデータベースにする。
ベンダID、プロダクトID、そのデバイスをマウントしたいポイント、
そのデバイスのファイルシステムのタイプ、コメントの順
# vendor product mountpoint fstype comment
0x4bb 0x103 /mnt/USB_HD vfat IO-DATA HDP-U40P portable USB HDD
0x7b4 0x105 /mnt/C2040 vfat Olympus C-2040Zoom Digital Camera
○ /etc/murasaki/bin/mount-usb-storage2.sh の内容↓
#!/bin/sh
CONFIG_FILE=/etc/murasaki/bin/usb-storage-mountpoint
LOG_MESSAGE_FILE=/var/log/messages
WORK_FILE=/etc/murasaki/bin/work
#########################################
# find now conected device
#########################################
if [ -f ${LOG_MESSAGE_FILE} ] ; then
tac ${LOG_MESSAGE_FILE} | grep 'murasaki\.usb\[[0123456789]\+\]: vendor:[0123456789abcdefx]\+ product:[0123456789abcdefx]\+ ' > ${WORK_FILE}
read -a a_line < ${WORK_FILE}
fi
rm -f ${WORK_FILE}
VENDOR=${a_line[5]}
PRODUCT=${a_line[6]}
VENDOR=${VENDOR/vendor:/}
PRODUCT=${PRODUCT/product:/}
#########################################
# look up mount database
#########################################
if [ -f ${CONFIG_FILE} ] ; then
grep "${VENDOR} ${PRODUCT}" ${CONFIG_FILE} > ${WORK_FILE}
read m_vendor m_product m_mountpoint m_fstype m_comment < ${WORK_FILE}
fi
rm -f ${WORK_FILE}
#########################################
# find device file
#########################################
if [ -f ${LOG_MESSAGE_FILE} ] ; then
tac ${LOG_MESSAGE_FILE} | grep 'kernel: SCSI device sd[abcdef]:' > ${WORK_FILE}
read -a a_line < ${WORK_FILE}
fi
rm -f ${WORK_FILE}
DEVICE_FILE=${a_line[7]}
DEVICE_FILE=${DEVICE_FILE/:/}
DEVICE_FILE=${DEVICE_FILE}1
case $1 in
start)
/bin/mount -t $m_fstype /dev/${DEVICE_FILE} ${m_mountpoint}
echo /bin/mount -t $m_fstype /dev/${DEVICE_FILE} ${m_mountpoint}
;;
stop)
/bin/umount ${m_mountpoint}
echo /bin/mount ${m_mountpoint}
;;
esac
なにかアドバイスを頂けないでしょうか。
特に、ある USB ストレージデバイスが、どういうデバイスファイルを持つか、
という情報が知りたいです。
みなさんは、複数の USB ストレージデバイスはどのように扱っていますか?
よろしくお願いします。
-- 近藤靖浩 <nkon@xxxxxxxxxxxxx>
http://www.bf.wakwak.com/~nkon/diving/ 8/21更新:富士山編