Hier ist, wie ich es vor kurzem gemacht habe, und ich bin jetzt ziemlich zufrieden mit diesem Ansatz. Dies ist für Ubuntu 12.04 + gentoo, aber ich vermute, dass jede Distribution, die die Installation von udev und autofs erlaubt, funktionieren sollte.
Voraussetzungen: Sie müssen udev + autofs installiert haben.
Schritt 1)
Erstellen Sie die folgende Datei "/etc/udev/rules.d/90-usbsd-auto.rules" (Sie können natürlich einen beliebigen Namen verwenden, solange dieser mit ".rules" endet). :
# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9]
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
SYMLINK+="usbdisks/%k", MODE:="0660", \
RUN+="/bin/rm /media/usb/%k", \
RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"
# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"
# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
SYMLINK+="usbdisks/%k", MODE:="0660"
# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
RUN+="/bin/rm /media/usb/%k"
Vorgehensweise: Es werden zwei Symlinks erstellt, einer für die USB-Speichergerätepartition unter "/ dev / usbdisks / <...>". Es wird entweder die Bezeichnung der USB-Speicherpartition oder der Name des Kernels verwendet, wenn keine Bezeichnung vorhanden ist. Der zweite Symlink führt von "/ media / usb / <...>" zu "/ media / autousb / <...>", um den Automounter zu unterstützen (siehe Schritt 2).
Hinweis: Ich habe die Regeln ursprünglich nicht mit den ID_FS_LABEL_ENC-Variablen verwendet, da dies meiner Meinung nach gefährlich ist. Was passiert, wenn Sie zwei USB-Sticks mit demselben Etikett anschließen?
Das Plakat wollte jedoch ausdrücklich das Etikett der USB-Festplatte verwenden, daher habe ich die Regeln entsprechend geändert.
Um sicherzustellen, dass udev diese Regeln liest, verwenden Sie
sudo udevadm control --reload-rules
Mit dieser udev-Regeldatei wird alles so eingerichtet, dass die USB-Speichergerätepartition automatisch bereitgestellt wird. Beachten Sie jedoch, dass das Gerät derzeit (absichtlich) NICHT automatisch bereitgestellt wird. Es wird automatisch gemountet, sobald Sie es mit verwenden
Schritt 2)
Richten Sie autofs in automount / media / autousb / <...> ein: Ich habe meiner Datei "/etc/auto.master" (für Ubuntu 12.04) die folgende Zeile hinzugefügt:
/media/autousb /etc/auto.usb --timeout=60
Dies bedeutet, dass AutoFS das Gerät nach 60 Sekunden Inaktivität ausgehängt hat. Je nach Geschmack möchten Sie möglicherweise weniger oder mehr verwenden.
Für Gentoo muss "/etc/autofs/auto.master" geändert werden, damit die Verwendung sinnvoll ist
/media/autousb /etc/autofs/auto.usb --timeout=60
Jetzt habe ich "auto.usb" mit folgendem Inhalt erstellt:
#!/bin/bash
key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
exit 0
fi
exit 1
Diese auto.usb muss ausführbar sein, damit autofs diese als (bash) Skript verwendet. Also zum Beispiel
sudo chmod 0755 /etc/auto.usb
Vorgehensweise: Dieses Skript teilt AutoFS (/ usr / sbin / automount) mit, wie die USB-Speichergerätepartition gemountet werden soll.
Das Skript verwendet zuerst "/ sbin / blkid", um herauszufinden, welche Art von Dateisystem sich auf der Partition befindet.
Das Skript bietet dann abhängig von der Gerätepartition die richtigen Einhängeoptionen.
Hinweis: Ich habe Beispielcode für die Dateisysteme "vfat" (wahrscheinlich am häufigsten für USB-Sticks), "ntfs" und "xfs" hinzugefügt. Natürlich ist es ziemlich einfach, dies zu erweitern, um mehr Dateisysteme zu unterstützen.
Schritt 3) Optional ... Um den / die USB-Stick (s) (oder Partitionen auf Ihrem USB-Stick) zu entfernen, erstellen Sie ein Skript unter / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
Mit diesem Skript können Sie "sudo usbeject" verwenden, um die Bereitstellung aller bereitgestellten USB-Gerätepartitionen aufzuheben (indem Sie automount anweisen, die Bereitstellung aufzuheben).
Natürlich können Sie einfach sicherstellen, dass die Partition nirgendwo verwendet wird. automounter wird dann die Partition nach dem 60-Sekunden-Timeout aushängen ...
Der eigentliche Trick dabei ist die Verwendung von Symlinks von "/ media / usb" nach "/ media / autousb":
- Die "/ media / usb" -Symlinks werden von udev erstellt und geben dem Benutzer einen einfachen Überblick darüber, welche USB-Speichergerätepartitionen vorhanden sind
- AutoFS stellt die Partition dann bei Bedarf automatisch bereit, wenn Sie sie über / media / usb verwenden
- Mit der skriptbasierten "auto.usb" -Datei unterstützen Sie möglicherweise alle Arten von Dateisystemen. Außerdem können Sie auch alle Arten von Namensschemata unterstützen.
- Dieser Ansatz unterstützt USB-Sticks mit mehreren Partitionen, auch wenn diese Partitionen unterschiedliche Dateisystemtypen verwenden.