linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tom Clark <tclark@mac.com>
To: linux-hotplug@vger.kernel.org
Subject: Re: My first usb storage automount script :)
Date: Tue, 07 Jan 2003 22:07:35 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-104197750929139@msgid-missing> (raw)
In-Reply-To: <marc-linux-hotplug-103962396823038@msgid-missing>

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.
> 
> 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 has
>>> 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 kind
>>> 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" <wmertens@cisco.com> 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 time
>>>> 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 vfat
>>>>> /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, without
>>>>> 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 think
>>>>> 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 other
>>>>> 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­d/remove, NAME=nice_name, PATH=new_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=`basename $DEVICE|sed 's/^0*//'`
>>>>> SERIAL=`awk -F= '/^T:.*/{if($0~/Dev#= *'$NUM' \
>>>>> /){t=1}else{t=0}}t=1&&/SerialNumber/{print $2;exit}'
>>> /proc/bus/usb/devices`
>>>>> \
>>>>> PRODUCT=`awk -F= '/^T:.*/{if($0~/Dev#= *'$NUM'
>>>>> /){t=1}else{t=0}}t=1&&/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=`grep -l $SERIAL /proc/scsi/usb-storage-*/*|tail -1`
>>>>> elif [ -n "$PRODUCT" ]; then
>>>>> SCSI=`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=`basename $SCSI`
>>>>> PARTS=`ls /dev/scsi/host$SCSI/*/*/*/part*`
>>>>> MOUNTPATH=/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="$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='-osync,nosuid'`stat -c',uid=%u,gid=%g' /dev/console`
>>>>> mesg Mounting $PARTS on $MOUNTPATH, options $MOUNTOPTS
>>>>> 
>>>>> [ `echo $PARTS|wc -w` -eq 1 ] && MOUNTDIRECT=1
>>>>> REMOVE>>>>> for i in $PARTS; do
>>>>> if [ -n "$MOUNTDIRECT" ]; then
>>>>> T=$MOUNTPATH
>>>>> else
>>>>> T=$MOUNTPATH/`basename $i`
>>>>> fi
>>>>> mkdir -p $T
>>>>> if mount $MOUNTOPTS $i $T; then
>>>>> REMOVE="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.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 = 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 = 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 = 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

      parent reply	other threads:[~2003-01-07 22:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-11 16:22 My first usb storage automount script :) Wout Mertens
2003-01-03 23:27 ` Eddie Shi
2003-01-07 12:37 ` Wout Mertens
2003-01-07 14:56 ` Tom Clark
2003-01-07 19:13 ` Eddie Shi
2003-01-07 20:37 ` Wout Mertens
2003-01-07 22:07 ` Tom Clark [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-104197750929139@msgid-missing \
    --to=tclark@mac.com \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).