USB Speicher automatisch per Skript mounten

Hast Du Probleme mit Hardware, die durch die anderen Foren nicht abgedeckt werden? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

USB Speicher automatisch per Skript mounten

Beitrag von horo » 01.09.2004 17:41:44

Hi,

zur Verwaltung meiner Digikam und meiner USB-Sticks habe ich ein kleines Script /etc/hotplug/usb/usb-storage geschrieben, das beim Einstecken eines USB-Speichers diesen erkennt und entweder fest nach /mnt/camera (die Kamera) oder nach /mnt/sd[a-z][1-9] mouted. Auf dem KDE-Desktop erscheint pro Partition ein Icon, das beim Abziehen wieder verschwindet. Läuft sehr gut unter 2.6.x und gut unter 2.4.x.
Ich traue es mich nicht so recht zu sagen, ich bin ein Abweichler, mein System ist Kanotix BH7A. :oops:
Alles weitere dort

Ciao Martin
Zuletzt geändert von horo am 07.09.2004 18:21:17, insgesamt 1-mal geändert.

Benutzeravatar
b a r t
Beiträge: 145
Registriert: 16.08.2004 20:19:15
Wohnort: springfield

Beitrag von b a r t » 05.09.2004 11:07:06

was ist jetzt deine Frage, oder wollest du uns einfach ein Script vorstellen, was sicherlich auch cool ist?

gruss
b a r t

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

Beitrag von horo » 05.09.2004 20:11:02

Sorry, wenn ich gegen irgendwelche Forums-Richtlinien verstoßen haben sollte. Aber glaub mir, wenn ich eine Frage hätte, so stellte ich sie auch.
Nee, im Ernst, ich hatte gesehen, daß bei uns und auch hier immer das Problem des automatischen Mountens von USB-Sticks und Kameras hochkommt und wollte daher mein Skript zur Verfügung stellen.

Ciao Martin

Benutzeravatar
b a r t
Beiträge: 145
Registriert: 16.08.2004 20:19:15
Wohnort: springfield

Beitrag von b a r t » 06.09.2004 08:59:25

das find ich edel.

b a r t

PS: ganz kleiner tipp, poste ihn als code rein, ist besser denke ich als ihn zu verlinken (wenn es nicht viele Seiten an Code ist).

Benutzeravatar
gOtNoPhEaR
Beiträge: 863
Registriert: 17.04.2004 15:49:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Gau-Algesheim
Kontaktdaten:

Beitrag von gOtNoPhEaR » 06.09.2004 09:54:02

Was noch besser wäre: Ein Eintrag im Wiki damit unsere tollen HowTos weiter an Umfang gewinnen...
Greetz, gOtNoPhEaR

OS: Debian/testing amd64

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

Beitrag von horo » 06.09.2004 10:42:11

Hi,

mein Skript ist zur Zeit "work in progress", im Kanotix-Forum ist der Thread schon >50 Beiträge lang, das wollt ich Euch ersparen. Ein paar Ungereimtheiten existieren noch, wenn die weg sind kommt 'ne stabile Version ins Debian-Wiki. Ansonsten wird die aktuelle Version im Kanotix-Wiki gepflegt.

Ciao Martin

P.S.: Hat's denn überhaupt schon jemand ausprobiert?

Benutzeravatar
b a r t
Beiträge: 145
Registriert: 16.08.2004 20:19:15
Wohnort: springfield

Beitrag von b a r t » 07.09.2004 15:48:22

wenn du ferrig bist darfst du gern auch 2 oder 3 seiten code posten, wenn es wirklich läuft ist das eben absolut geil :)

danke

b a r t

ps: ich denke es weden sich viele darüber freuen :lol:

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

USB Speicher automatisch mounten, mein Skript

Beitrag von horo » 07.09.2004 17:30:08

Hi bart,

Du wolltest es nicht anders: :D
Dieser Schnappschuß aus dem Kanotix Wiki läuft bei mir ohne Probleme auf Kanotix Bug Hunter 7A mit Kernel 2.6.8.1. Für 2.4er Systeme geht es auch, es sind aber einige tools erforderlich, z.B. "scsiinfo" und "scsi_info".
(Kanotix ist die optimierte Version von Knoppix, dem von CD lauffähigen Debian. Kanotix kann problemlos auf Platte installiert werden, man hat dann ein Sid.)

Anmerkung:
Das Skript steht im Wiki, damit man es aktualisieren kann. Bei Problemen erstmal schauen, ob es schon eine neue Version gibt:

Code: Alles auswählen

#! /bin/bash
#
# /etc/hotplug/usb/usb-storage
# Version 20040906
#


