Automatische Montage des USB-Sticks am Plug-In ohne UUID

9

Also mache ich ein Medienzentrum. Ich benötige den Pi, um JEDEN USB-Stick, den ich anschließe, automatisch zu mounten. Egal welches Dateisystem (vfat, NTFS, ext). Ich habe überall gesucht und konnte nichts finden, was funktioniert. Nun, usbmount funktioniert teilweise. Ich kann es nicht dazu bringen, NTFS zu mounten und Flash-Laufwerke für alle Benutzer zugänglich zu machen.

Raspbian Jessie Lite auf RPI3 ausführen

pauliucxz
quelle
1
Warum verwenden Sie kein sofort einsatzbereites Media Center wie OpenElec oder ähnliches? Sie haben alle Macken ausgebügelt.
Dr_Bunsen
5
Weil ich mehr über Linux erfahren möchte
pauliucxz

Antworten:

7

Also habe ich eine Lösung gefunden, die ganz gut funktioniert. Ein großes Dankeschön an avanc und seine udev-Regel , die dies ermöglicht. Ich habe es auch so modifiziert, dass es bis zu 4 Flash-Laufwerke gleichzeitig mounten kann (es kann bei Bedarf erhöht werden).

Bedarf

  1. Installieren Sie pmount, falls nicht installiert sudo apt-get install pmount
  2. Dieses Skript stellt Laufwerke bereit /media/usb*, stellen Sie also sicher, dass diese Ordner nicht belegt sind. Wenn Sie ein saubereres Erscheinungsbild wünschen, erstellen Sie keine Ordner.

Udev-Regel

  1. Erstelle Datei /etc/udev/rules.d/usbstick.rules
  2. Einfügen:

    ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k"
    
  3. Speichern und schließen

Systemd-Dienst

  1. Erstelle Datei /lib/systemd/system/[email protected]
  2. Einfügen:

    [Unit]
    Description=Mount USB sticks
    BindsTo=dev-%i.device
    After=dev-%i.device
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/local/bin/cpmount /dev/%I
    ExecStop=/usr/bin/pumount /dev/%I
    
  3. Speichern und schließen

Skript einbinden

  1. Erstelle Datei /usr/local/bin/cpmount
  2. Einfügen:

    #!/bin/bash
    if mountpoint -q /media/usb1
    then
       if mountpoint -q /media/usb2
       then
          if mountpoint -q /media/usb3
          then
             if mountpoint -q /media/usb4
             then
                 echo "No mountpoints available!"
                 #You can add more if you need
             else
                 /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb4
             fi
          else
             /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb3
          fi
       else
          /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb2
       fi
    else
       /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb1
    fi
    
  3. Geben Sie dem (Root-) Benutzer die Ausführungsberechtigung: chmod u+x /usr/local/bin/cpmount

  4. Speichern und schließen

Fertig

Starten Sie Ihr RPi neu und testen Sie es.

ANMERKUNGEN

  • Sie können pmount-Parameter ändern, aber diese ermöglichen jedem R / W-Zugriff auf USB.
  • Die Anzahl der Mountpunkte kann geändert werden.
  • Vielen Dank an avanc für seine udev Regel und seinen Service .
pauliucxz
quelle
Dies funktioniert gut, mit der Ausnahme, dass in Hinweis (1) angegeben ist, dass dies den R / W-Zugriff ermöglicht, die Option "-r" jedoch die Anzahl der R / O-Kräfte erhöht. Ändern Sie jede der vier obigen Zeilen in "-w", um vollen Lese- / Schreibzugriff zu erhalten.
Dave Lawrence
Auch vermisst man ein 0auf /usr/bin/pmount --umask 00 -noatime -r --sync $1 usb4?
GramThanos
Ich habe dieses Skript kopiert und eingefügt und es ist mit Fehlern fehlgeschlagen. Sie benötigen einen zusätzlichen hinzuzufügen 0auf die umaskFahne und ein extra -auf die noatimeFlagge für Ihre erste elseAnweisung gibt, so dass die gesamte Aussage sein sollte /usr/bin/pmount --umask 000 --noatime -r --sync $1 usb4.
Homersimpson
2
@pauliucxz; Erwähnen Sie in Ihrem Artikel möglicherweise auch, dass für die Datei cpmounteine ausführbare Berechtigung für den Benutzer festgelegt sein muss pi(diese ist standardmäßig nicht festgelegt, standardmäßig sind nur rwBerechtigungen festgelegt): sudo u+x cpmount(innen /usr/local/bin). Es hat bei mir nicht nur aus diesem Grund funktioniert. Jetzt funktioniert es perfekt ...
GeertVc
Erstellen Sie den systemd-Dienst nicht in /lib/systemd/system/, sondern verwenden Sie ihn /etc/systemd/system/stattdessen. Der erstere Pfad ist für Dienste vorgesehen, die von installierten Paketen bereitgestellt werden, während der letztere vom Systemadministrator für seine eigenen Dienste verwendet werden kann.
Steviethecat
6

