[vox-tech] how to access the content in the usb flash
Ken Bloom
kbloom at gmail.com
Tue Jul 11 21:40:04 PDT 2006
On Tuesday 11 July 2006 22:16, Hai Yi wrote:
> Hello there:
>
> I have a creative flash with a usb port, after I plugged it in the
> port, I see this:
>
> $ lsusb
>
> Bus 003 Device 004: ID 041e:4139 Creative Technology, Ltd
> Bus 003 Device 001: ID 0000:0000
> Bus 002 Device 001: ID 0000:0000
> Bus 001 Device 004: ID 06cb:0003 Synaptics, Inc.
> Bus 001 Device 003: ID 045e:0053 Microsoft Corp.
> Bus 001 Device 001: ID 0000:0000
>
> Then I issued a command (might be wrong)
> mount -t usbfs /proc/bus/usb/003/004 /mnt/
>
> Then I am struck in the middle of nowhere, don't know how to proceed
> to access the content in my flash.
# umount /mnt
While what you tried seems like a very logical command, it's really the
completely wrong tack, for several reasons:
a) lsusb doesn't give you the information you need to mount the drive
b) /proc/bus/usb/003/004 isn't a device node
c) usbfs isn't a way of accessing data on a USB device.
A device node is a special kind of file living somewhere in /dev that
when read from or written to, passes through the device driver and
actually talks to the device.
The information you're looking for when you mount a device is actually
printed by the kernel when you attach the device. If you're using X
window, then you won't see it, but no worries. You can always see the
log of kernel messages by typing dmesg (as a normal user). Here's the
relevant portion of my dmesg when I attach my thumb drive:
usb 1-1: new full speed USB device using uhci_hcd and address 2
usb 1-1: configuration #1 chosen from 1 choice
SCSI subsystem initialized
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: SanDisk Model: U3 Cruzer Micro Rev: 2.15
Type: Direct-Access ANSI SCSI revision: 02
Vendor: SanDisk Model: U3 Cruzer Micro Rev: 2.15
Type: CD-ROM ANSI SCSI revision: 02
usb-storage: device scan complete
SCSI device sda: 990865 512-byte hdwr sectors (507 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
SCSI device sda: 990865 512-byte hdwr sectors (507 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
sda: sda1
sd 0:0:0:0: Attached scsi removable disk sda
The relevant line is the following:
sda: sda1
this line is the list of device files corresponding to the partitions on
the thumb drive. (Yes, you can have multiple partitions)
* sda is the device file corresponding to the whole drive.
* the drive has one partition, named sda1.
You want to mount sda1. The device files are found in /dev, so you want
to issue some variant of the command "mount /dev/sda1 /mnt"
usbfs is completely the wrong filesystem type. It's simply an
informational filesystem[1], kinda like proc (mounted on /proc) or
sysfs (mounted on /sys) that doesn't contain any real data on any disk.
It also doesn't take a device name. Actually, it takes a path to a
device and completely ignores it, not even bothering to check that it
exists, so by convention something like "none" or "usbfs" is used.
However, when you told it that /proc/bus/usb/003/004 was the device
file, that was allowed too. It completely ignored it and mounted the
informational filesystem on /mnt (and didn't spew out any error
messages because you hadn't actually done anything wrong from the
system's point of view).
The filesystem on your flash drive (unless you reformatted it) is of
type vfat. So the correct, fully specified command would be "mount -t
vfat /dev/sda1 /mnt". It's not actually necessary to specify the
filesystem type though -- the kernel can autodetect the file system
type, so the command I gave before ("mount /dev/sda1 /mnt") would also
work just fine.
But there's a better way to mount this...
You have to run the mount command as root (which I'm sure you did) to
mount a usb device. This is becuase when USB devices came along, they
completely broke the kernel's old way for users to mount their own
disks. Back in the days of floppies, a device always had the same
device nodes. When you inserted a floppy disk, you *knew* that it's
device node was /dev/fd0. USB changed all that. Since you could now
plugin as many USB devices as you wanted, in as many orders as you
wanted, and they all showed up as SCSI disks (/dev/sd*), they began to
move around. The old method of specifying a device that users could
mount in /etc/fstab broke, because now there were many devices.
So the distributions created pmount. A user in the plugdev group can
mount a USB device to a mountpoint in /media in a very simple
way: "pmount /dev/sda1" (replacing, of course the device name with the
one you discovered above using dmesg). The mountpoint on which this is
mounted is /media/sda1. When you're ready to unmount the device, you
use the command "pumount sda1". Now you don't need to be root.
But IMO, this system still sucks because you still need to discover the
right device file on your own[2]. udev has some techniques to always
guarantee the same device name, but that doesn't work in general
because it only works for USB keys that the system administrator
configures the system to know about in advance. If you went to a public
computer lab and tried, you'd be SOL.
Looking around, I see a Debian package which may help:
[bloom at cat-in-the-hat ~]$ apt-cache show usbmount
Package: usbmount
Priority: extra
Section: admin
Installed-Size: 116
Maintainer: Martin Dickopp <martin at zero-based.org>
Architecture: all
Version: 0.0.14-0.1
Depends: udev (>= 0.084-2), lockfile-progs
Filename: pool/main/u/usbmount/usbmount_0.0.14-0.1_all.deb
Size: 10494
MD5sum: 1b74998193fe32a6e05eca5232e605db
SHA1: d52ca0d42689842f6b9e977d8c4ef02f1cbbff53
SHA256: 950c4dd2ca67dc8daefff22242db2cecf2aac87169cd9259f64c8648fa11b3c9
Description: automatically mount and unmount USB mass storage devices
This package automatically mounts USB mass storage devices (typically
USB pens) when they are plugged in, and unmounts them when they are
removed. The mountpoints (/media/usb[0-7] by default), filesystem types
to consider, and mount options are configurable. When multiple devices
are plugged in, the first available mountpoint is automatically
selected. If the device provides a model name, a symbolic link
/var/run/usbmount/MODELNAME pointing to the mountpoint is automatically
created.
.
The script that does the (un)mounting is called by the udev daemon.
Therefore, USBmount requires a 2.6 (or newer) kernel.
.
USBmount is intended as a lightweight solution which is independent of
a desktop environment. Users which would like an icon to appear when an
USB device is plugged in should use the pmount and hal packages
instead.
.
Homepage: http://usbmount.alioth.debian.org/
Tag: admin::configuring, admin::filesystem, hardware::storage,
hardware::usb, interface::daemon, role::sw:utility, use::configuring
This looks better still, but I'm still not sure it's the ultimate
solution. Your USB device comes up on some random mountpoint in /media
and you may need to run ls on several of those mountpoints to find your
device. And /var/run/usbmount/MODELNAME, while innovative, probably
isn't the best idea either -- if you replace your USB key with one by a
different brand (e.g. if you lost the first one, and a different brand
was cheaper this time) then MODELNAME would change and you'd have to
discover *that* all over again.
I think the solution would be to create a command like "waitmount
$LABEL" where you run the command *before* you plug in the device, and
waitmount would sit around waiting for you to plug in the device. As
soon as you plugged it in, it would mount the device at ~/$LABEL
(possibly creating the mount point if it didn't already exist). Anyone
have any better ideas? I'd really like to hear something that would
work similarly to the way mounting floppies and CD-roms does. Having
lots of different mount commands to memorize seems to be not so fun,
and a recipe for confusion.
--Ken Bloom
[1] http://www.cs.indiana.edu/~bpisupat/work/usb/node14.html
[2] Your desktop environment can discover the device file of the new
device and use pmount to mount it and do other nice things like create
a desktop icon. That's actually pmount's real reason to exist. But if
that's what you wanted to do, you'd have done it already and you
wouldn't be asking this question.
--
I usually have a GPG digital signature included as an attachment.
See http://www.gnupg.org/ for info about these digital signatures.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://localhost.localdomain/pipermail/vox-tech/attachments/20060711/63a52bc2/attachment.pgp
More information about the vox-tech
mailing list