From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wout Mertens Date: Tue, 07 Jan 2003 20:37:12 +0000 Subject: RE: My first usb storage automount script :) Message-Id: List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: linux-hotplug@vger.kernel.org Maybe a possible check would be to try to read the first few sectors (partition table and boot record), and keep an md5 hash. If it changes, do the sensible thing... Could be faster and less resource intensive than trying to mount it. Wout. On Tue, 7 Jan 2003, Eddie Shi wrote: > That's it, I think Window's must have done the same thing you described. > BTW, when you say "ping it to make sure card is not removed", do you mean > that you try to mount it and check the status return from the mount? > > Thanks for the feedback. > > Eddie > > > -----Original Message----- > > From: Tom Clark [mailto:tclark@mac.com] > > Sent: Tuesday, January 07, 2003 6:56 AM > > To: linux-hotplug-devel@lists.sourceforge.net > > Cc: Eddie Shi; Wout Mertens > > Subject: Re: My first usb storage automount script :) > > > > > > The problem is you need a notification in the first place that a card h= as > > been inserted. Unfortunately, I don't think any card readers on > > the market > > provide this functionality. I've only been able to solve this with a k= ind > > of daemon that periodically tries to mount the card reader's > > filesystem and > > then pings it occasionally to make sure the card hasn't been > > removed. It's > > ugly and wasteful, but what other alternative is there? > > > > -tc > > > > On 1/7/03 4:37 AM, "Wout Mertens" wrote: > > > > > Hmmm, > > > > > > Only one way to find out :) > > > > > > The script is real easy to install, just copy it to > > /etc/hotplug, and run > > > the line that registers it (you can find it inside the script). > > > > > > I think the issue will be if the card reader sends usb > > plug/unplug events > > > or not... if it doesn't, I really wouldn't know how to do it. > > > > > > Actually, there's an easier way to test: > > > Plug in the reader, have hotplug enabled, and watch /var/log/messages= to > > > see what the kernel thinks is happening. If you see messages every ti= me > > > you plug/unplug a card, you're lucky, and it will probably work. > > > > > > Good luck, > > > > > > Wout. > > > > > > On Fri, 3 Jan 2003, Eddie Shi wrote: > > > > > >> Hi, > > >> Does anyone know whether this will work on the following situation: > > >> > > >> 1. The usb-storage device (ie USB card reader) is alreay > > plugged in the > > >> system. > > >> > > >> 2. No CF/MS/SM/SD are plugged in yet. > > >> > > >> Given the above assumption , Will the system automount the > > CF when the CF > > >> card is plugged in ? Or We still need to manually enter " mount -t v= fat > > >> /dev/sda1 /cf ". > > >> > > >> I guess what I would like to see is to have something like > > CD's automount > > >> when a CD is inserted. > > >> > > >> > > >> Thanks > > >> > > >> > > >> Eddie > > >> > > ------------------------------------------------------------------ > > ---------- > > >> ------------------ > > >> Hi there, > > >> > > >> I just wanted to share what I hacked up through some > > frustration. It's a > > >> script that will automatically mount usb devices that are attached. > > >> > > >> It ties in to the hotplug architecture as closely as possible, witho= ut > > >> changing anything. So then I subscribed to this list to announce it. > > >> > > >> Of course, that's when I discovered > > >> http://users.actrix.co.nz/michael/usbmount.html by Michael Hamilton. > > >> > > >> So I'll first give a rundown of differences: > > >> My solution: > > >> - only mounts the device that was just inserted (with some luck) > > >> - is called automount_usb, so that, by changing the > > usb.usermap, it gets > > >> called every time a device is inserted and not just the first time > > >> - creates remover scripts that have /bin/sh as the only dependency > > >> - creates nicely readable names as mount points > > >> - supports devices with multiple partitions > > >> - is really small > > >> > > >> But Michael's solution: > > >> - makes KDE icons > > >> - is easier to read > > >> > > >> So, please have a look at the attached code, and tell me what you th= ink > > >> about the device detection code. Michael, if you read this, we could > > >> perhaps merge the two efforts and get all the features. > > >> > > >> Also, let's start a thread on making a gui.agent script that > > gets called > > >> by the hotplug scripts. It would notify the user of hotplug events. > > >> I feel that it should be called with the same environment as the oth= er > > >> agents, with an extra HOTPLUG_PATH variable indicating the > > path on which > > >> the device is available, if applicable. > > >> > > >> This could then be used by KDE, Gnome etc to notify the user. > > >> > > >> Cheers, > > >> > > >> Wout. > > >> > > >> PS: /Please/ change usb.agent so that it creates /var/run/usb/ before > > >> pointing remover scripts there... > > >> ["automount_usb" (TEXT/PLAIN)] > > >> > > >> #!/bin/sh > > >> # Automount hotplugged usb storage devices. Copyright (c) > > 2002, Wout Mertens > > >> # This script is released under the GPL. > > >> > > >> # The usb devices will be mounted for the console user. > > >> # To work, this needs: > > >> # - kernel support: > > >> # - hotplugging, /proc, usbdevfs and devfs > > >> # - as modules: usb-storage, sd_mod, scsi_mod > > >> # - filesystems that will be mounted, like vfat > > >> # - ls, tr, echo, awk, basename, stat, grep, mount, umount, > > mkdir, rm, sed > > >> > > >> # TODO Fix usb.agent so that /var/run/usb gets created if missing > > >> # TODO Some rigid way of getting this run. Currently, I do > > >> # grep usb-storage /lib/modules/*/modules.usbmap|sed > > >> 's/usb-storage/automount_usb/' \ > > >>>> /etc/hotplug/usb.usermap # TODO Lots of testing > > >> # TODO nice way of setting options > > >> # TODO Also, the error checking should probably be more robust > > >> # TODO Some clean way of handling disconnects while writing. > > >> # TODO Make a generic event system for GUIs that shows that > > something was > > >> # mounted for the user. Proposal: /etc/hotplug/gui.agent gets > > >> # called with ACTION=ADd/remove, NAME=3Dnice_name, PATH=3Dnew_path= , etc. > > >> # Not just for new storage, scanners and so on are useful too... > > >> > > >> # Dump debug > > >> mesg () { > > >> #return > > >> /usr/bin/logger -t $0 "$*" > > >> } > > >> > > >> # Figure out the device to mount > > >> NUM=3D`basename $DEVICE|sed 's/^0*//'` > > >> SERIAL=3D`awk -F=3D '/^T:.*/{if($0~/Dev#=3D *'$NUM' \ > > >> /){t=3D1}else{t=3D0}}t=3D1&&/SerialNumber/{print $2;exit}' > > /proc/bus/usb/devices` > > >> \ > > >> PRODUCT=3D`awk -F=3D '/^T:.*/{if($0~/Dev#=3D *'$NUM' > > >> /){t=3D1}else{t=3D0}}t=3D1&&/Product/{print \ > > >> $2;exit}' /proc/bus/usb/devices` # Use the serial or the > > product name to > > >> find which \ > > >> scsi host was just created if [ -n "$SERIAL" ]; then > > >> SCSI=3D`grep -l $SERIAL /proc/scsi/usb-storage-*/*|tail -1` > > >> elif [ -n "$PRODUCT" ]; then > > >> SCSI=3D`grep -l $PRODUCT /proc/scsi/usb-storage-*/*|tail -1` > > >> fi > > >> > > >> mesg Device No. $NUM, serial $SERIAL, name $PRODUCT, path $SCSI > > >> > > >> # Mount it > > >> if [ -n "$SCSI" ]; then > > >> # The name of the file is the number of the SCSI host > > >> SCSI=3D`basename $SCSI` > > >> PARTS=3D`ls /dev/scsi/host$SCSI/*/*/*/part*` > > >> MOUNTPATH=3D/mnt/usb/`echo $PRODUCT|tr '[ /?*"]' _` > > >> if [ -e "$MOUNTPATH" ]; then > > >> if mount|grep "$MOUNTPATH">/dev/null; then > > >> # TODO I'm too lazy to write proper collision avoidance code > > >> MOUNTPATH=3D"$MOUNTPATH".$$ > > >> fi > > >> fi > > >> # I'm hoping that mount ignores options that don't apply to the fs > > >> # These options should prevent abuse and make it writeable for the > > >> # console user. > > >> MOUNTOPTS=3D'-osync,nosuid'`stat -c',uid=3D%u,gid=3D%g' /dev/console` > > >> mesg Mounting $PARTS on $MOUNTPATH, options $MOUNTOPTS > > >> > > >> [ `echo $PARTS|wc -w` -eq 1 ] && MOUNTDIRECT=3D1 > > >> REMOVE> > >> for i in $PARTS; do > > >> if [ -n "$MOUNTDIRECT" ]; then > > >> T=3D$MOUNTPATH > > >> else > > >> T=3D$MOUNTPATH/`basename $i` > > >> fi > > >> mkdir -p $T > > >> if mount $MOUNTOPTS $i $T; then > > >> REMOVE=3D"umount $T;$REMOVE;rmdir $T" > > >> else > > >> rmdir $T > > >> fi > > >> done > > >> > > >> # Create remover > > >> echo "#!/bin/sh" > $REMOVER > > >> echo $REMOVE | sed 's/;;/;/g' >> $REMOVER > > >> chmod +x $REMOVER > > >> else > > >> exit 1 > > >> fi > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> ------------------------------------------------------- > > >> This sf.net email is sponsored by:ThinkGeek > > >> Welcome to geek heaven. > > >> http://thinkgeek.com/sf > > >> _______________________________________________ > > >> Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.n= et > > >> Linux-hotplug-devel@lists.sourceforge.net > > >> https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel > > >> > > > > > > > > > ------------------------------------------------------- > > > This SF.NET email is sponsored by: > > > SourceForge Enterprise Edition + IBM + LinuxWorld =3D Something 2 See! > > > http://www.vasoftware.com > > > _______________________________________________ > > > Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net > > > Linux-hotplug-devel@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel > > > > > > ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld =3D Something 2 See! http://www.vasoftware.com _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel