[erledigt] Festen Mount point für USB cardreader

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
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 » 21.04.2016 16:38:30

Eomer hat geschrieben:@NAB: Wie soll ich denn mit dem Fehler umgehen, soll ich da mal im Forum etwas posten?
Ich hab ehrlich gesagt keine Ahnung, wie man mit einem Fehler in Raspbian mit Fremdkernel umgeht. Hinzu kommt, dass du der einzige zu sein scheinst, der diesen Fehler hat ... sonst würde Google ja noch irgendwas ausspucken. Da fragt sich, was du anders machst ... und da hab ich den leisen Verdacht, dass das udevadm aus TomLs Script den Fehler auslöst (das bedeutet nicht, dass TomL was falsch macht, es wäre dann immer noch ein Fehler in einem Kernel-Modul). Das könnte man mal testen, dann hätte man wenigstens eine Aussage wie "Hallo, wenn ich "udevadm xyz" auf eurem Kernel ausführe, dann schmeißt er folgenden Fehler: ..."

Aber wie gesagt, bisher haben wir keine Anzeichen, dass diese Fehlermeldung irgendwelche negativen Konsequenzen hat. Also keine Panik und behalt die Sache im Auge :-)
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 » 21.04.2016 17:04:29

Eomer hat geschrieben:Wenn es nicht zuviel verlangt ist, wäre exfat fast noch wichtiger, da meine Haupt-Kamera alles in exfat formatiert.
Habs schon fertig. Bevor ich es aber update, will ich nachher noch mal eben alle Formate durchtesten... dauert also noch ein wenig.... ich melde mich.... :roll:

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 » 21.04.2016 17:26:01

Ach so, Eomer, zum Debuggen dieses Kernelfehlers (und nur dafür!) kannst du mal sämtliche neuen Udev-Regeln deaktivieren (ich glaub, das machst du am leichtesten, indem du die Datei kurz aus dem Weg schiebst) und dann deine Karten mal durchprobierst (es könnte vom Dateisystem abhängig sein). Dabei sollte dein Automounter dann wieder zuschlagen. Wenn du im dmesg dabei einen ähnlichen Fehler entdeckt, dann hast du schon mal was, was leicht nachzuvollziehen ist und was du an die Entwickler deines Kernels melden kannst.

Falls du dabei nichts siehst, probier mal aus, ob du den Fehler mit einem dieser Befehle provozieren kannst:

Code: Alles auswählen

sudo udevadm info --query=symlink --attribute-walk --name=/dev/sda1
sudo udevadm info /dev/sda1
(sda1 müsste hinkommen, das war es bei dir bisher immer, sonst sdb1 probieren)

Danach bitte unbedingt die Udev-Regeln wieder herstellen wie vorher, sonst haben wir hier ein riesen Chaos!
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 » 21.04.2016 21:13:30

Hey,

hier mal die Log-Datei:

Code: Alles auswählen

[  314.324479] usb 1-1.5: new high-speed USB device number 5 using dwc_otg
[  314.427589] usb 1-1.5: New USB device found, idVendor=8564, idProduct=4000
[  314.427608] usb 1-1.5: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[  314.427621] usb 1-1.5: Product: Transcend
[  314.427634] usb 1-1.5: Manufacturer: TS-RDF5
[  314.427646] usb 1-1.5: SerialNumber: 000000000039
[  314.428723] usb-storage 1-1.5:1.0: USB Mass Storage device detected
[  314.429049] scsi host0: usb-storage 1-1.5:1.0
[  315.426167] scsi 0:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS37 PQ: 0 ANSI: 6
[  315.442932] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  315.702822] sd 0:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
[  315.703579] sd 0:0:0:0: [sda] Write Protect is off
[  315.703589] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
[  315.704330] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[  315.710674]  sda: sda1
[  315.713529] sd 0:0:0:0: [sda] Attached SCSI removable disk
pi@raspberrypi:~ $ udevadm control --reload-rules

Mit dem ersten Befehl (Stick war eingesteckt)

Code: Alles auswählen