function makeCameraIcon {
cat << EOF > $MYDESKTOPFILE
[Desktop Entry]
Name=Camera
Name[de]=Kamera
Type=Link
URL=/mnt/camera/
Actions=Sync;Digikam
Icon=camera
Comment=digital camera
Comment[de]=Digitalkamera

[Desktop Action Digikam]
Exec=/usr/bin/digikam;/bin/sync
Icon=camera
Name=Organize pictures
Name[de]=Bilder verwalten

[Desktop Action Sync]
Exec=/bin/sync
Icon=filesave
Name=Save changes
Name[de]=Änderungen speichern
EOF
}


function makeStorageIcon {
cat << EOF > $MYDESKTOPFILE
[Desktop Entry]
Name=USBStick [$MYPARTITION]
Type=Link
URL=$MYMOUNT
Actions=Sync
Icon=usb
Comment=USB storage device
Comment[de]=USB Speichergerät

[Desktop Action Sync]
Exec=/bin/sync
Icon=filesave
Name=Save changes
Name[de]=Änderungen speichern
EOF
}


DEBUG=0
LOGFILE=$0.log
echo "PRODUCT=$PRODUCT" > $LOGFILE

MYMOUNT=""
#
# (known) digicams are mounted at /mnt/camera
#
case "$PRODUCT" in
    3f0/4002/100) # HP photosmart 120 (mass storage mode)
        MYMOUNT="/mnt/camera"
        ;;
esac


# # # # # # # # # #
#
# doesn't work with kernel 2.6.x
#
function PRODUCT_to_SCSI {
    MYGUID=`echo $PRODUCT | awk -F/ '{printf "%04x%04x", strtonum("0x"$1), strtonum("0x"$2)}'`
    grep -lr "^ *GUID: $MYGUID" /proc/scsi/usb-storage-* | xargs grep -l "^ *Attached: Yes" | cut -d/ -f5
}
#
# # # # # # # # # #


# # # # # # # # # #
#
# first detecting method
# doesn't work with multiple devices
#
function find_partitions_1 {
    sleep 1
    # find the last line with " sdx: sdxn", x=a,b,c,... and n=1,2,3,4
    dmesg | grep "^ \(sd[[:lower:]]\): \1[1234]" | tail -1 | tr -d \<\> | cut -d\  -f3-
}
#
# # # # # # # # # #


# # # # # # # # # #
#
# second detecting method
# uses scsidev command already in Kanotix
# doesn't work with kernel 2.6.x
#
function find_partitions_2 {
    scsidev -lde 2>/dev/null >/dev/null
    for MYSCSI in $(PRODUCT_to_SCSI $PRODUCT); do
        ls -l /dev/scsi/sdc${MYSCSI}b0t?u?p*|cut -d/ -f6
    done
}
#
# # # # # # # # # #


# # # # # # # # # #
#
# third detecting method
# uses scsiinfo and scsi_info commands already in Kanotix
#
function host_to_partitions {
local host=$1
local dev=""
for dev in `scsiinfo -l`; do
    local HOST="-1"
    eval $(scsi_info $dev 2>/dev/null)
    if [ $HOST = $host ]; then
        cat /proc/partitions | grep `basename ${dev}`[1-9] | awk '{print $4}'
    fi
done
}
#
#
function find_partitions_3 {
    for MYSCSI in $(PRODUCT_to_SCSI $PRODUCT); do
        host_to_partitions $MYSCSI
    done
}
#
# # # # # # # # # #


# # # # # # # # # #
#
# simple detecting method for kernel 2.6.x
#
function find_partitions_26 {
    sleep 1
    ls /sys/$DEVPATH/host[0-9]*/[0-9]*:[0-9]:[0-9]:[0-9]/block | grep sd[[:lower:]][[:digit:]]
}
#
# # # # # # # # # #



if [ $DEVPATH ]; then # kernel 2.6
    MYPARTITIONS=$(find_partitions_26)
else
    MYPARTITIONS=$(find_partitions_3)
fi 

if [ "$MYPARTITIONS" ]; then
    echo Partitions found: $MYPARTITIONS >> $LOGFILE
else
    echo "Device not found" >> $LOGFILE
    set >> $LOGFILE
    exit 0
fi

mkdir -p /var/run/usb
echo "#!/bin/sh" > $REMOVER
chmod a+x $REMOVER

# find KDE user  
MYXUSER=`who | grep " :0" | cut -d\  -f1`

for MYPARTITION in $MYPARTITIONS; do
    MYDEVICE=/dev/$MYPARTITION
    if [ "$MYMOUNT" != "/mnt/camera" ]; then
        MYMOUNT=/mnt/$MYPARTITION
    fi

