ubuntuusers.de

NTFS mounten mittels bash

Status: Ungelöst | Ubuntu-Version: Server 24.04 (Noble Numbat)
Antworten |

matze31

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Ich habe mir ein bash-Script geschrieben, was USB Geräte mounten soll. Und zwar soll es egal sein welches Format der Datenträger hat.

Dafür habe ich ein Service Unit geschrieben mit den Inhalt

[Unit]
Description=startet nach boot, auch wenn ein Stick eingehaengt wird das mount.sh gestartet

[Service]
ExecStart=/bin/bash  /home/matze/Scripte/mount.sh

[Install]
WantedBy=multi-user.target

Wenn ein USB Gerät eingesteckt wird, wird die Unit per udev gestartet und die wiederum startet mein mount.sh.

Soweit so gut, bisher hatte ich immer ext4 und FAT32 getestet. Funktionierte 1a. Danach habe ich mal ein in NTFS formatierten Stick getestet und per udev angestoßen, dann wird der Stick zwar gemountet und dann nach paar Sekunden wieder ungemountet - automatisch versteht sich. Wenn ich mein mount.sh aber manuell mit root-Rechten starte, dann bleibt er auch eingehängt.

Es muss also an der Unit liegen. Hier mal die Fehlermeldung von der Unit:

Mär 09 18:37:36 mediaserver systemd[1]: mount.service: Deactivated successfully.
Mär 09 18:37:36 mediaserver ntfs-3g[2026]: Unmounting /dev/sdb1 ()
Mär 09 18:37:35 mediaserver bash[2032]: Done.
Mär 09 18:37:35 mediaserver bash[2032]: [944B blob data]
Mär 09 18:37:34 mediaserver bash[2032]:   Duration: unknown
Mär 09 18:37:34 mediaserver bash[2032]: Replaygain: off
Mär 09 18:37:34 mediaserver bash[2032]: Samplerate: 48000Hz
Mär 09 18:37:34 mediaserver bash[2032]:   Channels: 1 @ 32-bit
Mär 09 18:37:34 mediaserver bash[2032]:   Encoding: n/a
Mär 09 18:37:34 mediaserver bash[2032]:  File Size: 0
Mär 09 18:37:34 mediaserver bash[2032]: play WARN alsa: can't encode 0-bit Unknown or not applicable
Mär 09 18:37:30 mediaserver ntfs-3g[2026]: Ownership and permissions disabled, configuration type 7
Mär 09 18:37:30 mediaserver ntfs-3g[2026]: Mount options: allow_other,nonempty,relatime,rw,fsname=/dev/sdb1,blkdev,blksize=4096
Mär 09 18:37:30 mediaserver ntfs-3g[2026]: Cmdline options: rw
Mär 09 18:37:30 mediaserver ntfs-3g[2026]: Mounted /dev/sdb1 (Read-Write, label "", NTFS 3.1)
Mär 09 18:37:30 mediaserver ntfs-3g[2026]: Version 2022.10.3 integrated FUSE 28
Mär 09 18:37:30 mediaserver systemd[1]: Started mount.service - startet nach boot, auch wenn ein Stick eingehaengt wird das mount.sh gestartet.

Was ist der Unterschied ob ich es per Hand mounte oder es über die Unit geht?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Ich habe jetzt mal in dem "[service] - Abschnitt mal "Type=forking" eingetragen und jetzt funktioniert es.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9560

Wohnort: Münster

matze31 schrieb:

[…] Wenn ein USB Gerät eingesteckt wird, wird die Unit per udev gestartet und die wiederum startet mein mount.sh.

Normalerweise macht das alles automatisch UDisks, ohne dass ein Skript oder Unit erstellt werden muss. Zeige bitte:

systemctl status udisks2.service | cat 

[…] Was ist der Unterschied ob ich es per Hand mounte oder es über die Unit geht?

Wie sollen wir das beurteilen, wenn Du uns die entscheidende Information, nämlich wie Du die Einbindung auslöst, vorenthältst?

Jedenfalls: User mounts sind tricky, FUSE ist heimtückisch und NTFS-3G zickig.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