[  426.327856] dwc_otg 3f980000.usb: Invalid offset (0xffffffff)
[  426.327972] hsic_connect_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.328099] guid_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.328210] mode_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.328319] srpcapable_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.328428] Core Global Registers
[  426.328434] GOTGCTL   @0xF3980000 : 0x001C0001
[  426.328439] GOTGINT   @0xF3980004 : 0x00000000
[  426.328444] GAHBCFG   @0xF3980008 : 0x00000031
[  426.328449] GUSBCFG   @0xF398000C : 0x20001700
[  426.328454] GRSTCTL   @0xF3980010 : 0x80000000
[  426.328458] GINTSTS   @0xF3980014 : 0x04000021
[  426.328463] GINTMSK   @0xF3980018 : 0xF301080E
[  426.328468] GRXSTSR   @0xF398001C : 0x000F0006
[  426.328472] GRXFSIZ   @0xF3980024 : 0x00000306
[  426.328477] GNPTXFSIZ @0xF3980028 : 0x01000306
[  426.328482] GNPTXSTS  @0xF398002C : 0x38080100
[  426.328486] GI2CCTL   @0xF3980030 : 0x00000000
[  426.328491] GPVNDCTL  @0xF3980034 : 0x00000000
[  426.328496] GGPIO     @0xF3980038 : 0x00000000
[  426.328501] GUID              @0xF398003C : 0x2708A000
[  426.328505] GSNPSID   @0xF3980040 : 0x4F54280A
[  426.328510] GHWCFG1   @0xF3980044 : 0x00000000
[  426.328514] GHWCFG2   @0xF3980048 : 0x228DDD50
[  426.328519] GHWCFG3   @0xF398004C : 0x0FF000E8
[  426.328524] GHWCFG4   @0xF3980050 : 0x1FF00020
[  426.328528] GLPMCFG   @0xF3980054 : 0x75736230
[  426.328533] GPWRDN    @0xF3980058 : 0x00000000
[  426.328538] GDFIFOCFG         @0xF398005C : 0x00000000
[  426.328543] ADPCTL    @0xF3980060 : 0x00000000
[  426.328547] HPTXFSIZ  @0xF3980100 : 0x02000406
[  426.328553] DIENPTXF[1] @0xF3980104 : 0x02000406
[  426.328558] DIENPTXF[2] @0xF3980108 : 0x02000406
[  426.328563] DIENPTXF[3] @0xF398010C : 0x02000406
[  426.328568] DIENPTXF[4] @0xF3980110 : 0x02000406
[  426.328573] DIENPTXF[5] @0xF3980114 : 0x02000406
[  426.328578] DIENPTXF[6] @0xF3980118 : 0x02000406
[  426.328583] DIENPTXF[7] @0xF398011C : 0x02000406
[  426.328588] PCGCCTL   @0xF3980E00 : 0x00000000
[  426.328592] Host Global Registers
[  426.328597] HCFG              @0xF3980400 : 0x00000000
[  426.328602] HFIR              @0xF3980404 : 0x00001D4C
[  426.328607] HFNUM     @0xF3980408 : 0x078830D1
[  426.328611] HPTXSTS   @0xF3980410 : 0x35080200
[  426.328616] HAINT     @0xF3980414 : 0x00000000
[  426.328620] HAINTMSK  @0xF3980418 : 0x00000000
[  426.328625] HPRT0     @0xF3980440 : 0x00001005
[  426.328629] Host Channel 0 Specific Registers
[  426.328634] HCCHAR    @0xF3980500 : 0x20DC9810
[  426.328639] HCSPLT    @0xF3980504 : 0x00000000
[  426.328643] HCINT     @0xF3980508 : 0x00000000
[  426.328648] HCINTMSK  @0xF398050C : 0x00000000
[  426.328653] HCTSIZ    @0xF3980510 : 0x80080010
[  426.328657] HCDMA     @0xF3980514 : 0xF9755200
[  426.328661] Host Channel 1 Specific Registers
[  426.328666] HCCHAR    @0xF3980520 : 0x013E9008
[  426.328670] HCSPLT    @0xF3980524 : 0x8001C102
[  426.328675] HCINT     @0xF3980528 : 0x00000000
[  426.328679] HCINTMSK  @0xF398052C : 0x00000000
[  426.328684] HCTSIZ    @0xF3980530 : 0x00080008
[  426.328688] HCDMA     @0xF3980534 : 0xFA814468
[  426.328693] Host Channel 2 Specific Registers
[  426.328697] HCCHAR    @0xF3980540 : 0x013E9008
[  426.328702] HCSPLT    @0xF3980544 : 0x8001C102
[  426.328706] HCINT     @0xF3980548 : 0x00000000
[  426.328711] HCINTMSK  @0xF398054C : 0x00000000
[  426.328715] HCTSIZ    @0xF3980550 : 0x00080008
[  426.328720] HCDMA     @0xF3980554 : 0xFA8148D0
[  426.328724] Host Channel 3 Specific Registers
[  426.328728] HCCHAR    @0xF3980560 : 0x20DC9810
[  426.328733] HCSPLT    @0xF3980564 : 0x00000000
[  426.328737] HCINT     @0xF3980568 : 0x00000000
[  426.328742] HCINTMSK  @0xF398056C : 0x00000000
[  426.328746] HCTSIZ    @0xF3980570 : 0x80080010
[  426.328751] HCDMA     @0xF3980574 : 0xF9755200
[  426.328755] Host Channel 4 Specific Registers
[  426.328759] HCCHAR    @0xF3980580 : 0x20DC9810
[  426.328764] HCSPLT    @0xF3980584 : 0x00000000
[  426.328768] HCINT     @0xF3980588 : 0x00000000
[  426.328773] HCINTMSK  @0xF398058C : 0x00000000
[  426.328777] HCTSIZ    @0xF3980590 : 0x80080010
[  426.328782] HCDMA     @0xF3980594 : 0xF9755200
[  426.328786] Host Channel 5 Specific Registers
[  426.328790] HCCHAR    @0xF39805A0 : 0x013E8808
[  426.328795] HCSPLT    @0xF39805A4 : 0x8001C102
[  426.328800] HCINT     @0xF39805A8 : 0x00000000
[  426.328804] HCINTMSK  @0xF39805AC : 0x00000000
[  426.328809] HCTSIZ    @0xF39805B0 : 0x00080008
[  426.328813] HCDMA     @0xF39805B4 : 0xFA815608
[  426.328817] Host Channel 6 Specific Registers
[  426.328822] HCCHAR    @0xF39805C0 : 0x013E8808
[  426.328826] HCSPLT    @0xF39805C4 : 0x8001C102
[  426.328831] HCINT     @0xF39805C8 : 0x00000000
[  426.328835] HCINTMSK  @0xF39805CC : 0x00000000
[  426.328840] HCTSIZ    @0xF39805D0 : 0x00080008
[  426.328844] HCDMA     @0xF39805D4 : 0xFA815A70
[  426.328848] Host Channel 7 Specific Registers
[  426.328853] HCCHAR    @0xF39805E0 : 0x013E8808
[  426.328857] HCSPLT    @0xF39805E4 : 0x8001C102
[  426.328862] HCINT     @0xF39805E8 : 0x00000000
[  426.328866] HCINTMSK  @0xF39805EC : 0x00000000
[  426.328871] HCTSIZ    @0xF39805F0 : 0x00080008
[  426.328875] HCDMA     @0xF39805F4 : 0xFA815ED8
[  426.329059] gpvndctl_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.329189] ggpio_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.329311] hprt0_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.329553] HZ 100, MSEC_PER_JIFFIE 10, loops_per_jiffy 384000
[  426.674571] gnptxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.674646] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[  426.674693] busconnected_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.674802] gotgctl_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.674925] grxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.674985] gsnpsid_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.675045] gusbcfg_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.675105] hptxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.675165] devspeed_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.675177] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[  426.675281] Core is not in hibernation
[  426.675442] hnpcapable_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  426.675503] HZ 100, MSEC_PER_JIFFIE 10, loops_per_jiffy 384000
[  427.602418] enumspeed_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[  427.602439] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[  427.602488] inv_sel_hsic_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80

Und das nach dem "sudo udevadm info /dev/sda1" (musste aus- und wieder einstecken, sind also nur die normalen "einsteck-meldungen".
Nachem ich den ersten Befehl ausgeführt, den Stick drin gelassen und den zweiten direkt hinterhergejagt habe, gab es nämlich keine neuen Einträge)

Code: Alles auswählen

[  534.021975] usb 1-1.5: USB disconnect, device number 5
[  537.836773] usb 1-1.5: new high-speed USB device number 6 using dwc_otg
[  537.939944] usb 1-1.5: New USB device found, idVendor=8564, idProduct=4000
[  537.939963] usb 1-1.5: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[  537.939976] usb 1-1.5: Product: Transcend
[  537.939988] usb 1-1.5: Manufacturer: TS-RDF5
[  537.940001] usb 1-1.5: SerialNumber: 000000000039
[  537.941138] usb-storage 1-1.5:1.0: USB Mass Storage device detected
[  537.942054] scsi host1: usb-storage 1-1.5:1.0
[  538.938396] scsi 1:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS37 PQ: 0 ANSI: 6
[  538.939540] sd 1:0:0:0: Attached scsi generic sg0 type 0
[  539.215273] sd 1:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
[  539.216031] sd 1:0:0:0: [sda] Write Protect is off
[  539.216041] sd 1:0:0:0: [sda] Mode Sense: 23 00 00 00
[  539.218064] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[  539.222654]  sda: sda1
[  539.227840] sd 1:0:0:0: [sda] Attached SCSI removable disk
pi@raspberrypi:~ $

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 » 21.04.2016 21:49:42

Also durch "udevadm info --query=symlink --attribute-walk --name=/dev/sda1" kannst du so eine Fehlermeldung produzieren? Beim normalen einstecken passiert hingegen nichts?

Dann haben wir doch den Auslöser ... das sieht sehr verdächtig nach diesem Fehler aus:
https://github.com/raspberrypi/firmware/issues/21
Und hier steht, er sei behoben:
https://bugs.launchpad.net/raspbian/+bug/1031674
seit Ende 2013.

Allerdings ist da von einem "Crash" die Rede und der Pi reagiert danach nicht mehr. Bei dir hingegen wirkt die Sache harmlos ... es läuft ja alles.

Das kannst du so schon mal an den Herausgeber deines Kernels weitergeben ... der müsste dann zumindest wissen, wo er suchen muss. Interessant wäre vielleicht noch, ob dieser Fehler nur bei dem einen Cardreader auftritt oder auch bei anderen USB-Sticks.
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 » 21.04.2016 22:00:00

NAB hat geschrieben:Also durch "udevadm info --query=symlink --attribute-walk --name=/dev/sda1" kannst du so eine Fehlermeldung produzieren? Beim normalen einstecken passiert hingegen nichts?

Dann haben wir doch den Auslöser ... das sieht sehr verdächtig nach diesem Fehler aus:
https://github.com/raspberrypi/firmware/issues/21
Und hier steht, er sei behoben:
https://bugs.launchpad.net/raspbian/+bug/1031674
seit Ende 2013.

Allerdings ist da von einem "Crash" die Rede und der Pi reagiert danach nicht mehr. Bei dir hingegen wirkt die Sache harmlos ... es läuft ja alles.

