Re: [suse-laptop] ATA Flashcard unter 9.2 - Moegliche Alternative/Work Around (Korrektur)
*** Kommentar: In dieser e-mail ist das skript *korrekt*. Man kann es so wie es ist per copy/paste übernehmen. *** In der vorherigen, ist eine Zeille verrutscht. Hallo, in meinem vorherigen posting hatte ich geschrieben: " Es sieht so aus, daß solange eine FlashCard/Microdrive im PCMCIA Slot nicht gemountet ist ständig subfs aufgerufen wird" Es stellt sich die Frage: Wieso werden keine FlashCards/Microdrives vom PCMCIA Slot ge-mountet ? Ich glaube die Antwort im /etc/dev.d/block/51-subfs.dev skript gefunden zu haben. Ganz am Ende des skripts befindet sich: ..... case $ACTION in add) mesg "mount block device $DEVPATH" entry=`check_mount_entry` if [ -n "$entry" -a -n "$do_mount" ] ; then mount_media "$entry" "$real_device" fi rm -f $lockfile ;; ..... Es geht um die Variable do_mount welche innerhalb einer if Abfrage gesetzt wird, die wie folgt anfängt: if [ -n "$dname" -a -f ${dname}/scsi_level ]; then ....................... Da es sich bei einer CF/Microdrive Karte im PCMCIA Slot um einen IDE Controller handelt und nicht um eine SCSI Gerät kann die do_mount variable nicht gesetzt werden. Zur Erinnerung USB Sticks bzw. CF Karten im USB Reader werden als SCSI Devices angesprochen und mit dennen funktioniert ja alles. Ich habe den /etc/dev.d/block/51-subfs.dev skript ein bisschen abgeändert und nun funktioniert alles auch mit CF adaptern im PCMCIA Slot sogar per automount (subfs). (Das geänderte /etc/dev.d/block/51-subfs.dev skript findet Ihr am Ende dieser e-mail) Ich habe noch eine kleine Änderung eingebaut. Sollte für das CF Gerät bereits ein Eintrag in der /etc/fstab existieren so wird das Gerät an dem dort angegebenen Mountpoint gemountet. Der Grund dafür ist recht einfach: Das System vergibt beim auto-mount sehr lange Namen für den Mountpoint wie z.B: /dev/hde1 on /media/pcidevice-0000001:0:0:0p1 Mag zwar nett klingen, aber ich kann mir diesen Namen nicht merken :-)) Deshalb habe ich folgenden Eintrag in der /etc/fstab eingefügt /dev/hde1 /media/microdrive vfat noauto,users,gid=users,umask=0002,sync 0 0 Damit wird die Microdrive auf /media/microdrive gemountet. Man kann das Device als non-root user mounten und un-mounten. Beim ejecten des gerätes wird der Mountpoint gelöscht und beim erneuten insert wieder angelegt. Weiter unten die alternative /etc/dev.d/block/51-subfs.dev. Bei mir hat es funktioniert. Ich übernehme jedoch keinerlei Garantie! Gruss, V.A. #!/bin/bash # $Id: 51-subfs.dev 262 2004-08-09 12:22:13Z hare $ # set -x # # block hotplug policy agent for Linux kernels # # Kernel BLOCK hotplug params include: # # ACTION=%s [add or remove] # DEVPATH=%s # # bash required due to echo | while read line ; do : ; done # # Logic is like this: # - call hwscanqueue --block for all full disks # - call hwscanqueue --scan only for usb-storage disks # - mount devices (either full disks or partitions) if # HOTPLUG_DO_MOUNT is not 'no' and if an matching entry # from /etc/fstab or /proc/mounts is found. # cd /etc/hotplug . ./hotplug.functions . ./hotplug.subfs.functions # DEBUG=yes export DEBUG lockfile=/var/lock/block.agent.lock if [ "$DEVPATH" = "" ]; then mesg Bad BLOCK invocation: \$DEVPATH is not set exit 1 fi # Check whether we need to execute anything at all if [ "$HOTPLUG_DO_MOUNT" == "no" ]; then exit 0 fi waitforlock() { local pid="" local i="" # fail redir if file exists set -o noclobber while ! { echo $$ > $lockfile; } 2>/dev/null; do read i < $lockfile if [ -z "$i" -o ! -d "/proc/$i" ] ; then rm -f $lockfile else if [ "$i" != "$pid" ] ; then mesg "waiting for $lockfile, process $i holds it" pid=$i fi ## sleep between .4 and 1 second #usleep $((RANDOM%6000*100+400000)) usleep 400000 fi done trap "rm -f $lockfile" EXIT; set +C } check_mount_entry () { ncookie=$(udevinfo -p $DEVPATH -q name) scookie=$(udevinfo -p $DEVPATH -q symlink) debug_mesg ncookie $ncookie debug_mesg scookie $scookie if [ -n "$scookie" -o -n "$ncookie" ] ; then for entry in $scookie $ncookie ; do i="`echo ${i} | sed -e 's@/@\\/@g'`" i=`sed -e "/\/dev\/$i[[:blank:]]/q;d" /etc/fstab` if [ ! -z "$i" ] ; then debug_mesg found $entry in fstab entry="" break fi i=`sed -e "/\/dev\/$i[[:blank:]]/q;d" /proc/mounts` if [ ! -z "$i" ] ; then debug_mesg found $entry in /proc/mounts entry="" break fi done fi if [ -z "$scookie" ] ; then entry=$ncookie else entry="${scookie%% *}" fi echo $entry } # # generic section # if [ ! -w /media ]; then # Can't write to /media, nothing to do here exit 0; fi # we need locking to avoid races when modifying fstab if [ "$HOTPLUG_MOUNT_TYPE" = fstab ] ; then waitforlock fi do_mount= if [ "$DEVNAME" ] ; then real_device="$DEVNAME" else real_device=/dev/${DEVPATH##*/} fi # do only mount devices connected via USB or Firewire # check whether the devpath has a 'device' link pname="" if [ -e /sys$DEVPATH/device ]; then dname=`cd -P /sys$DEVPATH/device; echo $PWD` else if [ -e /sys$DEVPATH/../device ]; then dname=`cd -P /sys$DEVPATH/../device; echo $PWD` fi fi # Get the type of disk if [ -n "$dname" -a -f ${dname}/scsi_level ]; then pname=${dname%/*} pname=/sys/class/scsi_host/${pname##*/}/proc_name if [ -f "$pname" ]; then read dtype < "$pname" if [ "$dtype" = "usb-storage" -o "$dtype" = "sbp2" ]; then # We only need to mount USB and FireWire devices do_mount=maybe fi fi fi ############ Change by V.A ######################### ##### Now we check also for PCMICIA Discs ########## if [ -n "$dname" -a -z "$do_mount" ]; then pt_name=${DEVNAME##*/} path_name=$dname/block/$pt_name if [ -d $path_name ]; then do_mount=whynot fi fi ########### Change End ############################ # # do the real action # case $ACTION in add) mesg "mount block device $DEVPATH" # entry=`check_mount_entry` #This line disabled by V.A. ############ Change by V.A ######################## ####### Check if there is already an entry ######## ####### in /etc/fstab for the device ######## ####### if there use it as mountpoint ######## ################################################### entry=$(grep $real_device /etc/fstab|awk '{print $2'}) if [ -z "$entry" ]; then entry=`check_mount_entry` fi ############# Change End ########################## if [ -n "$entry" -a -n "$do_mount" ] ; then mount_media "$entry" "$real_device" fi rm -f $lockfile ;; remove) mesg "umount block device $DEVPATH" # entry=`check_mount_entry` #This line disabled by V.A. ############ Change by V.A ######################## entry=$(grep $real_device /etc/fstab|awk '{print $2'}) if [ -z "$entry" ]; then entry=`check_mount_entry` fi ############# Change End ########################## if [ -n "$entry" ] ; then unmount_media "$entry" "$real_device" fi rm -f $lockfile ;; *) debug_mesg BLOCK $ACTION event not supported exit 1 ;; esac
participants (1)
-
V.A.