kB schrieb:

Normalerweise macht das alles automatisch UDisks, ohne dass ein Skript oder Unit erstellt werden muss.

Ja weil ich bestimmte usb Greräte an ein bestimmten ort mounten möchte usw.

Zeige bitte:

systemctl status udisks2.service | cat 
● udisks2.service - Disk Manager
     Loaded: loaded (/usr/lib/systemd/system/udisks2.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-03-10 18:58:13 CET; 1min 58s ago
       Docs: man:udisks(8)
   Main PID: 725 (udisksd)
      Tasks: 6 (limit: 9271)
     Memory: 9.0M (peak: 9.5M)
        CPU: 206ms
     CGroup: /system.slice/udisks2.service
             └─725 /usr/libexec/udisks2/udisksd

Mär 10 18:58:13 mediaserver systemd[1]: Starting udisks2.service - Disk Manager...
Mär 10 18:58:13 mediaserver udisksd[725]: udisks daemon version 2.10.1 starting
Mär 10 18:58:13 mediaserver systemd[1]: Started udisks2.service - Disk Manager.
Mär 10 18:58:13 mediaserver udisksd[725]: Acquired the name org.freedesktop.UDisks2 on the system message bus

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Jetzt habe ich festgestellt, wenn weitere USB Sticks oder Festplatten eingesteckt werden, dann wird der Dienst durch "forking" blockiert und wird nicht mehr angestoßen. Also muss ich einen anderen Weg einschlagen.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

kB schrieb:

Wie sollen wir das beurteilen, wenn Du uns die entscheidende Information, nämlich wie Du die Einbindung auslöst, vorenthältst?

Was meinst du damit?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Vielleicht kann mir jemand bei meiner neuer Erkenntnis helfen.

Wenn ich mein mount.sh Script im Terminal starte, dann bleibt mein USB Stick dauerhaft gemountet. Wenn ich es aber über einen Dienst (Service Unit) starte, dann bleibt der USB Stick nur so lange gemountet wie das Script läuft. Was und wie verhält sich das ganze? Wenn ich in den Dienst Type=forking einstelle dann bleibt es auch gemountet aber der dienst läuft halt immer unendlich weiter. Was ist dazu der Unterschied zum Terminal?

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3777

Versuchs mal mit Type=oneshot.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

schwarzheit schrieb:

Versuchs mal mit Type=oneshot.

Leider auch nicht, die Optionen bin ich schon durchgegangen. Wie gesagt, es ist nur wenn ich ntfs mounte, wenn ich fat32 oder ext4 mounte dann ist es nicht so.

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3777

dann teste bitte noch das

[Service]
ExecStart=/path/to/mount.sh
RemainAfterExit=true
Type=oneshot

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Das zeigt das gleiche Verhalten wie "forking". Es bleibt zwar eingeloggt, aber sobald ich den dienst beende, dann wird es wieder automatisch ausgehängt. Warum zeigt das bei NTFS so ein Verhalten?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9560

Wohnort: Münster

matze31 schrieb:

kB schrieb:

Wie sollen wir das beurteilen, wenn Du uns die entscheidende Information, nämlich wie Du die Einbindung auslöst, vorenthältst?

Was meinst du damit?

  • Welchen Befehl benutzt Du zur Einbindung?

  • Benutzt der Befehl hinterlegte Konfigurationen, z.B. aus /etc/fstab oder nicht?

  • Unter welchem Benutzer und mit welchen Rechten läuft de Befehl bzw. das Skript?

  • Die relevanten Einzelheiten halt …

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Also ich mounte das ganze im Script mit

mount -o rw /dev/sdb1 /home/matze/Freigaben/musik

Das Script wird mit root Rechten gestartet.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Es läuft, "dank" der NTFS Geschichte, alles hinaus, dass ich mit den Script eine Service-Unit starten und die wiederum startet dann ein Script was eben das Medium einhängt. Dann muss ich eben für jedes Medium eine Unit und ein Script erstellen. Ist zwar nicht so schön aber erfüllt meinen Zweck.

Antworten |