[erledigt] Festen Mount point für USB cardreader

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

[erledigt] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 14:50:24

Hallo zusammen,

leider bin ich ein blutiger Anfänger in Sachen Entwicklung und hoffe, dass Ihr mir weiterhelfen könnt.
Ich nutze einen Raspberry Pi mit Rasbian (aktuellste Version).
Ich habe ein schönes Shell-Script gefunden, welches die folgenden Aufgaben erfüllt:

USB-Stick wird eingelegt --> Script kopiert alle Daten des Sticks automatisch in einen Ordner --> script umountet den Stick

Das Problem: Der Script nutzt einen festen mount point. Das ist so, weil der Ersteller des Scripts immer Daten einer Gopro kopiert hat (Die Partition heißt immer Gopro und wird dementsprechend als "GOPRO" gemountet.
Dies geht bei mir nicht, weil ich unterschiedliche Karten und unterschiedliche Kameras nutze. Der mount point ist also immer wo anders.

Glücklicherweise nutze ich immer den gleichen Cardreader, welcher eine eigene Seriennummer hat. Was ich tun möchte ist, dass der besagte Stick immer an der gleichen Stelle gemountet wird.
Hat jemand eine idee wie ich das abbilden kann?

Hier der Aufbau des Scripts:

Als erstes gibt es eine UDEV rule (50.sdcopy.rules)

Code: Alles auswählen

# Run Script as a new process when any device is added
KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/su root -c /opt/bin/myfork.sh"
Dann das Script auf das verwiesen wird (myfork.sh):

Code: Alles auswählen

#!/bin/bash
date >> myfork.log
setsid /opt/bin/goprosync.sh > setsid.log
Das ganze ist leider nötig, weil man sonst keine großen Videodateien laden könnte, da UDEV keine so langen Prozesse mag.


Hier das eigentliche Script:

Code: Alles auswählen

#!/bin/bash

# If the script detects the existence of both the source and destination disks
# then the contents ot the GOPRO folder is synchronised with files on the BACKUPDISK folder.
# Ensure that the Partition Label's on all your devices are set accordingly.

## Make sure the script isn't already running from a previous disk connection
################################################################################
if [ `ps -e | grep -c $(basename $0)` -gt 2 ]; then exit 0; fi
################################################################################

sleeptime=5
logfile=/opt/bin/goprosync.log
source=/media/GOPRO
destination=/media/BACKUPDISK
SourceCounter=20
DestinationCounter=20
Recipient=user1@raspberrypi.local
Sender=goprosync@raspberrypi.local
Subject=GoProSync_Result

# Start a new log file and Add the  email stuff to the top
############################################################
echo "To: "$Recipient > $logfile
echo "From: "$Sender >> $logfile
echo "Subject: "$Subject >>$logfile
exho " " >>$logfile
echo "==============" >> $logfile
echo "Script Started" >> $logfile
date >> $logfile

# Test if the Source disk is connected.
until [ $SourceCounter -lt 1 ]
do
   echo $SourceCounter >> $logfile
   if [ -d $source ]
   then
      echo "== Source Disk Found - Look for the Destination Disk ==" >>$logfile
      date >> $logfile
      let SourceCounter=0

      # Test if the Destination disk is connected.
      until [ $DestinationCounter -lt 1 ]
      do
         echo $DestinationCounter >> $logfile
         if [ -d $destination ]
         then
            echo "== Destination Disk Found - GOPRO Backup Started ==" >> $logfile
            rsync -avzh $source $destination >> $logfile 2>&1
            echo "Backup Complete" >> $logfile
            echo "Unmount the  USB  disks" >> $logfile
            umount $source >> $logfile 2>&1
            umount $destination >> $logfile
            date >> $logfile
            echo "== GoPro Copy Complete ==" >> $logfile
            let DestinationCounter=0
         else
            echo "== Looking for the Destination Disk ==" >>$logfile
            sleep $sleeptime
         fi
         let DestinationCounter=DestinationCounter-1
      done

   else
      echo "== Looking for the Source Disk  ==" >>$logfile
      sleep $sleeptime
   fi
   let SourceCounter=SourceCounter-1
done

echo "Script Complete" >> $logfile
echo "===============" >> $logfile
# Send the log as an email
ssmtp user1@raspberrypi < $logfile

Nochmal zusammengefasst was ich tun möchte:
Ich möchte einen SD-Kartenleser immer an der gleichen Stelle mounten.

Bisherige Google-Lösungen haben nicht funktioniert, vielleicht weil die UDEV-Rule auf myfork.sh verweist?

Ich freue mich auf Eure Ideen!

Beste Grüße
Eomer
Zuletzt geändert von Eomer am 22.04.2016 23:48:50, insgesamt 1-mal geändert.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von NAB » 18.04.2016 15:53:27

Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 20:43:48

Hi,

Ja, ich habe auch bei unix.com gepostet, aber ich habe mehr vertrauen in dieses Forum.
Danke für den Link. Der passt zwar nur äußerst grob (in meinem Fall), aber ich habe es trotzdem mal probiert.Google habe ich aber auch schon alles durch. Nichts hat funktioniert.

Ich habe eine weitere Regel angelegt, welche wie folgt lautet:

Code: Alles auswählen

BUS=="usb", ATTRS{serial}=="000000000039", KERNEL=="sd?1", NAME="%k", SYMLINK="cardreader"
Folgendes habe ich bei fstab hinzugefügt

Code: Alles auswählen

/dev/cardreader /mnt/cardreader ntfs user,noauto     0       1

Trotzdem: Nichts, das Ding mounted weiterhin in seine eigene Welt.
Zudem ist fstab eigentlich noch zu unflexibel, da ich dort ja auch ein Dateisystem festlegen muss.
Manche Kameras nutzen exfat, manche NTFS.

Normalerweise sollte sich das doch ins Script einbauen lassen, das ist mein eigentlicher Wunsch.

VG
Eomer

Hier mal das syslog.

Code: Alles auswählen

Apr 18 20:36:04 raspberrypi kernel: [ 2835.002691] usb 1-1.5: USB disconnect, device number 11
Apr 18 20:36:04 raspberrypi rsyslogd-2007: action 'action 17' suspended, next retry is Mon Apr 18 20:37:34 2016 [try http://www.rsyslog.com/e/2007 ]
Apr 18 20:36:04 raspberrypi udisksd[935]: Cleaning up mount point /media/pi/B2BA-CDBC (device 8:1 no longer exist)
Apr 18 20:36:04 raspberrypi mount.exfat: failed to write super block
Apr 18 20:36:39 raspberrypi kernel: [ 2870.316770] usb 1-1.5: new high-speed USB device number 12 using dwc_otg
Apr 18 20:36:39 raspberrypi kernel: [ 2870.420217] usb 1-1.5: New USB device found, idVendor=8564, idProduct=4000
Apr 18 20:36:39 raspberrypi kernel: [ 2870.420239] usb 1-1.5: New USB device strings: Mfr=3, Product=4, SerialNumber=5
Apr 18 20:36:39 raspberrypi kernel: [ 2870.420252] usb 1-1.5: Product: Transcend
Apr 18 20:36:39 raspberrypi kernel: [ 2870.420264] usb 1-1.5: Manufacturer: TS-RDF5
Apr 18 20:36:39 raspberrypi kernel: [ 2870.420277] usb 1-1.5: SerialNumber: 000000000039
Apr 18 20:36:39 raspberrypi kernel: [ 2870.421336] usb-storage 1-1.5:1.0: USB Mass Storage device detected
Apr 18 20:36:39 raspberrypi kernel: [ 2870.422648] scsi host6: usb-storage 1-1.5:1.0
Apr 18 20:36:39 raspberrypi mtp-probe: checking bus 1, device 12: "/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5"
Apr 18 20:36:39 raspberrypi mtp-probe: bus: 1, device: 12 was not an MTP device
Apr 18 20:36:40 raspberrypi kernel: [ 2871.418469] scsi 6:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS37 PQ: 0 ANSI: 6
Apr 18 20:36:40 raspberrypi kernel: [ 2871.419538] sd 6:0:0:0: Attached scsi generic sg0 type 0
Apr 18 20:36:41 raspberrypi kernel: [ 2871.800522] sd 6:0:0:0: [sda] 124735488 512-byte logical blocks: (63.8 GB/59.4 GiB)
Apr 18 20:36:41 raspberrypi kernel: [ 2871.801327] sd 6:0:0:0: [sda] Write Protect is off
Apr 18 20:36:41 raspberrypi kernel: [ 2871.801337] sd 6:0:0:0: [sda] Mode Sense: 23 00 00 00
Apr 18 20:36:41 raspberrypi kernel: [ 2871.802117] sd 6:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Apr 18 20:36:41 raspberrypi kernel: [ 2871.822977]  sda: sda1
Apr 18 20:36:41 raspberrypi kernel: [ 2871.825994] sd 6:0:0:0: [sda] Attached SCSI removable disk
Apr 18 20:36:44 raspberrypi ntfs-3g[2438]: Version 2014.2.15AR.2 integrated FUSE 28
Apr 18 20:36:44 raspberrypi ntfs-3g[2438]: Mounted /dev/sda1 (Read-Write, label "", NTFS 1.2)
Apr 18 20:36:44 raspberrypi ntfs-3g[2438]: Cmdline options: rw,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177,uhelper=udisks2
Apr 18 20:36:44 raspberrypi ntfs-3g[2438]: Mount options: rw,nodev,nosuid,uhelper=udisks2,allow_other,nonempty,relatime,default_permissions,fsname=/dev/sda1,blkdev,blksize=4096
Apr 18 20:36:44 raspberrypi ntfs-3g[2438]: Global ownership and permissions enforced, configuration type 7
Apr 18 20:36:44 raspberrypi udisksd[935]: Mounted /dev/sda1 at /media/pi/648637FB8637CBF4 on behalf of uid 1000
Apr 18 20:36:44 raspberrypi org.gtk.Private.UDisks2VolumeMonitor[804]: index_parse.c:191: indx_parse(): error opening /media/pi/648637FB8637CBF4/BDMV/index.bdmv
Apr 18 20:36:44 raspberrypi org.gtk.Private.UDisks2VolumeMonitor[804]: index_parse.c:191: indx_parse(): error opening /media/pi/648637FB8637CBF4/BDMV/BACKUP/index.bdmv

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 21:15:48

Die zweite Regel ist überflüssig. Ebenso der Eintrag in der fstab. Ändere die erste Regel und das Script wie angegeben:
Eomer hat geschrieben: Als erstes gibt es eine UDEV rule (50.sdcopy.rules)

Code: Alles auswählen

# Run Script as a new process when any device is added
KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/su root -c /opt/bin/myfork.sh"
Dann das Script auf das verwiesen wird (myfork.sh):

Code: Alles auswählen

#!/bin/bash
date >> myfork.log
setsid /opt/bin/goprosync.sh > setsid.log

Code: Alles auswählen

KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/su root -c /opt/bin/myfork.sh /dev/%k"

Code: Alles auswählen

#!/bin/bash
date >> myfork.log
echo "Versuche: /bin/mount $1 /media/wohinduwillst -o rw" >> myfork.log

[[ ! -z $(grep $1 /proc/mounts) ]] && exit 1
[ -d /media/wohinduwillst ] || /bin/mkdir -p /media/wohinduwillst
/bin/mount $1 /media/wohinduwillst -o rw
/bin/chmod 777 /media/wohinduwillst

setsid /opt/bin/goprosync.sh > setsid.log
Aber vorsichtig .... ohne Gewähr..... erst mal testen.... nicht einfach sofort alles durchrennen lassen... also erst mal am Anfang des grossen Scripts ein "exit 1" einfügen und mal alles sorgfältig kontrollieren, ob das gewünschte auch wirklich passiert ist.
Zuletzt geändert von TomL am 18.04.2016 21:38:28, insgesamt 1-mal geändert.

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 21:33:34

Hey,

erst einmal vielen, vielen Dank!
Es hat leider nicht funktioniert.

In der Rule ist übrigens ein Leerzeichen vor dem %k...darf das/soll das sein?

Code: Alles auswählen

.......bin/myfork.sh /dev/%k "
Hier das Syslog:

Code: Alles auswählen

Apr 18 21:32:38 raspberrypi kernel: [ 6229.043055] scsi 22:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS37 PQ: 0 ANSI: 6
Apr 18 21:32:38 raspberrypi kernel: [ 6229.052603] sd 22:0:0:0: Attached scsi generic sg0 type 0
Apr 18 21:32:38 raspberrypi kernel: [ 6229.411768] sd 22:0:0:0: [sda] 124735488 512-byte logical blocks: (63.8 GB/59.4 GiB)
Apr 18 21:32:38 raspberrypi kernel: [ 6229.412583] sd 22:0:0:0: [sda] Write Protect is off
Apr 18 21:32:38 raspberrypi kernel: [ 6229.412593] sd 22:0:0:0: [sda] Mode Sense: 23 00 00 00
Apr 18 21:32:38 raspberrypi kernel: [ 6229.413373] sd 22:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Apr 18 21:32:38 raspberrypi kernel: [ 6229.435213]  sda: sda1
Apr 18 21:32:38 raspberrypi kernel: [ 6229.441588] sd 22:0:0:0: [sda] Attached SCSI removable disk
Apr 18 21:32:38 raspberrypi systemd[1]: Starting user-0.slice.
Apr 18 21:32:38 raspberrypi systemd[1]: Created slice user-0.slice.
Apr 18 21:32:38 raspberrypi systemd[1]: Starting User Manager for UID 0...
Apr 18 21:32:38 raspberrypi systemd[1]: Starting Session c12 of user root.
Apr 18 21:32:38 raspberrypi systemd[1]: Started Session c12 of user root.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Paths.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Paths.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Timers.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Timers.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Sockets.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Sockets.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Basic System.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Basic System.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Default.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Default.
Apr 18 21:32:38 raspberrypi systemd[5908]: Startup finished in 19ms.
Apr 18 21:32:38 raspberrypi systemd[1]: Started User Manager for UID 0.
Apr 18 21:32:38 raspberrypi systemd[1]: Stopping User Manager for UID 0...
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopping Default.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopped target Default.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopping Basic System.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopped target Basic System.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopping Paths.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopped target Paths.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopping Timers.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopped target Timers.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopping Sockets.
Apr 18 21:32:38 raspberrypi systemd[5908]: Stopped target Sockets.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Shutdown.
Apr 18 21:32:38 raspberrypi systemd[5908]: Reached target Shutdown.
Apr 18 21:32:38 raspberrypi systemd[5908]: Starting Exit the Session...
Apr 18 21:32:38 raspberrypi systemd[5908]: Received SIGRTMIN+24 from PID 5938 (kill).
Apr 18 21:32:38 raspberrypi systemd[1]: Stopped User Manager for UID 0.
Apr 18 21:32:38 raspberrypi systemd[1]: Stopping user-0.slice.
Apr 18 21:32:38 raspberrypi systemd[1]: Removed slice user-0.slice.
Apr 18 21:32:39 raspberrypi ntfs-3g[5956]: Version 2014.2.15AR.2 integrated FUSE 28
Apr 18 21:32:39 raspberrypi ntfs-3g[5956]: Mounted /dev/sda1 (Read-Write, label "", NTFS 3.1)
Apr 18 21:32:39 raspberrypi ntfs-3g[5956]: Cmdline options: rw,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177,uhelper=udisks2
Apr 18 21:32:39 raspberrypi ntfs-3g[5956]: Mount options: rw,nodev,nosuid,uhelper=udisks2,allow_other,nonempty,relatime,default_permissions,fsname=/dev/sda1,blkdev,blksize=4096
Apr 18 21:32:39 raspberrypi ntfs-3g[5956]: Global ownership and permissions enforced, configuration type 7
Apr 18 21:32:39 raspberrypi udisksd[935]: Mounted /dev/sda1 at /media/pi/648637FB8637CBF4 on behalf of uid 1000
Apr 18 21:32:39 raspberrypi org.gtk.Private.UDisks2VolumeMonitor[804]: index_parse.c:191: indx_parse(): error opening /media/pi/648637FB8637CBF4/BDMV/index.bdmv
Apr 18 21:32:39 raspberrypi org.gtk.Private.UDisks2VolumeMonitor[804]: index_parse.c:191: indx_parse(): error opening /media/pi/648637FB8637CBF4/BDMV/BACKUP/index.bdmv
Hast Du noch eine andere Idee?

LG
Eomer

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 21:35:53

Zeig mal myfork.log, da müsste ja drinstehen, wie der Mount versucht wurde.

Davor war kein Leerzeichen, es war eins dahinter... sorry... hab ich korrigiert. Aber eine Auswirkung hatte das nicht.

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 21:48:07

Hey Tom,

sorry. also ich stehe gerade auf dem Schlauch glaube ich. Ich finde die myfork.log wirklich nirgendwo :(
Find spuckt nur die datei aus und zeigt mir den Pfad nicht an...

Code: Alles auswählen

root@raspberrypi:~# find / -name myfork.log
/myfork.log

LG
Eomer

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 21:51:45

Doch, er zeigt den Pfad ja an... und zwar "/".... aber dennoch, dann ändere das Script noch mal und lass sie besser nach /tmp/myfork.log erstellen

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 21:59:22

Da war aber irgendwie nichts. Komisch.

Habs auf jeden Fall geändert:

Code: Alles auswählen

Mo 18. Apr 21:58:14 CEST 2016
Versuche: /bin/mount  /media/cardreader -o rw

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 22:04:04

In dem Script kommt das Device nicht an.... aber die udev-Regel übergibt mit %k das Device. Also müsste eigentlich im Script sowas wie /dev/sdb als $1 ankommen.... tuts aber nicht.

Gibt es in den Udev-Rules noch andere Regeln, die ggf. auch dieses Script aufrufen?

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 22:07:14

Hmm...seltsam.
Ich habe mal alles kopiert. Zumindest keine Regel von mir:

Code: Alles auswählen

pi@raspberrypi:/etc/udev/rules.d $ ls -la
insgesamt 28
drwxr-xr-x 2 root root 4096 Apr 18 21:18 .
drwxr-xr-x 4 root root 4096 Apr 16 17:40 ..
-rw-r--r-- 1 root root  114 Mär 18 09:45 40-scratch.rules
-rw-r--r-- 1 root root  160 Apr 18 22:05 50-sdautocopy.rules
-rw-r--r-- 1 root root  109 Mär 31 13:25 95-ft6206.rules
-rw-r--r-- 1 root root  107 Mär 31 15:00 95-stmpe.rules
-rw-r--r-- 1 root root  983 Mär 21 14:43 99-com.rules


pi@raspberrypi:/etc/udev/rules.d $ cat 40-scratch.rules
ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0003", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"


pi@raspberrypi:/etc/udev/rules.d $ cat 50-sdautocopy.rules
# Run Script as a new process when any device is added
KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/su root -c /opt/bin/myfork.sh /dev/%k"


pi@raspberrypi:/etc/udev/rules.d $ cat 95-ft6206.rules
        SUBSYSTEM=="input", ATTRS{name}=="ft6x06_ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"


pi@raspberrypi:/etc/udev/rules.d $ cat 95-stmpe.rules
        SUBSYSTEM=="input", ATTRS{name}=="stmpe-ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"


pi@raspberrypi:/etc/udev/rules.d $ cat 99-com.rules
SUBSYSTEM=="input", GROUP="input", MODE="0660"
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"

SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
        chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
        chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
        chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
'"

KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
        ALIASES=/proc/device-tree/aliases; \
        if cmp -s $ALIASES/uart0 $ALIASES/serial0; then \
                echo 0;\
        elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then \
                echo 1; \
        else \
                exit 1; \
        fi\
'", SYMLINK+="serial%c"

KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
        ALIASES=/proc/device-tree/aliases; \
        if cmp -s $ALIASES/uart1 $ALIASES/serial0; then \
                echo 0; \
        elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then \
                echo 1; \
        else \
                exit 1; \
        fi \
'", SYMLINK+="serial%c"
pi@raspberrypi:/etc/udev/rules.d $

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 22:11:23

Nee, missverständnis... ich meinte die Datei, in der Deine Regel drinsteht. Diese Datei könnte ja mehrere, weitere Regeln enthalten.
Hast Du

Code: Alles auswählen

udevadm control --reload-rules 
ausgeführt, nachdem Du die Regel editiert und dieses /dev/%k eingefügt hast?

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 22:17:13

Ich habe vorher immer

Code: Alles auswählen

sudo service udev restart
gemacht, was ja den gleiche Effekt haben sollte.

Habe jetztmal Deins probiert, mountet leider immer noch an der falschen Stelle :/

So ging es mir letztens auch schon, ich habe echt viel ausprobiert.
Ich habe auch mal ein komplett anderes Script ausprobiert, nämlich von dieser Seite:

https://fpv-team.de/blog-aktuelles-news ... e-kopieren

UDEV war da:

Code: Alles auswählen

SUBSYSTEM=="block", ACTION=="add", RUN="/usr/local/bin/sd-autocopy"
Und das Script:

Code: Alles auswählen

{
 
USER=root #unter welchen Rechten die Dateien gespeichert werden -- SMB USER!
TARGET=/media/ssd/_upload #Zielverzeichnis eintragen
HANDLED_SERIALS=Multiple_Card_Reader_058F63666438-0:0
MOUNT=/media/cardreader #Ordner vorher erstellen
FILE_MATCH=".*\.(jpg|cr2|jpeg|pdf|mkv|avi|mp4|3gp|mpg|mov|mpeg|wma|wmv|vob|mts)$" #hier die Dateiformate eintragen
TRANSFER=cp #cp für kopieren, mv für verschieben
TIMESTAMP=$(date +%Y%m%d%H%M%S) #timestamp für Unterordner
 
# END OF CONFIGURATION ########################################################
 
# DEBUG:
# To enable debugging without udev events uncomment the lines below
#ID_SERIAL=0x000006d4
#DEVNAME=/dev/mmcblk0p1
 
# Catch unset but needed vars - terminate script
if [ -z "$ID_SERIAL" ] || [ -z "$DEVNAME" ]; then
    exit 1
fi
 
if ! echo "$HANDLED_SERIALS" | grep $ID_SERIAL >/dev/null 2>&1; then
    logger -t sd-autocopy "Card not accepted!"
    exit 1
fi
 
logger -t sd-autocopy "Karte akzeptiert. Starte Kopiervorgang..."
 
if [ ! -d "$MOUNT" ]; then
    mkdir -p "$MOUNT"
fi
 
mount $DEVNAME "$MOUNT"
 
LINES=$(find "$MOUNT" -regextype posix-egrep -iregex "$FILE_MATCH" -printf "%TY-%Tm-%Td_%p\n")
DATES=$(echo "$LINES" | cut -d_ -f1 | uniq)
 
# First create the directories when missing
for DATE in $DATES; do
    echo $DATE
    mkdir -p "$TARGET/$TIMESTAMP/$DATE"
Den Rest habe ich mal weggelassen.
Das funktionierte sogar, aber das habe ich nur auf meinem Raspi 2 probiert. Auf dem 3er nicht.

Das neue Script passt aber besser von dem was ich machen will, da es nicht bei großen Files abbricht.

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 22:24:24

Du musst die Probleme unbedingt trennen und einzeln lösen!

- Der zielgerichtete Mount ist EIN Problem, welches nichts mit irgendwelchen Folgejobs zu tun hat.
- Ein Kopierjob, der fertig-gemountete Ressourcen verwendet, hat nix mit Udev-Regeln zu tun und ist ein ZWEITES Problem.

Erst wenn das erste Problem gelöst ist und funktioniert, kümmert man sich ums zweite und den dazu passenden Job. Also vergiss jetzt erst mal irgendwelche kopiererei und Scripte, kümmere Dich nur darum, dass das Device wie gewünscht gemountet wird.

Das heisst, die Udev-Regel muss passend gemacht werden. Sobald das Script myfork.sh korrekt läuft, kann man sich um den anderen Job kümmern, aber bis dahin ist der egal.

Also, in der myfork.sh muss das Device aus der Udev-Regel ankommen.... solange das nicht passiert, vergiss deinen Kopierjob.

Und ich würde statt den Service neu zu starten doch eher

Code: Alles auswählen

udevadm control --reload-rules 
verwenden. Einfach nur aus dem Grund, weil ich weiss, dass genau das tadellos funktioniert.
Zuletzt geändert von TomL am 18.04.2016 22:27:25, insgesamt 1-mal geändert.

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 22:27:18

Hey,

zunächst einmal vielen Dank, das was Du sagst macht absolut Sinn!
Es war auch nicht meine Intention das andere Problem anzugehen, das war tatsächlich nur ein Nebensatz, den man auch hätte weglassen können.

Vielmehr wollte ich aufzeigen, dass es mit dieser UDEV-Rule anscheinend ging.
Sollte ich es in diesem Setup ausprobieren?

VG

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 22:28:33

Eomer hat geschrieben:Sollte ich es in diesem Setup ausprobieren?
Es gibt nur EIN Setup.... und zwar das, was am Ende laufen soll.... alle anderen verwirren nur und erschweren die Lösung.

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 22:32:46

Also... wenn Du aus einer Udev-Regel ein Script aufrufst, welches ein Device aus dieser Regel mounten soll, musst Du IMMER auch das Device übergeben. Weil es immer möglich ist, dass gerade auch schon andere externe Devices gemountet sind. Das Script muss also erfahren, ob es das Device sdb1 oder sdc1 oder sdx1 mounten soll.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von NAB » 18.04.2016 22:43:32

TomL hat geschrieben:

Code: Alles auswählen

KERNEL=="sd[a-z]", SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/su root -c /opt/bin/myfork.sh /dev/%k"
Ich weiß zwar auch nicht, woran es hakt, aber da Udev eh alles mit root-Rechten ausführt, würde ich das auf RUN+="/opt/bin/myfork.sh %k" zusammenstutzen. Nicht, weil ich die Lösung von TomL für falsch halte, sondern um die Regel so kurz wie möglich zu halten.

Laut manpage sollte auch ein RUN+="/opt/bin/myfork.sh $kernel" funktionieren.

Weiterhin gibt Udev eigentlich seine Umgebungsvariablen an aufgerufene Scripte weiter. Es müsste also die Variable $kernel auch direkt im Script abrufbar sein.

Ich würd alle drei Varianten durchprobieren.
Zuletzt geändert von NAB am 18.04.2016 22:54:53, insgesamt 1-mal geändert.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 22:54:32

TomL hat geschrieben:Also... wenn Du aus einer Udev-Regel ein Script aufrufst, welches ein Device aus dieser Regel mounten soll, musst Du IMMER auch das Device übergeben. Weil es immer möglich ist, dass gerade auch schon andere externe Devices gemountet sind. Das Script muss also erfahren, ob es das Device sdb1 oder sdc1 oder sdx1 mounten soll.
Vielen Dank an Euch beide. Ich kürze die Regel gleich.
Blöde Frage: Ist denn das Device überhaupt definiert?

Code: Alles auswählen

KERNEL=="sd[a-z]" 
ist doch auch sehr allgemein, oder nicht?
VG

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von NAB » 18.04.2016 23:00:27

Upps, ich hatte meinem Text noch weitere Möglichkeiten hinzugefügt.

Nein, das Device ist nicht wirklich gut definiert ... %k kann alles mögliche sein, sollte aber nicht leer sein. Darum hatte ich dir ja den ersten Link gegeben, damit du deine Udev-Regel konkreter an genau den Card-Reader anpassen kannst.

Mir ist aber auch nicht klar, wie dein Card-Reader funktioniert. Der kann ja z.B. leer sein. Dann müsste trotzdem beim Einstecken ein Device angelegt werden, aber eben keine Partitionen. Beim Einstecken einer Karte müsste dann eine oder mehrere Partitionen angelegt werden. Hier ist das genauer beschrieben:
http://www.reactivated.net/writing_udev ... cardreader
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 23:04:53

Nab hat Recht... das mit "su" ist natürlich Quatsch... ich habe das gesehen, aber nicht als schädlich erachtet. Aber ist wirklich besser, dass einfach zu entfernen.

$kernel ist das gleiche wie %k, da würde ich nichts ändern
Aber

Code: Alles auswählen

KERNEL=="sd[a-z]"
würde ich durch

Code: Alles auswählen

KERNEL=="sd??"
ersetzen.

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 23:21:30

Okay, leider nach wie vor nichts. Er mountet je nachdem wie die Partition benannt ist.
Wäre denn die Seriennummer nicht ein eindeutiges Merkmal?

Das ist der Vorschlag aus dem Link von NAB.

Code: Alles auswählen

KERNEL="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 CompactFlash Reader", SYMLINK+="cfrdr%n", OPTIONS+="all_partitions"
Die Information "Model" habe ich.

Code: Alles auswählen

KERNEL="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="SD  Transcend   ", SYMLINK+="cfrdr%n", OPTIONS+="all_partitions", RUN+="/bin/su root -c /opt/bin/myfork.sh /dev/%k"
So sollte es dann ja aussehen, oder?

Oder vielleicht mit der:

Code: Alles auswählen

ATTRS{serial}=="000000000039"
Statt "model". Das ist mir mit den Leerzeichen etwas suspekt.
So könnte es dann ja aussehen
Nur was würde man weiter damit machen?

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von NAB » 18.04.2016 23:38:37

Doch, doch, das sieht gut aus ... es müsste nur funktionieren! Tut es das?

Das mit dem model sieht richtig aus ... die Bezeichnungen haben wirklich so dämlich viele Leerzeichen im Namen.

Du kannst auch auf zwei Attribute matchen ... ATTRS{model} und ATTRS{serial} ... je genauer, desto besser. Nur ... es muss funktionieren. Udev ist da ein Biest.

Das Spannendste ist das SYMLINK+ ... egal wie auch immer das Ding heißt, du findest die erste Partition nachher unter /dev/cfrdr1. Damit sparen wir uns diese Parameterübergabe, die komischer Weise nicht klappt.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

TomL

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von TomL » 18.04.2016 23:41:03

Ich finde nicht, dass das gut aussieht.... das muss mehr aufs eindeutige reduziert werden. Ich würde das mal so testen:

Code: Alles auswählen

ACTION=="add", KERNEL=="sd??", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="000000000039", RUN+="/bin/bash /opt/bin/myfork.sh /dev/%k"
Nach der Änderung nicht

Code: Alles auswählen

udevadm control --reload-rules 
vergessen.

Eomer
Beiträge: 63
Registriert: 27.04.2012 23:24:51

Re: [SHELL] Festen Mount point für USB cardreader

Beitrag von Eomer » 18.04.2016 23:46:53

Vielen Dank. Ich habe es mal so gemacht:

Code: Alles auswählen

ACTION=="add", KERNEL=="sd??", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="000000000039", RUN+="/bin/bash /opt/bin/myfork.sh /dev/%k"
Das neuladen mit Deinem Befehl mache ich natürlich nach jeder Änderung :)
Bisher nichts. Mountet fröhlich wohin er will.

Muss ich denn hieran (myfork.sh) ewas ändern, oder spielt es für unseren Test keine Rolle?

Code: Alles auswählen

#!/bin/bash
date >> /tmp/myfork.log
echo "Versuche: /bin/mount $1 /media/cardreader -o rw" >> /tmp/myfork.log

[[ ! -z $(grep $1 /proc/mounts) ]] && exit 1
[ -d /media/cardreader] || /bin/mkdir -p /media/cardreader
/bin/mount $1 /media/cardreader-o rw
/bin/chmod 777 /media/cardreader

setsid /opt/bin/copyscript.sh > setsid.log

LG

Antworten