On Tue, 20 Jul 2004, Shaun Oliver wrote: > hi, > I've just bought an emation usb flash drive > 256 mb > when one plugs it into the system, where is it usually mounted? > or rather where abouts would I expect to mount it, > I have it listed at /dev/sda but I ain't sure if it's 1 2 3 or 4 > any help would be greatly appreciated.
Hi Shaun, Each one is different... but most are /dev/sda or /dev/sda1. We have that problem at CSE trying to let students plug in their (much varying) USB flash drives. So, here's roughly the steps that are done to find the right place to mount (assuming you know its /dev/sda[1]): 1) Check /proc/partitions If size of sda is smaller than sda1, etc, then you probably want /dev/sda, otherwise probably /dev/sda1, BUT 2) some devices have an extended partition there, so if the size of /dev/sda1 is "1", then thats probably an extended one and you want /dev/sda5. That's actually the easy bit - its trickier to figure out that it is in fact /dev/sda (i.e. generically, where there could be many devices plugged in/out). So since I found it hard to find info on this, here is some on that too (kudos actually to Neil Brown for this stuff): - Check /proc/scsi/usb-storage-*/* to see which devices are attached, and which scsi host they are on. - Go through /proc/scsi/scsi to find that host and any channel/id/lun info for it. - For all /dev/sd? devices, find any that are on that scsi host - Some devices (particularly multi-format card readers) provide each card reader on a different scsi LUN, so for these to automatically work, you may need CONFIG_SCSI_MULTI_LUN=y in the kernel config. -> if there are multiple LUNs for the same host, get the user to tell us which one they want. -> When scanning for scsi host, also check for same scsi lun - Then apply earlier details to figure out which partition you want, if any. So, how do you know which /dev/sd? matches which scsi device (referenced with host/bus/channel/lun (4 numbers). We only look at the host and lun, there are 2 ioctl's that will give us these = 0x5386 for the host, and 0x5382 for the lun. In shell+perl: for dev in /dev/sd?; do scsihost=$(perl -e '$a=" "; open( F, "<'$dev'") && ioctl( F, 0x5386, $a) && print unpack("L",$a)."\n"' ) scsilun=$(perl -e '$a=" "; open( F, "<'$dev'") && ioctl( F, 0x5382, $a) && (@l = unpack("CC",$a) ) && print @l[1] . "\n"') # check if host and lun are the ones you are looking for ... done Cheers, - Simon [1] If devfs, it's more like: scsi/host0/bus0/target0/lun0/disc or part[1-4] -- SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/ Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html