# check if device or mountpoint already in use
    mount | grep "$MYDEVICE \| $MYMOUNT " >/dev/null
    if [ $? -eq 0 ]; then
        echo -n "Already mounted: " >> $LOGFILE
        mount | grep "$MYDEVICE \| $MYMOUNT " >> $LOGFILE
        DEBUG=1
        continue
    fi

    mkdir -p $MYMOUNT

# mount the device
    MYMOUNTCMD="/bin/mount -s -o quiet,sync,gid=100,umask=002,noexec,showexec $MYDEVICE $MYMOUNT" 
    echo $MYMOUNTCMD>> $LOGFILE
    `$MYMOUNTCMD 2>>$LOGFILE` 
    if [ $? -ne 0 ]; then
        continue
    fi

    echo "/bin/umount -l $MYDEVICE" >> $REMOVER

    if [ $MYXUSER ]; then
        MYHOME=$(eval echo ~$MYXUSER)
        case "$MYMOUNT" in 
            /mnt/camera)
                MYDESKTOPFILE="$MYHOME/Desktop/Camera.desktop"
                makeCameraIcon
                ;;
            *)
                MYDESKTOPFILE="$MYHOME/Desktop/USBStick_$MYPARTITION.desktop"
                makeStorageIcon
                ;;
        esac
        chown $MYXUSER $MYDESKTOPFILE
        echo "rm -f $MYDESKTOPFILE" >> $REMOVER
    fi

    sleep 1

done


if [ $DEBUG -ne 0 ]; then
    set >> $LOGFILE
fi 

Ciao Martin
Zuletzt geändert von horo am 08.09.2004 14:29:53, insgesamt 1-mal geändert.

Benutzeravatar
b a r t
Beiträge: 145
Registriert: 16.08.2004 20:19:15
Wohnort: springfield

Beitrag von b a r t » 08.09.2004 12:37:53

hi Martin
hu

8) 8) 8) cool 8) 8) 8)

thx
b a r t

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 26.09.2004 23:12:32

Hallo,

drei Fragen dazu:
-Müssen die Mountpoints per Hand erstellt werden, oder macht das das Skript automatisch?
-Im Wiki steht etwas von Rechtsklick -> Änderungen speichern vor dem abziehen. Sind das keine Geräte-Icons, so dass auch Rechtsklick -> Auswerfen geht?
-Welche Programme sind dafür sonst so notwendig?
(bin leider Skript-mäßig total unerfahren!).

Aber sonst sieht das absolut super aus, ein großes Lob dafür, das ist das was ich bis jetzt an SuSE immer praktisch fand!

Gruß!
there are only 10 types of people: those who understand binary and those who don't.

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

Beitrag von horo » 27.09.2004 09:18:51

Hi arteist,

1.) passiert automatisch
2.) das sind Dateisystem-Icons, die auf /mnt/xxx zeigen.
3.) läuft mit Kanotix Bug Hunter "out of the box", gebraucht wird ein aktuelles hotplug, ansonsten grep, awk, alles Dinge, die auf jedem System vorhanden sein sollten (zumindest für kernel 2.6.x).

Ciao Martin

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 15.10.2004 00:42:55

Hallo,

es läuft bei mir eigentlich Super, bis auf die Tatsache, dass meine Kamera nicht als solche erkannt wird:

Code: Alles auswählen

Oct 15 00:39:02 rechengnom kernel: usb 2-2: new full speed USB device using address 3
Oct 15 00:39:04 rechengnom kernel: Initializing USB Mass Storage driver...
Oct 15 00:39:04 rechengnom kernel: scsi1 : SCSI emulation for USB Mass Storage devices
Oct 15 00:39:04 rechengnom kernel:   Vendor: OLYMPUS   Model: C765UZ            Rev: 1.00
Oct 15 00:39:04 rechengnom kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
Oct 15 00:39:04 rechengnom kernel: SCSI device sda: 32000 512-byte hdwr sectors (16 MB)
Oct 15 00:39:04 rechengnom kernel: sda: Write Protect is off
Oct 15 00:39:04 rechengnom kernel: sda: Mode Sense: 18 00 00 08
Oct 15 00:39:04 rechengnom kernel: sda: assuming drive cache: write through
Oct 15 00:39:04 rechengnom kernel:  /dev/scsi/host1/bus0/target0/lun0: p1
Oct 15 00:39:04 rechengnom kernel: Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
Oct 15 00:39:04 rechengnom kernel: Attached scsi generic sg0 at scsi1, channel 0, id 0, lun 0,  type 0
Oct 15 00:39:04 rechengnom usb.agent[7734]:      usb-storage: loaded successfully
Oct 15 00:39:04 rechengnom kernel: USB Mass Storage device found at 3
Oct 15 00:39:04 rechengnom kernel: usbcore: registered new driver usb-storage
Oct 15 00:39:04 rechengnom kernel: USB Mass Storage support registered.
Oct 15 00:39:05 rechengnom scsi.agent[7775]: disk at /devices/pci0000:00/0000:00:04.3/usb2/2-2/2-2:1.0/host1/1:0:0:0
Oct 15 00:39:07 rechengnom usb.agent[7734]:      libgphoto2: loaded successfully
Das ganze ist eine Olympus C-765 UZ. Falls du mehr Infos gebrauchen kanns, melde dich einfach bei mir (icq/jabber) oder hier im forum!

