Voici comment je l'ai fait récemment, et je suis assez satisfait de cette approche maintenant. C'est pour Ubuntu 12.04 + gentoo, mais je suppose que toute distribution, qui permet d'installer udev et autofs devrait fonctionner.
Prérequis: Vous devez avoir installé udev + autofs.
Étape 1)
Créez le fichier "/etc/udev/rules.d/90-usbsd-auto.rules" suivant (vous pouvez bien sûr utiliser n'importe quel nom tant qu'il se termine par ".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"
Qu'est-ce que cela fait: Il crée deux liens symboliques, un pour la partition du périphérique de stockage USB sous "/ dev / usbdisks / <...>". Il utilisera soit l'étiquette de la partition de stockage USB, soit le nom du noyau, s'il n'y a pas d'étiquette. Le deuxième lien symbolique reliera de "/ media / usb / <...>" à "/ media / autousb / <...>" ceci est fait pour la prise en charge des montages automatiques (voir l'étape 2).
Remarque: à l'origine, je n'ai pas utilisé les règles avec les variables ID_FS_LABEL_ENC, car cela est dangereux à mon avis. Que se passe-t-il si vous branchez deux clés USB qui utilisent la même étiquette?
Mais l'affiche voulait spécifiquement utiliser l'étiquette du disque USB, j'ai donc modifié les règles en conséquence.
Pour vous assurer que udev lit ces règles, utilisez
sudo udevadm control --reload-rules
Avec ce fichier de règles udev, tout est configuré pour monter automatiquement la partition du périphérique de stockage USB. Notez cependant que pour le moment, l'appareil ne sera PAS monté automatiquement (intentionnellement). Il sera monté automatiquement une fois que vous l'utiliserez avec
Étape 2)
Configurer autofs pour monter automatiquement / media / autousb / <...>: J'ai ajouté la ligne suivante à mon fichier "/etc/auto.master" (pour Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Cela signifie qu'AutoFS démontera l'appareil après 60 secondes d'inactivité. Vous voudrez peut-être en utiliser moins ou plus, selon votre goût.
Pour Gentoo, vous devez modifier "/etc/autofs/auto.master" afin qu'il soit logique d'utiliser
/media/autousb /etc/autofs/auto.usb --timeout=60
Maintenant, j'ai créé "auto.usb" avec le contenu suivant:
#!/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
Ce fichier auto.usb doit être exécutable, afin que autofs l'utilise comme un script (bash). Donc par exemple
sudo chmod 0755 /etc/auto.usb
Qu'est-ce que cela fait: ce script indiquera à AutoFS (/ usr / sbin / automount) comment monter la partition du périphérique de stockage USB.
Le script utilisera d'abord "/ sbin / blkid" pour savoir quel type de système de fichiers se trouve sur la partition.
Le script fournira alors les bonnes options de montage en fonction de la partition du périphérique.
Remarque: J'ai inclus un exemple de code pour "vfat" (probablement le plus courant pour les clés USB), "ntfs" et "xfs". Bien sûr, il est assez facile de l'étendre pour prendre en charge davantage de systèmes de fichiers.
Étape 3) Facultatif ... Pour "éjecter" == démonter votre clé USB (ou vos partitions sur votre clé USB), créez un script sous / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
Avec ce script, vous pouvez utiliser "sudo usbeject" pour démonter toutes les partitions de périphérique USB montées (en disant à automount de les démonter).
Bien sûr, vous pouvez simplement vous assurer que la partition n'est utilisée nulle part; automounter démontera ensuite la partition après l'expiration du délai de 60 secondes ...
Le vrai truc ici est d'utiliser des liens symboliques de "/ media / usb" vers "/ media / autousb":
- Les liens symboliques "/ media / usb" seront créés par udev, donnant à l'utilisateur un aperçu simple des partitions des périphériques de stockage usb présentes
- AutoFS montera ensuite automatiquement la partition à la demande si vous l'utilisez via / media / usb
- Avec le fichier scripté "auto.usb", vous pouvez prendre en charge tout type de système de fichiers et vous pouvez également prendre en charge tout type de schéma de dénomination.
- Cette approche prend en charge les clés USB avec plusieurs partitions, même si ces partitions utilisent différents types de système de fichiers.