Mounting USB flash drive
Peter Trifonov
petert at dcn.nord.nw.ru
Tue Jan 29 00:22:16 PST 2008
Dear Henrik,
> Peter, I think you may be overly optimistic here. The patches that you
> Just so you know what you're into, the partial fix may seem to work,
Thank you very much for your warning.
> but
> can give you a system panic after up to a few hundred detach attempts.
> Or after less than ten attempts. It's really a random timing issue.
In my case system stability is not the key issue, since I am just setting up
a terminal to be used by students. But I will print warnings everywhere...
Just a small suggestion for your patch set. The /etc/devd/umass script
contains the following:
# Verify that there is a slice to mount
if [ ! -e /dev/${drv}s1 ]; then
exit 1;
fi
I have seen some flash drives which do not contain any partitions, i.e. they
look like a big floppy.
In this case one should not look for /dev/daXsY, but mount /dev/daX.
I am using the following devd script, which manages mount points in /mnt
directory:
--------------------------------------
#!/usr/bin/perl
#This script should be invoked every time USB device is attached or detached
#Copyright (c) 2008 Peter Trifonov petert at dcn.nord.nw.ru
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#wait for devices to settle
sleep (2);
#get a list of devices
$DevNodes=`ls /dev/`;
@DevNodes=($DevNodes=~m/(da\d+(?:s\d+)?)/g);
#get a list of mount points
$DirNodes=`ls /mnt/`;
@DirNodes=($DirNodes=~m/(da\d+(?:s\d+)?)/g);
foreach $Dev(@DevNodes)
{
$DevNodes{$Dev}+=1;
#if there is a device called daNsMM, daN should be excluded
if ($Dev=~m/(da\d+)s\d+/)
{
print "Skipping $1\n";
$DevNodes{$1}-=1;
};
};
foreach $Dir(@DirNodes)
{
$DirNodes{$Dir}=1;
};
#look for new devices
foreach $Dev(@DevNodes)
{
if (!$DirNodes{$Dev}&&($DevNodes{$Dev}>0))
{
print "Mounting $Dev...\n";
mkdir "/mnt/$Dev";
system("/sbin/mount_msdosfs -m 777 -L ru_RU.KOI8-R /dev/$Dev
/mnt/$Dev");
};
};
#look for mountpoints to be eliminated
foreach $Dir(@DirNodes)
{
if (!$DevNodes{$Dir})
{
print "Unmounting $Dir...\n";
system("umount -f /mnt/$Dir");
rmdir "/mnt/$Dir";
};
};
---------------------
With best regards,
P. Trifonov
More information about the freebsd-usb
mailing list