Das kannst du so schon mal an den Herausgeber deines Kernels weitergeben ... der müsste dann zumindest wissen, wo er suchen muss. Interessant wäre vielleicht noch, ob dieser Fehler nur bei dem einen Cardreader auftritt oder auch bei anderen USB-Sticks.


Hab es im Forum gepostet. Kannst ja gerne schauen ob das so richtig wiedergegeben ist: https://forums.adafruit.com/viewtopic.php?f=47&t=94972
Hier mal der Fehler mit einem normalen USB-Stick:

Code: Alles auswählen

[ 3125.064770] dwc_otg 3f980000.usb: Invalid offset (0xffffffff)
[ 3125.064891] hsic_connect_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.065005] guid_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.065116] mode_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.065228] srpcapable_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.065337] Core Global Registers
[ 3125.065349] GOTGCTL   @0xF3980000 : 0x001C0001
[ 3125.065359] GOTGINT   @0xF3980004 : 0x00000000
[ 3125.065368] GAHBCFG   @0xF3980008 : 0x00000031
[ 3125.065378] GUSBCFG   @0xF398000C : 0x20001700
[ 3125.065387] GRSTCTL   @0xF3980010 : 0x80000000
[ 3125.065396] GINTSTS   @0xF3980014 : 0x04000021
[ 3125.065406] GINTMSK   @0xF3980018 : 0xF301080E
[ 3125.065415] GRXSTSR   @0xF398001C : 0x000F0001
[ 3125.065424] GRXFSIZ   @0xF3980024 : 0x00000306
[ 3125.065433] GNPTXFSIZ @0xF3980028 : 0x01000306
[ 3125.065442] GNPTXSTS  @0xF398002C : 0x30080100
[ 3125.065451] GI2CCTL   @0xF3980030 : 0x00000000
[ 3125.065460] GPVNDCTL  @0xF3980034 : 0x00000000
[ 3125.065469] GGPIO     @0xF3980038 : 0x00000000
[ 3125.065479] GUID              @0xF398003C : 0x2708A000
[ 3125.065488] GSNPSID   @0xF3980040 : 0x4F54280A
[ 3125.065497] GHWCFG1   @0xF3980044 : 0x00000000
[ 3125.065506] GHWCFG2   @0xF3980048 : 0x228DDD50
[ 3125.065515] GHWCFG3   @0xF398004C : 0x0FF000E8
[ 3125.065524] GHWCFG4   @0xF3980050 : 0x1FF00020
[ 3125.065533] GLPMCFG   @0xF3980054 : 0x75736230
[ 3125.065542] GPWRDN    @0xF3980058 : 0x00000000
[ 3125.065551] GDFIFOCFG         @0xF398005C : 0x00000000
[ 3125.065561] ADPCTL    @0xF3980060 : 0x00000000
[ 3125.065570] HPTXFSIZ  @0xF3980100 : 0x02000406
[ 3125.065581] DIENPTXF[1] @0xF3980104 : 0x02000406
[ 3125.065591] DIENPTXF[2] @0xF3980108 : 0x02000406
[ 3125.065602] DIENPTXF[3] @0xF398010C : 0x02000406
[ 3125.065612] DIENPTXF[4] @0xF3980110 : 0x02000406
[ 3125.065622] DIENPTXF[5] @0xF3980114 : 0x02000406
[ 3125.065632] DIENPTXF[6] @0xF3980118 : 0x02000406
[ 3125.065642] DIENPTXF[7] @0xF398011C : 0x02000406
[ 3125.065650] PCGCCTL   @0xF3980E00 : 0x00000000
[ 3125.065659] Host Global Registers
[ 3125.065668] HCFG              @0xF3980400 : 0x00000000
[ 3125.065677] HFIR              @0xF3980404 : 0x00001D4C
[ 3125.065687] HFNUM     @0xF3980408 : 0x1C40151C
[ 3125.065696] HPTXSTS   @0xF3980410 : 0x0D080200
[ 3125.065705] HAINT     @0xF3980414 : 0x00000000
[ 3125.065714] HAINTMSK  @0xF3980418 : 0x00000001
[ 3125.065723] HPRT0     @0xF3980440 : 0x00001005
[ 3125.065732] Host Channel 0 Specific Registers
[ 3125.065741] HCCHAR    @0xF3980500 : 0xA0DC9810
[ 3125.065750] HCSPLT    @0xF3980504 : 0x00000000
[ 3125.065759] HCINT     @0xF3980508 : 0x00000000
[ 3125.065768] HCINTMSK  @0xF398050C : 0x00000006
[ 3125.065777] HCTSIZ    @0xF3980510 : 0x00080010
[ 3125.065786] HCDMA     @0xF3980514 : 0xF9755200
[ 3125.065794] Host Channel 1 Specific Registers
[ 3125.065803] HCCHAR    @0xF3980520 : 0x013E8808
[ 3125.065812] HCSPLT    @0xF3980524 : 0x8001C102
[ 3125.065821] HCINT     @0xF3980528 : 0x00000000
[ 3125.065830] HCINTMSK  @0xF398052C : 0x00000000
[ 3125.065839] HCTSIZ    @0xF3980530 : 0x00080008
[ 3125.065848] HCDMA     @0xF3980534 : 0xFA814468
[ 3125.065856] Host Channel 2 Specific Registers
[ 3125.065865] HCCHAR    @0xF3980540 : 0x013E8808
[ 3125.065874] HCSPLT    @0xF3980544 : 0x8001C102
[ 3125.065883] HCINT     @0xF3980548 : 0x00000000
[ 3125.065892] HCINTMSK  @0xF398054C : 0x00000000
[ 3125.065901] HCTSIZ    @0xF3980550 : 0x00080008
[ 3125.065910] HCDMA     @0xF3980554 : 0xFA8148D0
[ 3125.065918] Host Channel 3 Specific Registers
[ 3125.065927] HCCHAR    @0xF3980560 : 0x013E9008
[ 3125.065936] HCSPLT    @0xF3980564 : 0x8001C102
[ 3125.065945] HCINT     @0xF3980568 : 0x00000000
[ 3125.065954] HCINTMSK  @0xF398056C : 0x00000000
[ 3125.065963] HCTSIZ    @0xF3980570 : 0x00080008
[ 3125.065972] HCDMA     @0xF3980574 : 0xFA814D38
[ 3125.065980] Host Channel 4 Specific Registers
[ 3125.065989] HCCHAR    @0xF3980580 : 0x013E9008
[ 3125.065998] HCSPLT    @0xF3980584 : 0x8001C102
[ 3125.066006] HCINT     @0xF3980588 : 0x00000000
[ 3125.066015] HCINTMSK  @0xF398058C : 0x00000000
[ 3125.066024] HCTSIZ    @0xF3980590 : 0x00080008
[ 3125.066033] HCDMA     @0xF3980594 : 0xFA8151A0
[ 3125.066041] Host Channel 5 Specific Registers
[ 3125.066050] HCCHAR    @0xF39805A0 : 0x20DC9810
[ 3125.066059] HCSPLT    @0xF39805A4 : 0x00000000
[ 3125.066068] HCINT     @0xF39805A8 : 0x00000000
[ 3125.066077] HCINTMSK  @0xF39805AC : 0x00000000
[ 3125.066086] HCTSIZ    @0xF39805B0 : 0x80080010
[ 3125.066095] HCDMA     @0xF39805B4 : 0xF9755200
[ 3125.066103] Host Channel 6 Specific Registers
[ 3125.066112] HCCHAR    @0xF39805C0 : 0x013E8808
[ 3125.066121] HCSPLT    @0xF39805C4 : 0x8001C102
[ 3125.066130] HCINT     @0xF39805C8 : 0x00000000
[ 3125.066139] HCINTMSK  @0xF39805CC : 0x00000000
[ 3125.066148] HCTSIZ    @0xF39805D0 : 0x00080008
[ 3125.066157] HCDMA     @0xF39805D4 : 0xFA815A70
[ 3125.066165] Host Channel 7 Specific Registers
[ 3125.066174] HCCHAR    @0xF39805E0 : 0x20DC9810
[ 3125.066183] HCSPLT    @0xF39805E4 : 0x00000000
[ 3125.066191] HCINT     @0xF39805E8 : 0x00000000
[ 3125.066200] HCINTMSK  @0xF39805EC : 0x00000000
[ 3125.066209] HCTSIZ    @0xF39805F0 : 0x80080010
[ 3125.066218] HCDMA     @0xF39805F4 : 0xF9755200
[ 3125.066338] gpvndctl_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.066452] ggpio_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.066567] hprt0_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.066682] HZ 100, MSEC_PER_JIFFIE 10, loops_per_jiffy 192000
[ 3125.448102] gnptxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448178] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[ 3125.448234] busconnected_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448345] gotgctl_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448474] grxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448536] gsnpsid_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448596] gusbcfg_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448655] hptxfsiz_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448716] devspeed_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.448730] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[ 3125.448828] Core is not in hibernation
[ 3125.448991] hnpcapable_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3125.449051] HZ 100, MSEC_PER_JIFFIE 10, loops_per_jiffy 384000
[ 3126.370060] enumspeed_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80
[ 3126.370079] WARN::dwc_otg_handle_mode_mismatch_intr:68: Mode Mismatch Interrupt: currently in Host mode

