Hier ist, wie ich es kürzlich gemacht habe, und ich bin jetzt ziemlich zufrieden mit diesem Ansatz. Dies ist für Ubuntu 12.04 + Gentoo, aber ich denke, jede Distribution, die die Installation von udev und autofs ermöglicht, sollte funktionieren.
Voraussetzungen: Sie müssen udev + autofs installiert haben.
Schritt 1)
Erstellen Sie die folgende Datei "/etc/udev/rules.d/90-usbsd-auto.rules" (natürlich können Sie 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"
Was dies bewirkt: 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 Kernelname verwendet, wenn keine Bezeichnung vorhanden ist. Der zweite Symlink wird von "/ media / usb / <...>" zu "/ media / autousb / <...>" verlinkt. Dies erfolgt zur Unterstützung von Automountern (siehe Schritt 2).
Hinweis: Ich habe die Regeln ursprünglich nicht mit den Variablen ID_FS_LABEL_ENC verwendet, da dies meiner Meinung nach gefährlich ist. Was passiert, wenn Sie zwei USB-Sticks mit demselben Etikett anschließen?
Da das Poster jedoch speziell das Etikett des USB-Laufwerks verwenden wollte, 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 NICHT (absichtlich) automatisch bereitgestellt wird. Es wird automatisch bereitgestellt, sobald Sie es mit verwenden
Schritt 2)
Richten Sie autofs auf 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 deaktiviert. Je nach Geschmack möchten Sie möglicherweise weniger oder mehr verwenden.
Für Gentoo müssen Sie "/etc/autofs/auto.master" ändern, 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 dies als (Bash-) Skript verwendet. So zum Beispiel
sudo chmod 0755 /etc/auto.usb
Was bewirkt das: 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 Mount-Optionen.
Hinweis: Ich habe Beispielcode für die Dateisysteme "vfat" (wahrscheinlich am häufigsten für USB-Sticks), "ntfs" und "xfs" eingefügt. Natürlich ist es ziemlich einfach, dies zu erweitern, um mehr Dateisysteme zu unterstützen.
Schritt 3) Optional ... Um Ihre USB-Sticks (oder Partitionen auf Ihrem USB-Stick) "auszuwerfen" == 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 gemounteten USB-Gerätepartitionen aufzuheben (indem Sie automount anweisen, die Bereitstellung aufzuheben).
Natürlich können Sie einfach sicherstellen, dass die Partition nirgendwo verwendet wird. Der Automounter hebt dann die Partition nach dem 60-Sekunden-Timeout auf ...
Der eigentliche Trick besteht darin, Symlinks von "/ media / usb" zu "/ media / autousb" zu verwenden:
- Die Symlinks "/ media / usb" werden von udev erstellt und geben dem Benutzer einen einfachen Überblick darüber, welche Partitionen von USB-Speichergeräten vorhanden sind
- AutoFS stellt die Partition dann bei Bedarf automatisch bereit, wenn Sie sie über / media / usb verwenden
- Mit der Skriptdatei "auto.usb" unterstützen Sie möglicherweise jede Art von Dateisystem und zusätzlich jede Art von Namensschema.
- Dieser Ansatz unterstützt USB-Sticks mit mehreren Partitionen, auch wenn diese Partitionen unterschiedliche Dateisystemtypen verwenden.