From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Clark Date: Tue, 07 Jan 2003 22:07:35 +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 That's pretty much it. The logic is more or less: On mass storage hotplug, try to mount FS. If mount fails, start daemon which tries again every N seconds. If mount succeeds, start daemon which tries to read N sectors every N seconds. If read fails, umount the FS and start waiting again. Keeping a hash is a good idea to bulletproof the whole thing. -tc on 1/7/03 12:37 PM, Wout Mertens at wmertens@cisco.com wrote: > 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. >=20 > Wout. >=20 > On Tue, 7 Jan 2003, Eddie Shi wrote: >=20 >> 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? >>=20 >> Thanks for the feedback. >>=20 >> Eddie >>=20 >>> -----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 :) >>>=20 >>>=20 >>> 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? >>>=20 >>> -tc >>>=20 >>> On 1/7/03 4:37 AM, "Wout Mertens" wrote: >>>=20 >>>> Hmmm, >>>>=20 >>>> Only one way to find out :) >>>>=20 >>>> 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). >>>>=20 >>>> 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. >>>>=20 >>>> 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 time >>>> you plug/unplug a card, you're lucky, and it will probably work. >>>>=20 >>>> Good luck, >>>>=20 >>>> Wout. >>>>=20 >>>> On Fri, 3 Jan 2003, Eddie Shi wrote: >>>>=20 >>>>> Hi, >>>>> Does anyone know whether this will work on the following situation: >>>>>=20 >>>>> 1. The usb-storage device (ie USB card reader) is alreay >>> plugged in the >>>>> system. >>>>>=20 >>>>> 2. No CF/MS/SM/SD are plugged in yet. >>>>>=20 >>>>> 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 vf= at >>>>> /dev/sda1 /cf ". >>>>>=20 >>>>> I guess what I would like to see is to have something like >>> CD's automount >>>>> when a CD is inserted. >>>>>=20 >>>>>=20 >>>>> Thanks >>>>>=20 >>>>>=20 >>>>> Eddie >>>>>=20 >>> ------------------------------------------------------------------ >>> ---------- >>>>> ------------------ >>>>> Hi there, >>>>>=20 >>>>> 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. >>>>>=20 >>>>> It ties in to the hotplug architecture as closely as possible, without >>>>> changing anything. So then I subscribed to this list to announce it. >>>>>=20 >>>>> Of course, that's when I discovered >>>>> http://users.actrix.co.nz/michael/usbmount.html by Michael Hamilton. >>>>>=20 >>>>> 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 >>>>>=20 >>>>> But Michael's solution: >>>>> - makes KDE icons >>>>> - is easier to read >>>>>=20 >>>>> So, please have a look at the attached code, and tell me what you thi= nk >>>>> about the device detection code. Michael, if you read this, we could >>>>> perhaps merge the two efforts and get all the features. >>>>>=20 >>>>> 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 other >>>>> agents, with an extra HOTPLUG_PATH variable indicating the >>> path on which >>>>> the device is available, if applicable. >>>>>=20 >>>>> This could then be used by KDE, Gnome etc to notify the user. >>>>>=20 >>>>> Cheers, >>>>>=20 >>>>> Wout. >>>>>=20 >>>>> PS: /Please/ change usb.agent so that it creates /var/run/usb/ before >>>>> pointing remover scripts there... >>>>> ["automount_usb" (TEXT/PLAIN)] >>>>>=20 >>>>> #!/bin/sh >>>>> # Automount hotplugged usb storage devices. Copyright (c) >>> 2002, Wout Mertens >>>>> # This script is released under the GPL. >>>>>=20 >>>>> # 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 >>>>>=20 >>>>> # 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... >>>>>=20 >>>>> # Dump debug >>>>> mesg () { >>>>> #return >>>>> /usr/bin/logger -t $0 "$*" >>>>> } >>>>>=20 >>>>> # 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 >>>>>=20 >>>>> mesg Device No. $NUM, serial $SERIAL, name $PRODUCT, path $SCSI >>>>>=20 >>>>> # 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 >>>>>=20 >>>>> [ `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 >>>>>=20 >>>>> # Create remover >>>>> echo "#!/bin/sh" > $REMOVER >>>>> echo $REMOVE | sed 's/;;/;/g' >> $REMOVER >>>>> chmod +x $REMOVER >>>>> else >>>>> exit 1 >>>>> fi >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>> ------------------------------------------------------- >>>>> 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.net >>>>> Linux-hotplug-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel >>>>>=20 >>>>=20 >>>>=20 >>>> ------------------------------------------------------- >>>> 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 >>>=20 >>>=20 >>=20 >>=20 >=20 >=20 > ------------------------------------------------------- > 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