[ 3126.370126] inv_sel_hsic_show(b9593810) -> platform_dev b9593800, otg_dev b974bb80

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 » 21.04.2016 22:07:29

Eomer hat geschrieben:Kannst ja gerne schauen ob das so richtig wiedergegeben ist
Fast ... die Info, dass der Pi bei dir eben nicht einfriert wär noch hilfreich (und macht die Sache deutlich weniger dramatisch - wir haben ja bisher keine Fehlfunktion gefunden).
Eomer hat geschrieben:Hier mal der Fehler mit einem normalen USB-Stick:
Gut! Das macht es für andere deutlich leichter nachvollziehbar.
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 » 21.04.2016 22:08:57

:( Ich kriegs nicht hin..... :roll: ... so ein Mist. Ich habe zunächst noch ein paar Fehler behoben und festgestellt, nach der Gartenarbeit ist nicht gut programmieren... mit ein wenig Erschöpfung passiert doch so einiges, was man nicht möchte.....

Aber ich kriegs nicht mit ntfs hin und ich habe keine Ahnung warum. Starte ich das Script von Hand, wird der ntfs-Stick astrein gemountet.

Code: Alles auswählen

usbmount add /dev/sdb1
Mit

Code: Alles auswählen

usbmount remove /dev/sdb1
wird er fehlerlos unmountet. Aber sobald ich es via udev-Rule beim Event "Plug-In" machen lasse, gibts Probleme. Zuerst fragt mich der Filemanager "anzeigen" und wenn ich das bestätige, wird das Fenster geöffnet, der Einhalt des Sticks angezeigt und dann wars das. Der nächste Klick aufs Laufwerk bringt "ungültiges Laufwerk und mit "df" wird diese Meldung angezeigt:

Code: Alles auswählen

df: „/media/sdb1“: Der Socket ist nicht verbunden
Starte ich dann das Script wieder manuell, erst mit remove und dann mit add, ist alles korrek.

Ich habe das Script noch mal im Posting ausgetauscht und hoffe, jemand hat ne Idee für dieses Phänomen.
@eomer, tritt bei Dir dieser Fehler auch auf oder wird der NTFS-Stick ordentlich gemountet?

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

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

Beitrag von Eomer » 21.04.2016 22:16:31

@NAB: Guter Hinweis, Danke! Hab meinen Beitrag abgeändert und die Info nachgeliefert!


Jepp, er sagt beim öffnen über den Filemanager schon:
The specified directory '/media/cardreader' is not valid

Code: Alles auswählen

pi@raspberrypi:/etc/udev/rules.d $ df
df: ‘/media/cardreader’: Transport endpoint is not connected
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       30553108 3938284  25318008  14% /
devtmpfs          469744       0    469744   0% /dev
tmpfs             474052       0    474052   0% /dev/shm
tmpfs             474052    6472    467580   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474052       0    474052   0% /sys/fs/cgroup
/dev/mmcblk0p1     61384   21080     40304  35% /boot
tmpfs              94812       0     94812   0% /run/user/1000
Normal umount macht er bei mir auch.

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 » 21.04.2016 22:26:05

TomL, probiere mal diese Zeile:

Code: Alles auswählen

/bin/mount $Device $MountTo -t ntfs  -o user,ro
Ist der Mount damit beständig?
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 » 21.04.2016 22:29:25

NAB hat geschrieben:TomL, probiere mal diese Zeile:

Code: Alles auswählen

/bin/mount $Device $MountTo -t ntfs  -o user,ro
Ist der Mount damit beständig?
Hab es probiert. Gleicher Fehler

Ist das auch der Fehler?
https://bugs.debian.org/cgi-bin/bugrepo ... bug=774149


scheint ein Problem mit NTFS zu sein. Und hier die Lösung (die auch wieder aufwändig aussieht :( )
https://bugs.debian.org/cgi-bin/bugrepo ... 774149#177

Code: Alles auswählen

pi@raspberrypi:/etc/udev/rules.d $ df -h
df: ‘/media/cardreader’: Transport endpoint is not connected
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        30G  3.8G   25G  14% /
devtmpfs        459M     0  459M   0% /dev
tmpfs           463M     0  463M   0% /dev/shm
tmpfs           463M  6.4M  457M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   21M   40M  35% /boot
tmpfs            93M     0   93M   0% /run/user/1000

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 » 21.04.2016 22:51:20

Eomer hat geschrieben:Hab es probiert. Gleicher Fehler
Das war nicht die Antwort, die ich hören wollte. Dieses "Transport endpoint is not connected" kommt von fuse, und "ntfs" sollte eigentlich ohne Fuse auskommen. Also benutzt er bei "ntfs" jetzt wohl auch ntfs-3g :cry:

Steht in den Logs irgendwas von so einem "systemd-udevd timeout"?
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 » 21.04.2016 22:55:01

NAB hat geschrieben:
Eomer hat geschrieben:Hab es probiert. Gleicher Fehler
Das war nicht die Antwort, die ich hören wollte. Dieses "Transport endpoint is not connected" kommt von fuse, und "ntfs" sollte eigentlich ohne Fuse auskommen. Also benutzt er bei "ntfs" jetzt wohl auch ntfs-3g :cry:

Steht in den Logs irgendwas von so einem "systemd-udevd timeout"?

Hier mal das dmesg
Von udev sehe ich nichts


EDIT: Gelöscht, da irrelevant und es macht alles unübersichtlich.
Zuletzt geändert von Eomer am 21.04.2016 23:20:56, 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 » 21.04.2016 23:16:53

Nein, das ist das Kernel-Log, da schreibt Systemd nicht rein. Ich meinte Meldungen wie die hier:
Apr 19 19:45:54 raspberrypi systemd-udevd[3297]: timeout: killing '/bin/bash /opt/bin/myfork.sh /dev/sda1' [3325]
die journalctl anzeigt.

Aber wie auch immer, TomL, du bist jetzt hier rein gerasselt:
https://wiki.archlinux.org/index.php/Ud ... udev_rules
Vielleicht glaubst du mir endlich, dass dein Udev-Gescripte Mist ist ... du sollst die Software von Poettering genau so benutzen, wie er es voraussieht, also tu das doch einfach.

Das sieht hier so herrlich einfach aus:
https://technik.blogbasis.net/arch-auto ... 09-10-2015
Never change a broken system. It could be worse afterwards.

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

TomL

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

Beitrag von TomL » 22.04.2016 11:01:24

NAB hat geschrieben: Vielleicht glaubst du mir endlich, dass dein Udev-Gescripte Mist ist ...
Offensichtlich hast du den Sinn des Scriptes gar nicht verstanden. Der Sinn des Scriptes ist es, Devices unter ihrem Device-Namen zu mounten und zu verhindern, dass der Automouter das unter irgendwelchen phantasienamen tut. Und genau DAS macht es perfek als Udev-Mount-Wrapper.

Es war nie dazu konzipiert Child-Jobs zu starten oder Fuse-FS zu handeln... genau die beiden Fälle, die udev durch killen der Jobs unmöglich macht, wenn der Event-Handler fertig ist. Das bedeutet aber nicht, dass das Script Mist ist, sondern nur, dass man es nicht als udev-wrapper startet, sondern als Systemd-Service.

Der einzige Grund, warum das nicht längst gelöst ist, ist das Wetter und die Chefin, die mich zu Zwangsarbeit im Garten und am Haus verdonnert hat. *lol*

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

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

Beitrag von rendegast » 22.04.2016 17:40:53

Warum nicht einfach udev-Regeln und offensichtlich problematische Mountpoints in /media/ weglassen?
-> ein separates Arbeitsverzeichnis zBsp. /mymounts/

Einfaches Feststellen eines Mountpoints

Code: Alles auswählen

MYDEV=$(/sbin/blkid -o device -L Label)
[ "x$MYDEV" = "x" ] || { echo $MYDEV; script $MYDEV; }
ausbaubar,
zBsp. ob Label auch nur einmal auftritt
zBsp. wenn ein ganzer Satz von Backup-Datenträgern mit demselben Label Verwendung findet.

Oder mit dem (gut kontrollierbaren) Automounter Debianautofs,
wäre es ein einfacher Test

Code: Alles auswählen

ls /mymounts/mountgruppe/mountpoint/lock-datei >/dev/null 2>&1 || exit 0
.... mache weiter ....
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

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

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

Beitrag von Eomer » 22.04.2016 21:25:58

Mir war eben ein wenig langweilig und ich habe etwas rumprobiert und bin auf Eure Meinung gespannt.

Ein großer Teil der Lösung kam von NAB.

So sieht die UDEV-Rule aus:

Code: Alles auswählen

ACTION=="add",  SUBSYSTEM=="block", ENV{ID_VENDOR_ID}="8564", ENV{ID_MODEL_ID}="4000", ENV{ID_SERIAL_SHORT}=="000000000039",  KERNEL=="*[a-z]1",  SYMLINK+="backupreader%n", ENV{SYSTEMD_WANTS}="startbackup.service"
das hier dann in fstab:

Code: Alles auswählen

/dev/backupreader1     /wohinersoll     auto     defaults,noauto  0  0


Folgende Regel habe ich in /etc/systemd/system/startbackup.service abgelegt:

Code: Alles auswählen

[Unit]
Description=Start script

[Service]
Type=oneshot
ExecStart=/etc/init.d/copyscript start
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Dazu habe ich das Script in init.d geschoben, ist aber schwachsinnig und werde ich ändern.
Ein Problem: Das Script war zu schnell, der Stick war noch nicht einmal richtig gemountet.

Lösung. sleep 5 gleich am Anfang.

Schwachsinn oder gute idee?
Der Kopiervorgang lief durch wie ein heißes Messer durch butter....habe allerdings nur NTFS getestet.

TomL

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

Beitrag von TomL » 22.04.2016 23:46:00

Eomer hat geschrieben:Schwachsinn oder gute idee?
Wenns funktioniert ist es doch genau richtig, dann kann man doch die Baustelle schließen. Nur frag ich mich, warum nach /etc/init und nicht nach /usr/loca/bin?

Die fstab ist in Kombination mit dem symlink selbstverständlich eine gute Möglichkeit, und noch schneller kommt man nicht zum richtigen Ergebnis.... deshalb alles richtig gemacht. Ich habs jetzt auch über systemd gelöst, allerdings über mein Script, welches natürlich jetzt auch noch zusätzlich einen weiteren Job starten kann. Das heisst, ich trage nur die udev-Regel ein, dann läuft der Rest nach meinen Anforderungen ... eben jedes Device unter seinem aktuellen Kernel-Namen mounten, solange kein expliziter Mountpoint angegeben ist und ggf. bei Bedarf auch einen Job starten. Da ich die fstab außer für sda1 und ggf. sda2 ansonsten gar nicht nutze, hatte ich das nicht weiter betrachtet. Und auf allen Rechnern für alle Sticks und Usb-Platten jeweils die fstab mit statischen Angaben nachpflegen, wollte ich mir nicht antun.

Aber prima... dann ist das ja jetzt erfolgreich geschlossen. :THX:

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

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

Beitrag von Eomer » 22.04.2016 23:48:00

Hey,

vielen Dank. Für die Rückmeldung.

War nur temporär in init.d ist jetzt in opt/bin...;)

Also Du kannst gerne Dein aktualisiertes Script posten, würde mich sehr interessieren.


Und ja, der Teil ist denke ich geschlossen. Ich mache gleich das nächste Thema auf :D

LG

TomL

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

Beitrag von TomL » 23.04.2016 15:31:58

Eomer hat geschrieben:Also Du kannst gerne Dein aktualisiertes Script posten, würde mich sehr interessieren.
Mach ich natürlich gerne.... in der Hoffnung auf Hinweise, wenn ich vielleicht irgendwo nen Bock geschossen habe.... aber hier bei mir scheint es jetzt bestens zu funktionieren....

Allerdings poste ich das nicht, ohne vorher zu bemerken, dass mein Script keine Konkurrenz zu Deiner Einfach-Lösung sein will und das auch gar nicht sein kann. Das, was Du jetzt eingerichtet hast, funktioniert mit minimalem Aufwand perfekt... besser kann man es nicht machen. Aber diese Lösung passt überhaupt nicht zu meinen Anforderungen, insofern ist die fstab-Lösung für mich völlig untauglich. Natürlich gibts auch Schnittmengen bei unseren Anforderungen, aber es ist doch eher mehr, was es unterscheidet.

Zum einen verwende ich nicht die Formate ntfs und exFat... das heisst, die Besonderheiten bei FUSE-Filesystem kannte ich bisher gar nicht. Ich starte derzeit auch keine Jobs nach dem Mounten. Dafür hantiere ich aber hier rotierend mit vier 2,5'er USB-Harddisks als Backmedium. Ich nutze wahllos einen von 4 USB-Sticks und 2 CardReader für irgendwelche Aktionen, zusätzlich 2 USB-Sticks und 1 SD-Card als "Key" zum entschlüsseln von Crypt-Devices. Ein Crypt-Container mit für mich besonderen Daten liegt von allen Plätzen erreichbar auf einer Serverplatte. Dazu fungieren 9 PC's als potentielle Dockingstationen. Also auf allen Systemen irgendwelche Symlinks generieren und die fstab's so customizen, das jedes Device einen festen und konfliktfreien mountpoint eingerichtet hat und die dann auch noch alle merken... und darüber hinaus damit in /media nur noch Unübersichtlichkeit erzeugen.... neee, das geht alles gar nicht *lol* Da fehlt es mir bei der fstab-Lösung an der notwendigen Flexibilität. Stattdessen kopiere ich jetzt ganz einfach nur die 3 benötigten Files rein und fertig ist die Laube... und alle Systeme behandeln die USB-Devices auf synchrone Weise.

Meine Anforderungen sind einfach erklärt;
Ich will, dass sich jede Platte, jeder Stick per default nach /media/sd?? mountet und das nach dem Abziehen alle Spuren beseitigt sind (media/sd??). Ein nächstes/weiteres angeschlossenes Device bekommt automatisch einen "folgenden" Kernelnamen und dementsprechend einen passenden gleichlautenden Mountpoint. Z.B. auf /dev/sdb1 folgt /dev/sdc1, darauf /dev/sdd1, usw.....

Ich möchte, dass sich ausgewählte besondere Devices (die Key-Sticks/Card) automatisch in ein besonderes Verzeichnis mounten.

Enthält einer meiner Sticks 2 oder mehr Partitionen, ggf. sogar unterschiedlich formatiert, sollen alle Partitionen auch einzeln gesteuert werden können.

Und der letzte Punkt, FUSE-FS mounten und starten von Jobs. Solche Anforderungen habe ich derzeit nicht. Aber ich hatte große Lust, das zu implementieren.... einfach deshalb, weils eine schöne Herausforderung ist und ich Spass daran habe. Also habe ich das gelöst. Das Dilemma war leider, dass ich die letzten Tage einfach wenig Zeit hatte... aber so wie es aussieht, funktioniert ist jetzt.

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

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

Beitrag von Eomer » 23.04.2016 23:50:57

Ja ist doch prima. Würde es auch gerne als Interesse und Inspiration in der Finalen Version sehen. Nein, eine Konkurrenz soll es nicht sein, es ist ja auch für etwas völlig anderes da.

LG

TomL

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

Beitrag von TomL » 24.04.2016 12:48:49

Moin

Das Konzept funktioniert seit 2-3 Tagen perfekt, genau meinen Anforderungen entsprechend. Es funktioniert gleichermaßen unter Debian Jessie und auch unter Raspian Jessie. Was tut es?
  • Alle USB-Speichermeiden werden tadellos bei fehlender Vorgabe unter ihrem Kernelnamen nach /media/sd?? gemountet.
  • Es werden keine Phantasie-MountPoints vom Automounter angelegt
  • Ein Re-Direct auf einen "anderen" vorgebenen MountPoint funktioniert
  • Ein Sub-Job kann nach dem Mount gestartet werden.
    Bei usbmount start/add wird der Subjob nach dem Mount mit folgender Syntax gestartet: subjob start {arg1} {arg2} {arg3}
    Bei usbmount stop/remove wird der Subjob vor dem Umount mit folgender Syntax gestartet: subjob stop {arg1} {arg2} {arg3}
    Dadurch ist die Unterstützung eines Crypt-Devices möglich, welches beim Einstecken des Key-Sticks "geöffnet" wird, und beim Abziehen "geschlossen" wird, siehe udev-Rules "Mini-USB-Stick".
  • Beim Abziehen/Entfernen des Mediums werden angelegte Verzeichnisse wieder entfernt (aufräumen in /media)
  • Aktivitäten und Probleme können im Journal nachgesehen werden
  • Unterstützte (bisher getestete) Filesysteme; ext4, ntfs, vfat, exfat
  • Das Konzept ist durch einfaches Kopieren von 3 Files (Bash-Script, systemd-Service-Unit und udev-Rule) auf weitere PC-Systeme portierbar, kein Anpassen der fstab (statisches Customizing) notwendig
Warum ich das bisher nicht gepostet habe...?... tja, wegen der Dokumentation :roll: Es ist ziemlich flexibel und deckt alle Anwendungsfälle ab. Dabei ist es vom Umfang eher klein, im Gegensatz allerdings zur Beschreibung der möglichen Anwendungsfälle. So einfach, wie es eigentlich ist, allein wegen der Komplexität und Vielfalt der Möglichkeiten ist es eher untauglich für 'alle'. :facepalm:

1. Verschiedene Anwendungsbeispiele für manuellen Start vom Terminal... direkt via Bash-Script, geeignet für 'normale' Filesysteme

Code: Alles auswählen

usbmount start /dev/sdb1
usbmount stop /dev/sdb1

usbmount add /dev/sdb1
usbmount remove /dev/sdb1

usbmount add /dev/sdb1 /home/specialdir
usbmount stop /dev/sdb1

usbmount start  /dev/sdb1 /home/specialdir /usr/local/bin/counter 15 3 test
usbmount remove /dev/sdb1

Syntax Call-Parameter = analog systemd-Service-Unit
Parameter:      Keine Blanks, getrennt durch Komma, komplett in Anführungszeichen 
                device=/dev/sdb1 , mountto=/home/thomas/special , run=/usr/local/bin/counter , arg1=5 , arg2=3 , arg3=test

usbmount start 'device=/dev/sdb1'
usbmount stop /dev/sdb1

usbmount start 'device=/dev/sdb1,mountto=/home/thomas/special'
usbmount stop /dev/sdb1

usbmount add 'device=/dev/sdb1,mountto=/home/thomas/special,run=/usr/local/bin/counter,arg1=5,arg2=3,arg3=test'
usbmount remove /dev/sdb1
2. Anwendungsbeispiele für Start via systemd vom terminal oder über udev-Event! Für normale Filesysteme und FUSE-FS und für zu startende Long-Time-Jobs

Code: Alles auswählen

Parameter:      Keine Blanks, getrennt durch Komma, komplett in Anführungszeichen
                device=/dev/sdb1 , mountto=/home/thomas/special , run=/usr/local/bin/counter , arg1=30

Code: Alles auswählen

systemctl start usbmount@'device=/dev/sdb1'.service
systemctl stop usbmount@'device=/dev/sdb1'.service

systemctl start usbmount@'device=/dev/sdb1,mountto=/home/thomas/special'.service
systemctl stop usbmount@'device=/dev/sdb1,mountto=/home/thomas/special'.service

systemctl start usbmount@'device=/dev/sdb1,mountto=/home/thomas/special,run=/usr/local/bin/counter,arg1=60'.service
systemctl stop usbmount@'device=/dev/sdb1,mountto=/home/thomas/special,run=/usr/local/bin/counter,arg1=60'.service

systemctl start usbmount@'device=/dev/sdb1,run=/usr/local/bin/counter,arg1=10,arg2=TestParm'.service
systemctl stop usbmount@'device=/dev/sdb1,run=/usr/local/bin/counter,arg1=10,arg2=TestParm'.service
3. Beispiele für Start via udev-Eventhandler

Code: Alles auswählen

# 2-GB-TransMemory-USB-Stick    (Hier Partition 1 berücksichtigen!!!)
 KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", ACTION=="add",    RUN+="/bin/systemctl start usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir'.service"
 KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", ACTION=="remove", RUN+="/bin/systemctl stop  usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir'.service"
 KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", GOTO="rules_end"

# Funktioniert für ext4, vfat ebenfalls
#KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", ACTION=="add",    RUN+="/bin/bash /usr/local/bin/usbmount add /dev/%k /home/thomas/specialdir"
#KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", ACTION=="remove", RUN+="/bin/bash /usr/local/bin/usbmount remove /dev/%k"
#KERNEL=="sd?1", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="12345", GOTO="rules_end"

# 8-GB-RAG-Stick, Partition 1 = 7 GB FAT32, Partition 2 = 1 GB EXT4   (Partition 1 = Default-Handler, hier nur Partition 2 berücksichtigen!!!)
 KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", ACTION=="add",    RUN+="/bin/systemctl start usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir,run=/usr/local/bin/counter,arg1=60'.service"
 KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", ACTION=="remove", RUN+="/bin/systemctl stop usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir,run=/usr/local/bin/counter,arg1=60'.service"
 KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", GOTO="rules_end"

# Mini-USB-Stick   (Uncrypt /dev/sda2, jedoch nur auf Dell-Notebook)
 KERNEL=="sd?1",  SUBSYSTEMS=="block", ENV{ID_SERIAL_SHORT}=="4711", ACTION=="add",    RUN+="/bin/systemctl start usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir,run=/usr/local/bin/uncrypt,arg1=/dev/sda2,arg2=DellNotebook'.service"
 KERNEL=="sd?1",  SUBSYSTEMS=="block", ENV{ID_SERIAL_SHORT}=="4711", ACTION=="remove", RUN+="/bin/systemctl stop usbmount@'device=/dev/%k,mountto=/home/thomas/specialdir,run=/usr/local/bin/uncrypt,arg1=/dev/sda2,arg2=DellNotebook'.service"
 KERNEL=="sd?1",  SUBSYSTEMS=="block", ENV{ID_SERIAL_SHORT}=="4711", GOTO="rules_end"

# Failed! Wird gemäß UDEV-Man-Page gekillt (nach ca. 20 Sek.)
#KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", ACTION=="add",    RUN+="/bin/bash /usr/local/bin/usbmount add /dev/%k /home/thomas/specialdir '/usr/local/bin/counter' 60"
#KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", ACTION=="remove", RUN+="/bin/bash /usr/local/bin/usbmount remove /dev/%k"
#KERNEL=="sd?2", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="1a2b3c", GOTO="rules_end"

# Default-Handler
 KERNEL=="sd??", SUBSYSTEMS=="usb", ACTION=="add",    RUN+="/bin/systemctl start usbmount@'device=/dev/%k'.service"
 KERNEL=="sd??", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop  usbmount@'device=/dev/%k'.service"

 LABEL="rules_end"
Zuletzt geändert von TomL am 27.04.2016 20:49:57, insgesamt 10-mal geändert.

TomL

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

Beitrag von TomL » 24.04.2016 12:50:18

Teil 2 - die benötigten Files:

Code: Alles auswählen

nano /usr/local/bin/usbmount

Code: Alles auswählen

#/bin/bash
#==========================================================================================================
# Mount von USB-Sticks, USB-Hard-Disks und SD-Card/Cardreader
#
# Script-Name:  usbmount
# Author     :  TommyLu*gmx.de
# Date       :  27.04.2016
# Version    :  3.1
#
# Called by  :  Udev-Rule
# Category   :  Memory-Device-Tool
#
#           $1     $2         {$3}         {$4}                       {$5} {$6} {$7}
#           was?   wer?       wohin?       run Job
# usbmount  add    /dev/sdb1  /media/sdb1  /usr/local/bin/myjob start Parameter f. myjob
# usbmount  remove /dev/sdb1  /media/sdb1  /usr/local/bin/myjob stop  Parameter f. myjob
#==========================================================================================================

[ -z "$1" ] || [ -z "$2" ] && exit 1

MountTo=""
Run=""
Arg1=""
Arg2=""
Arg3=""
Logging=1

Action=$1
Device=$2
[ -z "$3" ] && MountTo=/media/$(basename $Device) || MountTo=$3
[ -n "$4" ] && Run="$4"
[ -n "$5" ] && Arg1="$5"
[ -n "$6" ] && Arg2="$6"
[ -n "$7" ] && Arg3="$7"

#----------------------------------------------------------------------------------------------------------

parm=${Device,,}

if [[ "$parm" =~ "device=" ]]; then                                # systemd? Try to parse 1 (one) systemd-Instanz-Var
    line=$Device

    while true; do
        parm=$(echo $line | cut -f1 -d',')
        line=${line#*,}

        name=${parm%=*}
        value=${parm#*=}
        name=${name,,}

        [[ "$name" =~ "action" ]]  && Action=$value
        [[ "$name" =~ "device" ]]  && Device=$value
        [[ "$name" =~ "mountto" ]] && MountTo=$value
        [[ "$name" =~ "run" ]]     && Run=$value
        [[ "$name" =~ "arg1" ]]    && Arg1=$value
        [[ "$name" =~ "arg2" ]]    && Arg2=$value
        [[ "$name" =~ "arg3" ]]    && Arg3=$value

        if [ "$line" == "$parm" ];  then
            break
        fi
    done

    [ -z "$MountTo" ] && [ -n "$Device" ] && MountTo=/media/$(basename $Device)
fi

#----------------------------------------------------------------------------------------------------------

if [ "$Action" == "start" ] || [ "$Action" == "add" ]; then
    (($Logging)) && echo "Action=$Action   Device=$Device   MountTo=$MountTo   Run=$Run Arg1=$Arg1 Arg2=$Arg2 Arg3=$Arg3" | systemd-cat -t "thlu:`basename $0`" -p info

    if [ $Logging -ne 0 ]; then
        m=$(udevadm info --query=symlink --attribute-walk --name=$Device | grep model -i)
        m="${m#"${m%%[![:space:]]*}"}"
        m=$(echo $m|tr -d '\n')

        s=$(udevadm info --query=symlink --attribute-walk --name=$Device | grep serial -i)
        s="${s#"${s%%[![:space:]]*}"}"
        s=$(echo $s|tr -d '\n')
        echo "Model: $m  Serialid: $s" | systemd-cat -t "thlu:`basename $0`" -p info
    fi

    if [[ -z $(grep $Device /proc/mounts) ]]; then
        [ -d $MountTo ] || /bin/mkdir -p $MountTo
        fsys=$(udevadm info $Device | grep ID_FS_TYPE | awk -F '=' '{ print $2 }')

        case $fsys in
          vfat)
                /bin/mount $Device $MountTo -t vfat -o user,umask=000
                rc=$?
                ;;
          ext4)
                /bin/mount $Device $MountTo -t ext4 -o user,rw,relatime
                rc=$?
                chmod 777 $MountTo
                ;;
          ntfs)
                /bin/mount $Device $MountTo -t ntfs-3g  -o user,rw,relatime
                rc=$?
                ;;
          exfat)
                /bin/mount $Device $MountTo -o rw,relatime
                rc=$?
                ;;
          iso9660)
                /bin/mount $Device $MountTo
                rc=$?
                ;;
          *)
                (($Logging)) && echo "$Device=Undefined Filesystem-Type!   (FSType=$fsys)" | systemd-cat -t "thlu:`basename $0`" -p info
                exit 1
          ;;
        esac
    else
        rc="already mounted"
    fi
    (($Logging)) && echo "/bin/mount $Device $MountTo    (FSType=$fsys)  (RC mount=$rc)" | systemd-cat -t "thlu:`basename $0`" -p info

    if [ -n "$Run" ]; then
        (($Logging)) && echo "App=$Run start $Arg1 $Arg2 $Arg3" | systemd-cat -t "thlu:`basename $0`" -p info
        [ -f $Run ] && $Run start $Arg1 $Arg2 $Arg3 &
        rc=$?
        (($Logging)) && echo "$Run start=finished (RC=$rc)" | systemd-cat -t "thlu:`basename $0`" -p info
    fi
