vine-users ML アーカイブ



[vine-users:053120] Re: Q: USB で複数のディスクを 接続するには?

  • From: nkon@xxxxxxxxxxxxx
  • Subject: [vine-users:053120] Re: Q: USB で複数のディスクを 接続するには?
  • Date: Sun, 25 Aug 2002 18:19:19 +0900
元質問の近藤です。こんにちは。

本日一日かかりっきりで、なんとか目処が立ちました。
情報を頂いた方、ありがとうございます。

At Sat, 24 Aug 2002 11:12:26 -0700,
shuu-vine@xxxxxxxxxxxx wrote:
> > 今の所、下のように、今つながったデバイスを判定させるところまで来ましたが、
> > そのデバイスのデバイスファイルを判定できていません。
> 
> > # find now conected device の所、いまつながったUSBデバイスを
> > /var/log/message へ出力される murasaki のログから見てるところは
> > ほぼ、正しくとれています。
> 
> ログから取るよりか/procから取るほうがLinuxくさくてイイ感じがします。
> 私が質問を理解する限り、以下の3つの/procファイルには十分な情報があります。
> 
> SCSIパーティション情報 -> /proc/partitions
> SCSIデバイスの判別     -> /proc/scsi/scsi  or /proc/scsi/usb-storage-#/#
> マウント情報           -> /proc/mounts

/proc/scsi/scsi から情報をもらうようにしました。
私の環境の場合は次のようになりました。

$ cat /proc/scsi/scsi 
Attached devices: 
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: CREATIVE Model: CD-RW RW4224E    Rev: 1.36
  Type:   CD-ROM                           ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: OLYMPUS  Model: C-2040ZOOM       Rev: 1.00
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: IC25N040 Model: ATCS04-0         Rev: CA4O
  Type:   Direct-Access                    ANSI SCSI revision: 02

全て別々のホストアダプタに接続された SCSI IDが 0 番の機器になるみたいで
すね。また、USB機器を外した後も、/proc/scsi/scsi の情報は残っていて
接続されたままになってしまうみたいです。

At Sun, 25 Aug 2002 10:59:28 +0900,
Hiroshi Inoue <gamera@xxxxxxxxxxxxxxxx> wrote:
> > 再度、1番目のデバイスを USBに接続 → /var/log/message に kernel からのロ
> > グが出てこないので、デバイスファイルを見つけられない。
> 推測で申し訳ないですがドライバモジュールを外さないと出ないと思います。
> lsmodでsr_modだったかがUSBを外したときに残ってないか確認してあれば
> rmmodで外してテストしたらどうでしょうか?

その通りでした。


本日までの成果。
次のスクリプトたちで、ほぼ、思っていた動作ができているようです。
http://www.bf.wakwak.com/~nkon/homepc/usb-storage/
の方にもまとめておきました。


ファイル: /etc/murasaki/murasaki.call

usb-storage: /etc/murasaki/bin/mount-usb-storage2.sh

ファイル: /etc/murasaki/bin/usb-storage-mountpoint

# vendor product mountpoint fstype keyword comment
0x4bb 0x103 /mnt/USB_HD vfat ATCS04-0 IO-DATA HDP-U40P portable USB HDD
0x7b4 0x105 /mnt/C2040 vfat C-2040ZOOM 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}

#echo ${a_line[5]} ${a_line[6]}

VENDOR=${a_line[5]}
PRODUCT=${a_line[6]}

VENDOR=${VENDOR/vendor:/}
PRODUCT=${PRODUCT/product:/}

#echo my vendor is ${VENDOR} and my product is ${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_keyword m_comment < ${WORK_FILE}
fi

rm -f ${WORK_FILE}

#echo vendor is ${m_vendor} product is ${m_product} mount point is ${m_mountpoint} fs_type is ${m_fstype} keyword is ${m_keyword} comment is ${m_comment}

#########################################
# find device file
#########################################

rm -f ${WORK_FILE}

/bin/sed '
/^Host/N
s/\n//
p
D
' /proc/scsi/scsi | grep ${m_keyword} >> ${WORK_FILE}

read -a a_line < ${WORK_FILE}
case ${a_line[1]} in
scsi1)
	DEVICE_FILE=sda1
	;;
scsi2)
	DEVICE_FILE=sdb1
	;;
esac

rm -f ${WORK_FILE}

#echo my device file is ${DEVICE_FILE}

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}
#	echo START ${m_keyword} ${DEVICE_FILE} ${m_mountpoint} > /etc/murasaki/bin/log
	;;
stop)
	/bin/umount ${m_mountpoint}
#	echo /bin/mount ${m_mountpoint}
#	echo STOP ${m_keyrowd} ${m_mountpoint} > /etc/murasaki/bin/log
	;;
esac



-- 近藤靖浩 <nkon@xxxxxxxxxxxxx>
http://www.bf.wakwak.com/~nkon/diving/       8/21更新:富士山編