Meine Version basiert auf der obigen Antwort :

Systemd-Dienst

Stellen:

[Unit]
Description=Mount USB sticks
BindsTo=dev-%i.device
After=dev-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/automount %I
ExecStop=/usr/bin/pumount /dev/%I

im /lib/systemd/system/[email protected]

Skript einbinden

Stellen:

#!/bin/bash

PART=$1
FS_LABEL=`lsblk -o name,label | grep ${PART} | awk '{print $2}'`

if [ -z ${FS_LABEL} ]
then
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${PART}
else
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${FS_LABEL}_${PART}
fi

In /usr/local/bin/automountund dann:

sudo chmod +x /usr/local/bin/automount

Starten Sie neu.

Die Namen der Mountpunkte / Ordner haben das Format /media/<PartitionLabel>_<sdxy>. Falls eine Partition keine Bezeichnung hat, ist dies nur der Fall /media/<sdxy>.

Daher beschrifte ich meine USB-Laufwerke normalerweise mit ihrer Kapazität. zB 8G, 16G. Wenn ich mehrere USB-Festplatten mit demselben Etikett anschließe, kann ich sie dennoch unterscheiden, z. B.:

/media/500G_sdb1
/media/500G_sdc1
yy502
quelle
Vielen Dank. Ich musste die --syncOption entfernen . Die Schreibgeschwindigkeit war auf meinem externen USB-Laufwerk sehr langsam
Mr Hyde
0

Die beste Lösung, die ich dafür gefunden habe, ist die Verwendung des pmount- Dienstes.

Ich habe den normalen Prozess verwendet, um es zu installieren:

sudo apt-get install pmount

Das einzige, worüber Sie sich Sorgen machen müssen, ist, wenn Sie bereits reguläre Verzeichnisse in / media / pi mit denselben Namen wie ein USB-Laufwerk haben. Wenn Sie dies tun, wird beim Einhängen des Laufwerks eine Ziffer angehängt.

Wenn Sie beispielsweise ein Verzeichnis mit dem Namen / media / pi / STICK haben und dann ein Flash-Laufwerk mit dem Namen STICK installieren, finden Sie es unter / media / pi / STICK1

Dies kann passieren, wenn Sie den Stick vor der Installation von pmount installiert, aber beim Entfernen nicht ordnungsgemäß ausgeworfen haben.

Als mir das passierte, schrieben meine Programme glücklich weiter auf meinen STICK, aber als ich ihn herauszog und an einen anderen Computer anschloss, war er leer. Es wurde in das Verzeichnis und nicht auf das Gerät geschrieben.

Also habe ich das Verzeichnis in / media / pi / temp umbenannt, pmount installiert, STICK gemountet und den Inhalt von temp nach / media / pi / STICK kopiert

Wenn ich es dann auswerfe und auf einem anderen Computer überprüfe, macht es genau das, was ich beabsichtigt habe.

SDsolar
quelle
Ich habe es installiert, aber es macht nichts. Wenn ich mein falsches Laufwerk anschließe, passiert nichts. Ich habe / media überprüft und es ist leer. Ich habe auch lsblk überprüft und es wurde nirgendwo montiert.
Pauliucxz
Es wird unter / media / pi angezeigt. Verwenden Sie den Dateimanager, um einen Drilldown durchzuführen und so auszusehen. Außerdem sollten Sie bei der Installation zur Eingabe Ihres Kennworts aufgefordert werden. Wenn dies nicht der Fall ist, erkennt es das Flash-Laufwerk möglicherweise überhaupt nicht. Eine andere Möglichkeit, es zu sehen, ist df -h
SDsolar
fdisk -l zeigt das Flash-Laufwerk an. Wenn ich "pmount / dev / sda1 / media / pi / STICK" eingebe, wird es erfolgreich gemountet. Aber df -h sieht es nicht. Ich habe viele Laufwerke ausprobiert und sie wurden immer noch nicht automatisch gemountet.
Pauliucxz