How to mount removable media in /media/<label> automatically when inserted, without any desktop environment? </label>

8563
cedbeu

I have a Debian sid system (Wheezy) (and same question for arch as well), without any desktop environment (and no Xorg at all).

I can mount my SD-cards, USB sticks, external HDD manually with mount / umount with the suitable entries in /etc/fstab but this is compelling, and to restrictive: if I want them to be mounted in /media/<LABEL> each device with a different <LABEL> needs its own entry, and each <LABEL> directory needs to be created / removed manually in /media/ as well).

So, what is the best way to mount them automatically in /media/<LABEL> at insertion (and to unmount them from the filesystem as soon as they are unplugged)?

The ideal solution would:

  1. detect when a removable media is plugged-in (added in /dev/ as sdax, sdbx, ... by udev)
  2. create a directory in /media/ according to its label (label of the removable media)
  3. mount it in the directory /media/<LABEL> in RW mode (if it's filesystem is supported)
  4. detect if the media has been unplugged
  5. if then, unmout it from the filesystem
  6. remove the corresponding directory from /media/

(the devices should be mounted in synchronous mode oviously, to avoid any data loss when hot unplugged because of caching)

I found some info about autofs, HAL, udisks, udisks2, etc., but it's unclear which one is deprecated or preferred, and anyway, I haven't figured out how to configure them easily on my system to do that, up to now ...

Minimalism, elegance, KISS, *nix-minded, no crazy unbearable XML policies files, and up-to-date highly appreciated.

edit: trying to make my question more clear

7
Ich habe meine Fragen auf http://unix.stackexchange.com/questions/44454 gepostet. Vielleicht habe ich noch ein paar Antworten ... Ich bin nicht sicher, ob sie hier gelöscht werden soll oder nicht. cedbeu vor 11 Jahren 0
Sie haben den gleichen Beitrag in verschiedenen Websites, mit der gleichen Antwort in beiden selbst beantwortet ... Francisco Tapia vor 8 Jahren 0

3 Antworten auf die Frage

3
cedbeu

Ok, es ist lange her, aber ich beantworte meine Frage immer noch mit der besten Option, die ich bisher gefunden habe.

Am besten erstellen Sie eine udevRegel, die mit einigen Skripts verknüpft ist (die Verzeichnisse erstellen / entfernen und austauschbare Geräte bereitstellen bzw. aushängen), und die an den partition udevGeräteereignistyp angehängt sind .

1 - Erstellen von Skripten zum Hinzufügen / Entfernen

Dieses Skript storage-automount.shin /lib/udev/und setzen Sie sich auf ausführbare Datei ( sudo chmod +x /lib/udev/storage-automount.sh):

#!/bin/sh  # set the mountpoint name according to partition or device name mount_point=$ID_FS_LABEL if [ -z $mount_point ]; then mount_point=$ fi  # if a plugdev group exist, retrieve its gid set & it as owner of mountpoint plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)" if [ -z $plugdev_gid ]; then gid='' else chown root:plugdev $mount_point gid=",gid=$plugdev_gid" fi  # create the mountpoint directory in /media/ (if not empty) if [ -n $mount_point ]; then mkdir -p /media/$mount_point # other options (breaks POSIX): noatime,nodiratime,nosuid,nodev mount -t $ID_FS_TYPE \ -o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \ $DEVNAME /media/$mount_point fi 

Dieses Skript storage-autounmount.shin /lib/udev/und setzen Sie sich auf ausführbare Datei ( sudo chmod +x /lib/udev/storage-autounmount.sh):

#!/bin/sh  # set the mountpoint name according to partition or device name mount_point=$ID_FS_LABEL if [ -z $mount_point ]; then mount_point=$ fi  # remove the mountpoint directory from /media/ (if not empty) if [ -n $mount_point ]; then umount -l /media/$mount_point rm -R /media/$mount_point fi 

2 - Erstellen der udevRegel zum Anhängen dieser Skripts an Ereignisse

Fügen Sie schließlich eine udevRegel hinzu /etc/udev/rules.d, zum Beispiel 85-storage-automount.rules:

ENV=="partition", RUN+="/lib/udev/storage-automount.sh", ENV="/lib/udev/storage-autounmount.sh" 

Und das ist es.

Wenn Sie nun ein Speichergerät anschließen, wird ein Verzeichnis /media/mit dem Namen der Partition erstellt (ich erinnere mich nicht, aber ich denke, es funktioniert auch mit NTFS-Partitionen), und Ihre Partition wird darin eingebunden. Es ist R / W für Benutzer, wenn Sie eine plugdevGruppe in Ihrem System haben. Die Geräte sind außerdem im synchronen Modus montiert, um das Risiko eines Datenverlusts im Falle eines Hot-Unplugging zu begrenzen.

Wenn das Gerät entfernt wird, wird es aufgehoben und das Verzeichnis wird aus dem Gerät entfernt /media.

Das Werkzeug zum Überwachen der udevEreignisse ist udevadm monitormit Optionen wie --envoder --property:

$ udevadm monitor --env 

Dies ist getestet und funktioniert sowohl bei Debian als auch bei Arch einwandfrei, funktioniert aber wahrscheinlich bei allen Distributionen, auf die es sich bezieht udev.

1
Izzy

Möglicherweise möchten Sie Ihr /dev/disk/by-uuidVerzeichnis überprüfen, während diese spezifischen Laufwerke angeschlossen sind. Wenn ls -lSie es verwenden, werden Ihnen die Geräte (z. B. /dev/sdb1) und ihre Uuids angezeigt. Nachdem Sie die Übereinstimmungen gefunden haben, aktualisieren Sie Ihre Einstellungen /etc/fstabentsprechend und ersetzen Sie sie /dev/sd*durch den entsprechenden /dev/disk/by-uuid/*Eintrag.

Weitere Informationen finden Sie in meiner Antwort zu Wie verhindere ich, dass ein USB-Flash-Laufwerk nach dem Aufwachen aus dem Ruhezustand einen neuen Linux-Gerätenamen erhält? .

Wie gesagt, die Geräte sind bereits angeschlossen, ich kenne ihre UUID / LABEL entweder über 'blkid' oder das Verzeichnis '/ dev / disk / by-uuid'. Und ich kann sie auch manuell montieren. Jetzt habe ich sie bereits in `/ etc / fstab`, eigentlich durch Label oder UUID, beide funktionieren korrekt. Das hilft aber nicht wirklich, da sie nur beim Booten gemountet werden (solange ich nicht 'noauto' spezifiziere). Wenn ich sie aber entferne und sie wieder einführe, während das System läuft, werden sie nicht automatisch in den Verzeichnissen abgehängt, die ich in `fstab` angegeben habe. Dies ist mein Problem. cedbeu vor 11 Jahren 1
Sieht aus wie etwas Seltsames - da ich es seit Jahren für entfernbare Geräte verwende (z. B. SD-Karten von meinen Kameras, mobile Geräte wie MP3-Player, Smartphones, Tablets usw.), werden sie alle ordnungsgemäß am vorgesehenen Mountpoint angebracht. Wenn Sie sie entfernen: Mounten Sie sich vorher und montieren Sie es erneut, wenn Sie es erneut einsetzen, sollten Sie dies tun, und dann sollte es funktionieren. Izzy vor 11 Jahren 0
Wenn ich sie abmontiere und manuell montiere, funktioniert alles natürlich gut. Aber mein Problem ist, dass ich sie abmounten möchte (`sync`-Option in` fstab`) und sie automatisch * mounten (und als `user` sowie als` root`), wenn ich sie entferne / einlege. Deshalb denke ich, dass entweder "AutoFS", "HAL", "udisks", "udisks2" (oder "hotplug", vielleicht ...?) Oder etwas Ähnliches involviert ist ... Aber wissen Sie nicht, was mir fehlt genau. cedbeu vor 11 Jahren 1
Vermissen Sie wahrscheinlich, dass Sie sie immer noch manuell abmontieren müssen - oder woher soll das System wissen, dass Sie das tun werden? Obvioulsy, sobald Sie den Stecker gezogen haben, kann er nicht mehr synchronisiert werden und auch nicht ordnungsgemäß aufgehängt werden. Das System geht also von einem Laufwerksfehler aus - aber oft verwirft man nur das "alte Laufwerk" * nachdem * Sie das "neue Laufwerk" erneut angeschlossen haben. Beim Auto-Mount ist also der alte Mount-Punkt noch belegt, wodurch das "neue" Laufwerk anderswo gemountet wird. Izzy vor 11 Jahren 0
Das Hot Plug / Unplug-System wie "hal" (unter anderem erwähnt) sollte dafür sorgen, dass das Gerät des fs nicht mehr angeschlossen wird, wenn es nicht mehr angeschlossen ist. Die `sync`-Option in` / etc / fstab` wird in diesem Fall verwendet, um die Dateien des Geräts ohne Zwischenspeicherung zu synchronisieren, wobei jedoch beim Hot-Unplugging ein Datenverlust vermieden wird (zuvor nicht manuell aufgehoben). cedbeu vor 11 Jahren 0
Ich weiß, was "Montieren" und "Demontieren" bedeuten, und das ist genau das Gleiche, wenn ich das Montieren manuell löse. Mein Problem ist nicht hier. Ich weiß, wie man beim Start oder manuell mounten und demontiert, aber ich suche nach einer ** automatischen ** Lösung für Hot-Plugging und -Trennen entfernbarer Geräte. Ich weiß, dass 'HAL' und die anderen das tun, aber ich weiß nicht, wie und was der eleganteste Weg ist (keine verrückten XML-Richtliniendateien, nur fstab-basiert, falls möglich). cedbeu vor 11 Jahren 0
Jetzt habe ich es bekommen - Entschuldigung für das Missverständnis. War aus der orig Frage nicht ganz klar. Izzy vor 11 Jahren 0
Kein Problem:] Ich weiß, es ist nicht ganz klar in meiner Frage, ich bin mir nicht sicher, was die Terminologie angeht (ich missbrauche hier wahrscheinlich `automounting` und` hotplug`) ... Danke, dass Sie trotzdem helfen wollen:] cedbeu vor 11 Jahren 0
Bitte. Leider bin ich mit hotplug nicht so vertraut, wie Sie es brauchen, um Ihnen mehr Hilfe zu geben. Izzy vor 11 Jahren 0
0
Max Power

Danke für deine Hinweise. Ich habe Ihre Mount- und Unmount-Skripte folgendermaßen vereinfacht:

montieren:

#!/bin/sh  udisks --mount $DEVNAME 

Unmount:

#!/bin/sh  udisks --unmount $DEVNAME 

Meine /etc/udev/rules.d/ -Datei sieht folgendermaßen aus:

# UDISKS_FILESYSTEM_SHARED # ==1: mount filesystem to a shared directory (/media/VolumeName) # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) # See udisks(8) ENV=="filesystem|other|crypto", ENV="1" ENV=="partition", RUN+="/lib/udev/storage-automount.sh", ENV="/lib/udev/storage-autounmount.sh" 

Es ist einfach und sollte ein typischer Anwendungsfall sein.