Ecco come l'ho fatto di recente e sono abbastanza contento di questo approccio ora. Questo è per Ubuntu 12.04 + gentoo, ma suppongo che qualsiasi distro, che consente di installare udev e autofs dovrebbe funzionare.
Prerequisiti: devi aver installato udev + autofs.
Passo 1)
Crea il seguente file "/etc/udev/rules.d/90-usbsd-auto.rules" (ovviamente puoi usare qualsiasi nome purché termini con ".rules"). :
# 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"
Cosa fa: Crea due collegamenti simbolici, uno per la partizione del dispositivo di archiviazione USB in "/ dev / usbdisks / <...>". Utilizzerà l'etichetta della partizione di archiviazione USB o il nome del kernel, se non è presente un'etichetta. Il secondo link simbolico si collegherà da "/ media / usb / <...>" a "/ media / autousb / <...>" per il supporto dell'automounter (vedere il passaggio 2).
Nota: inizialmente non avevo usato le regole con le variabili ID_FS_LABEL_ENC, dal momento che questo è pericoloso secondo me. Cosa succede se si collegano due chiavette USB che utilizzano la stessa etichetta?
Ma il poster voleva specificamente utilizzare l'etichetta del disco USB, quindi ho modificato le regole di conseguenza.
Per assicurarti che udev legga queste regole usa
sudo udevadm control --reload-rules
Con questo file di regole udev tutto è configurato per montare automaticamente la partizione del dispositivo di archiviazione USB. Si noti che in questo momento, il dispositivo NON verrà montato automaticamente (intenzionalmente). Verrà montato automaticamente dopo averlo utilizzato
Passo 2)
Imposta autofs su automount / media / autousb / <...>: ho aggiunto la seguente riga al mio file "/etc/auto.master" (per Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Ciò significa che AutoFS smonterà il dispositivo dopo 60 secondi di inattività. Potresti voler usare meno o più, a seconda dei tuoi gusti.
Per Gentoo devi modificare "/etc/autofs/auto.master" in modo che abbia senso usarlo
/media/autousb /etc/autofs/auto.usb --timeout=60
Ora ho creato "auto.usb" con il seguente contenuto:
#!/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
Questo auto.usb deve essere eseguibile, in modo che autofs lo usi come uno script (bash). Quindi per esempio
sudo chmod 0755 /etc/auto.usb
Cosa fa: Questo script dirà ad AutoFS (/ usr / sbin / automount) come montare la partizione del dispositivo di archiviazione USB.
Lo script utilizzerà prima "/ sbin / blkid" per scoprire quale tipo di file system è sulla partizione.
Lo script fornirà quindi le giuste opzioni di montaggio in base alla partizione del dispositivo.
Nota: ho incluso il codice di esempio per i file system "vfat" (probabilmente più comune per le chiavette USB), "ntfs" e "xfs". Ovviamente è abbastanza facile estenderlo per supportare più file system.
Passaggio 3) Opzionale ... Per "espellere" == smonta le tue chiavette USB (o partizioni sulla chiavetta USB), crea uno script sotto / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
Con questo script potresti usare "sudo usbeject" per smontare tutte le partizioni di dispositivi USB montate (dicendo a automount di smontarle).
Ovviamente puoi semplicemente assicurarti che la partizione non sia usata da nessuna parte; l'automounter smonterà quindi la partizione dopo il timeout di 60 secondi ...
Il vero trucco qui è usare i collegamenti simbolici da "/ media / usb" a "/ media / autousb":
- I symlink "/ media / usb" saranno creati da udev, offrendo all'utente una semplice panoramica delle partizioni del dispositivo di archiviazione USB
- AutoFS eseguirà il montaggio automatico della partizione su richiesta se la si utilizza tramite / media / usb
- Con il file "auto.usb" con script potresti supportare qualsiasi tipo di file system e inoltre puoi supportare qualsiasi tipo di schema di denominazione.
- Questo approccio supporta chiavette USB con più partizioni, anche se queste partizioni utilizzano tipi di file system diversi.