#----------------------------------------------------------------------------------------------------------

elif [ "$Action" == "stop" ] || [ "$Action" == "remove" ]; then
    MountTo=$(grep $Device /proc/mounts | cut -f2 -d' ')
    (($Logging)) && echo "Action=$Action   Device=$Device   MountTo=$MountTo   Run=$Run Arg1=$Arg1 Arg2=$Arg2 Arg3=$Arg3" | systemd-cat -t "thlu:`basename $0`" -p info

    if [ -n "$Run" ]; then
        (($Logging)) && echo "App=$Run stop $Arg1 $Arg2 $Arg3" | systemd-cat -t "thlu:`basename $0`" -p info
        [ -f $Run ] && $Run stop $Arg1 $Arg2 $Arg3
        rc=$?
        (($Logging)) && echo "$Run stop=finished (RC=$rc)" | systemd-cat -t "thlu:`basename $0`" -p info
    fi

    rc="was not mounted"
    if [ -n "$MountTo" ]; then
        /bin/umount $Device -f                           # /usr/bin/udisksctl unmount -b $Device --force
        rc=$?
    fi
    (($Logging)) && echo "/bin/umount $Device -f    (RC umount=$rc)" | systemd-cat -t "thlu:`basename $0`" -p info
    [ "$rc" == "was not mounted" ] && rc=0

    if [[ $rc -eq 0 ]]; then
        if [ -d $MountTo ] &&  [ -z "$(grep $Device /proc/mounts)" ]; then
            find $MountTo -maxdepth 0 -empty -exec /bin/rmdir $MountTo \;
        fi
    fi