gruß
momo
there are only 10 types of people: those who understand binary and those who don't.

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

Beitrag von horo » 15.10.2004 09:02:01

Hi momo,
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
Deine Kamera ist als "Superfloppy" formatiert, d.h. keine Partitionen (sda1), sondern Dateisystem direkt auf sda. Das unterstützt mein Skript noch nicht, steht aber auf der ToDo-Liste, habe aber momentan wenig Zeit.
Als "Workaround" könntest Du den Speicher partitionieren und dann neu formatieren. Oder Du passt das Skript selber an...

Ciao Martin

P.S.: Die aktuelle Version, die jetzt auch wieder ext[23], bedient, steht dort.

Benutzeravatar
horo
Beiträge: 47
Registriert: 05.01.2004 15:47:20
Wohnort: Berlin

Beitrag von horo » 08.02.2005 15:21:32

Hi,

um mein oben bereits erwähntes Skript zum automatischen Mounten von USB-Speicher noch etwas sicherer zu gestalten, suche ich eine Möglichkeit, um den Typ des Filesystems auf einem Device (das noch nicht gemounted ist) festzustellen. Zur Zeit verwende ich "file -Lkbs /dev/xxx". Das gibt aber gerade bei OEM-Formaten (VFAT auf Kameras und USB-Sticks) oft Probleme und Erkennungsfehler. Mit etwas Tricksen habe ich es jetzt hinbekommen, aber ich suche eine _saubere_ Lösung.
Hat jemand 'nen Tip für mich.

Ciao Martin

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 12.02.2005 10:50:48

horo hat geschrieben:Hi momo,
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
Deine Kamera ist als "Superfloppy" formatiert, d.h. keine Partitionen (sda1), sondern Dateisystem direkt auf sda. Das unterstützt mein Skript noch nicht, steht aber auf der ToDo-Liste, habe aber momentan wenig Zeit.
Nein, das ist sie ganz sicher nicht. Sonst würde sie mit folgendem Eintrag in der fstab nicht laufen:

Code: Alles auswählen

/dev/sda1       /mnt/cam                vfat    user,noauto,gid=1000,uid=1000,umask=0002 0      0
there are only 10 types of people: those who understand binary and those who don't.

dorpm
Beiträge: 294
Registriert: 14.02.2005 09:26:23

Beitrag von dorpm » 15.02.2005 10:07:39

Habe das Script bei mir gestestet - Super und Danke für die Arbeit!

Zwei Anmerkungen:

1.
Wenn man den Rechner mit eingestecktem USB-Device runterfährt, bleibt das Icon beim nächsten Neustart auf dem Desktop, unabhängig davon, ob das Device noch da ist oder nicht. Es verschwindet allerdings, wenn man das Device nochmal einsteckt und dann wieder abzieht.

2.
Gibt es irgendeinen Weg, Linux dazu zu bewegen, das sync mit dem USB-Device schneller zu machen? Ich höre nämlich meine Freundin schon schreien ("Wo sind meine Dateien, ich hatte doch alles draufkopiert ....".) Nunja, da kann man tausend Mal erklären, dass man dafür sorgen muss, den Kopiervorgang auch wirklich ab zuschließen (rechte Maustaste drücken und so) - nützt nix.

Flori
FD - debian Sarge auf Thinkpad R51

deadbabylon
Beiträge: 369
Registriert: 06.10.2003 11:38:14
Wohnort: Hannover

Beitrag von deadbabylon » 21.02.2005 13:11:47

Muss für das Skript eigentlich noch selbst etwas eingestellt/eingetragen werden?
Frage deshalb, weil es hier "so-wie-es-ist" leider nichts macht.

crazyzivi
Beiträge: 30
Registriert: 05.09.2003 15:12:31
Wohnort: Leipzig
Kontaktdaten:

Beitrag von crazyzivi » 18.05.2005 12:25:07

@syncproblem:
also wenn man beim mounten sync auswählt, werden die daten doch synchron geschrieben. Wie kann es dann sein dass, bei dir die daten noch nicht drauf sind.
be crazy !
cu maik :o)

Antworten