fi
#----------------------------------------------------------------------------------------------------------

exit 0

Code: Alles auswählen

nano /etc/systemd/system/usbmount@.service

Code: Alles auswählen

[Unit]
Description=Running /usr/local/bin/usbmount

[Service]
Type=forking
RemainAfterExit=yes
ExecStart=/bin/bash -c "/usr/local/bin/usbmount start %I"
ExecStop=/bin/bash -c "/usr/local/bin/usbmount stop %I"

[Install]
WantedBy=multi-user.target

Code: Alles auswählen

chown root:root /usr/local/bin/usbmount
chown root:root /etc/systemd/system/usbmount@.service
chmod 755 /usr/local/bin/usbmount
chmod 644 /etc/systemd/system/usbmount@.service
Zum Testen des "Long-Time-Jobs" habe ich mir ein kleines Script gebastelt, dessen Start man oben in Teil 1 in den Aufrufen sehen kann:

Code: Alles auswählen

nano /usr/local/bin/counter

Code: Alles auswählen

#! /bin/bash

sec=$1
[ $sec -eq 0 ] && sec=10

echo "Wait $sec Seconds  Arg2=$2  Arg3=$3" >>/tmp/counter

for ((x=0;x<=$sec;x++))
do
    d=`date +%d-%m-%Y-%H-%M-%S`
    echo $d >>/tmp/counter
    sleep 1
done

exit 123

Code: Alles auswählen

chmod 755 /usr/local/bin/counter
Mit folgenden Befehlen habe ich mir die Ausgaben während der Kommandos bzw. des Events in verschiedenen gleichzeitigen Terminalfenstern angesehen. Als laufende "followed" Ausgabe:

Code: Alles auswählen

tail /tmp/counter -n 20 --sleep-interval=2 -f
journalctl -b -f | grep usbmount
Und als Snapshot:

Code: Alles auswählen

journalctl -b | grep thlu
journalctl -b | grep usbmount
Den Return-Code (123) des geforkten Child-Prozesses sieht man leider nur im Log. Der Prozess wird im Hintergrund gestartet, um den Terminate nach systemd-Timeout zu verhindern.

Code: Alles auswählen

journalctl -b | grep thlu
Apr 24 11:37:34 raspi3 thlu:usbmount[3783]: Action=start   Device=/dev/sda1   MountTo=/media/sda1   Run= Arg1= Arg2= Arg3=
Apr 24 11:37:34 raspi3 thlu:usbmount[3795]: Action=start   Device=/dev/sda2   MountTo=/home/thomas/specialdir   Run=/usr/local/bin/counter Arg1=60 Arg2= Arg3=
Apr 24 11:37:45 raspi3 thlu:usbmount[3818]: Model: ATTRS{model}==" "  Serialid: ATTRS{serial}=="1a2b3c" ATTRS{serial}=="20980000.usb"
Apr 24 11:37:45 raspi3 thlu:usbmount[3830]: Model: ATTRS{model}==" "  Serialid: ATTRS{serial}=="1a2b3c" ATTRS{serial}=="20980000.usb"
Apr 24 11:37:45 raspi3 thlu:usbmount[3840]: /bin/mount /dev/sda1 /media/sda1    (FSType=vfat)  (RC mount=0)
Apr 24 11:37:45 raspi3 thlu:usbmount[3849]: /bin/mount /dev/sda2 /home/thomas/specialdir    (FSType=ext4)  (RC mount=0)
Apr 24 11:37:45 raspi3 thlu:usbmount[3852]: Start App=/usr/local/bin/counter   Param=60
Apr 24 11:37:45 raspi3 thlu:usbmount[3856]: /usr/local/bin/counter=finished (RC=0)

journalctl -b | grep usbmount

Apr 24 11:37:33 raspi3 systemd[1]: Starting Running /usr/local/bin/usbmount...
Apr 24 11:37:33 raspi3 systemd[1]: Starting Running /usr/local/bin/usbmount...
Apr 24 11:37:34 raspi3 thlu:usbmount[3783]: Action=start   Device=/dev/sda1   MountTo=/media/sda1   Run= Arg1= Arg2= Arg3=
Apr 24 11:37:34 raspi3 thlu:usbmount[3795]: Action=start   Device=/dev/sda2   MountTo=/home/thomas/special   Run=/usr/local/bin/counter Arg1=60 Arg2= Arg3=
Apr 24 11:37:45 raspi3 thlu:usbmount[3818]: Model: ATTRS{model}==" "  Serialid: ATTRS{serial}=="1a2b3c" ATTRS{serial}=="20980000.usb"
Apr 24 11:37:45 raspi3 thlu:usbmount[3830]: Model: ATTRS{model}==" "  Serialid: ATTRS{serial}=="1a2b3c" ATTRS{serial}=="20980000.usb"
Apr 24 11:37:45 raspi3 thlu:usbmount[3840]: /bin/mount /dev/sda1 /media/sda1    (FSType=vfat)  (RC mount=0)
Apr 24 11:37:45 raspi3 systemd[1]: Started Running /usr/local/bin/usbmount.
Apr 24 11:37:45 raspi3 thlu:usbmount[3849]: /bin/mount /dev/sda2 /home/thomas/special    (FSType=ext4)  (RC mount=0)
Apr 24 11:37:45 raspi3 thlu:usbmount[3852]: Start App=/usr/local/bin/counter   Param=60
Apr 24 11:37:45 raspi3 thlu:usbmount[3856]: /usr/local/bin/counter=finished (RC=0)
Apr 24 11:37:45 raspi3 systemd[1]: Started Running /usr/local/bin/usbmount.
Apr 24 11:38:48 raspi3 systemd[1]: usbmount@\x27device\x3d-dev-sda2\x2cmountto\x3d-home-thomas-specialdir\x2crun\x3d-usr-local-bin-counter\x2carg1\x3d60\x27.service: main process exited, code=exited, status=123/n/a

TomL

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

Beitrag von TomL » 27.04.2016 20:59:32

Wen es interessiert.... 8) .... das mit dem "Sub-Job" aus dem Mount des udev-Eventhandlers heraus war rückblickend betrachtet eine richtig gute Anregung. Ich habe noch mal am Script rumgebastelt und habe nun das Ergebnis, dass beim Einstecken meines besonderen Key-Sticks meine vorgegebene Crypt-HD (sda2) entschlüsselt wird. Beim Abziehen des Sticks wird das Crypt-Device unmittelbar ordentlich beendet und geschlossen. Ich habe das Script also noch mal ausgetauscht und oben drüber die Anmerkungen vervollständigt.

Für mein Reise-Notbook war das jetzt eine richtig gute Erweiterung, die mir ohe Aufwand automatisch mit Einstecken des Sticks die zweite Partition entschlüsselt und bei Abziehen wieder schließt. Zuhause ist ne SD-Card permanent eingesteckt und selbst damit werden beide Prozesse (usbmount und uncrypt) beim Boot bearbeitet, ohne dass ich da was extra einstellen musste. Auch dieser Fall wird von udev ordentlich abgewickelt. Das finde ich klasse :THX:

Antworten