J'ai un système SIM de Debian (Wheezy) (et même pour la voûte pour la voûte), sans aucun environnement de bureau (et pas de Xorg du tout).
Je peux monter mes cartes SD, des bâtons USB, un disque dur externe par l'étiquette dans un répertoire spécifié dans /media/
manuellement avec mount
/umount
et les entrées appropriées de /etc/fstab
, ou automatiquement au démarrage, mais cela est convaincant, de manière restrictive et non dynamique pour mes besoins: si je veux qu'ils soient montés dans /media/<LABEL>
, chaque appareil avec une autre <LABEL>
a besoin de sa propre entrée et chacun <LABEL>
Le sous-répertoire doit être créé/supprimé manuellement dans /media/
également).
Donc, quelle est la meilleure façon de monter automatiquement dans /media/<LABEL>
à l'insertion (et pour les démonter du système de fichiers dès qu'ils sont débranchés Peu importe la manière dont il est risqué pour les données)?
La solution idéale ferait:
/dev/
comme sdax
, sdbx
, ... par udev
)/media/
Selon son étiquette (étiquette du support amovible)/media/<LABEL>
dans le mode RW
(si c'est le système de fichiers supporte cela) avec flush
option (pour un vfat
)/media/
(Les appareils doivent être montés de manière synchrone ovleuse, pour éviter toute perte de données lorsqu'il est chaud débranché à cause de la cache Edit:sync
est beaucoup trop pour vfat
supports amovibles SOflush
a été créé comme compromis , moins sécurisé que sync
, mais moins risqué en fonction des cycles de vie de Souvenirs flash)
J'ai trouvé des informations sur autofs
, HAL
, udisks
, udisks2
, usbmount
etc., mais on ne sait pas lequel est obsolète ou préféré, et de toute façon, je n'ai pas compris comment les configurer facilement sur mon système pour le faire, jusqu'à présent ...
Ok, ça fait longtemps, mais je vais toujours répondre à ma question avec la meilleure option que j'ai trouvée à partir de maintenant. Pour résumer: Créer une règle udev
, associée à certains scripts (qui créera/supprimera des répertoires et des périphériques amovibles de l'ONU/montage) et attaché à udev
Type d'événement de périphérique = partition
.
1 - Création de scripts Ajouter/Supprimer
Enregistrer le script suivant storage-automount.sh
à /lib/udev/
et le rendre exécutable (Sudo chmod a+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=${DEVNAME##*/}
fi
# if a plugdev group exist, retrieve it's 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
Enregistrer le script suivant storage-autounmount.sh
à /lib/udev/
et le rendre exécutable (Sudo chmod a+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=${DEVNAME##*/}
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 - Création de la règle udev
pour joindre ces scripts aux événements
Et enfin, ajoutez une règle udev
dans /etc/udev/rules.d/
, par exemple 85-storage-automount.rules
:
ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"
et faire les mêmes autorisations que les autres règles de ce Dir/Dossier
Maintenant, lorsque vous branchez un périphérique de stockage, un répertoire sera créé dans /media/
Selon le nom de la partition (je ne me souviens pas, mais je pense que cela fonctionne avec la partition NTFS aussi) et votre partition sera montée. C'est R/W pour les utilisateurs si vous avez un groupe plugdev
sur votre système. De plus, les appareils sont montés en mode synchrones afin de limiter les risques de perte de données en cas de débugication à chaud.
Lorsque l'appareil est supprimé, il est démonté et le répertoire est supprimé de /media
En outre, l'outil pour surveiller les événements udev
est udevadm monitor
, avec des options comme --env
ou --property
:
$ udevadm monitor --env
Ceci est testé et fonctionne bien sur Debian et Arch, mais travaille probablement sur toutes les distributions qui s'appuient sur udev
.
Je pense que vous cherchez pmount
.
Si vous voulez un montage automatique lors de l'insertion, voir Autorocalisation des bâtons USB sur Debian .
Si votre système utilise udisks2 , c'est la manière préférée de réagir à l'insertion d'un périphérique de stockage amovible. Voir le Arch Wiki Pour des conseils de configuration pour UDISKS.
Sinon, le programme qui réagit lorsqu'un nouveau périphérique apparaît est udev , le montage automatique est déclenché par a Udev règle . The USBMount Package fournit des règles UDEM pour monter automatiquement des périphériques de stockage USB et quelques autres. Calling mount
des règles Udev Ne fonctionne pas pour les systèmes de fichiers fusibles (tel que NTFS-3G), utilisez donc des uDisks si vous en avez besoin.
Vous ne pouvez pas automatiquement démonter les médias quand ils sont supprimés car la causalité ne fonctionne pas de cette façon. Le support doit être démonté avant il est supprimé. Pour les supports en lecture seule, vous pouvez vous éloigner avec démontage après la suppression, bien que cela puisse confondre certaines applications s'ils disposent de fichiers ouverts sur le système de fichiers soudainement disparu. Pour les médias écrits, si vous débranchez un système de fichiers monté, la corruption des données est probable.
Voici comment je l'ai récemment fait et je suis assez content de cette approche maintenant. C'est pour Ubuntu 12.04 + Gentoo, mais je suppose que toute distribution, ce qui permet d'installer udev et les autofs devraient fonctionner.
Prérequis: vous devez avoir installé Udev + Autofs.
Étape 1)
Créez le fichier suivant "/etc/udiev/ruules.d/90-usbsd-auto.rules" (bien sûr, vous pouvez utiliser n'importe quel nom aussi longtemps que cela 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 symboles de symboles, une pour la partition de périphérique de stockage USB sous "/ dev/usbdisks/<...>". Il utilisera l'étiquette de la partition de stockage USB ou du nom du noyau, s'il n'y a pas d'étiquette. Le second symbolique liera de "/ Media/USB/<...>" à "/ Media/Autoousb/<...>" Ceci est fait pour la prise en charge de l'automobile (voir l'étape 2).
Remarque: je n'avais initialement 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 bâtons USB qui utilisent la même étiquette?
Mais l'affiche souhaitait 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 d'utilisation
Sudo udevadm control --reload-rules
Avec ce fichier de règles UDEM, tout est configuré pour allocaliser la partition de périphérique de stockage USB. Notez que cela en ce moment, l'appareil ne sera pas automobile (intentionnellement). Il sera automobile une fois que vous l'utiliserez avec
Étape 2)
Configurez AUTOFS à Automount/Media/Autoousb/<...>: J'ai ajouté la ligne suivante à mon fichier "/etc/auto.master" (pour Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Cela signifie que les AUTOFS démonteront l'appareil après 60 secondes d'inactivité. Vous voudrez peut-être utiliser moins ou plus, dépendant de votre goût.
Pour gentoo, vous devez modifier "/etc/autofs/auto.master", donc il est 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
Cette auto.usb doit être exécutable, de sorte que Autofs utilise cela comme script (Bash). Donc, par exemple
Sudo chmod 0755 /etc/auto.usb
Qu'est-ce que cela fait: ce script dira des autofs (/ usr/sbin/automne) comment monter la partition de périphérique de stockage USB.
Le script utilisera d'abord "/ sbin/blkid" pour déterminer le type de système de fichiers sur la partition.
Le script fournira ensuite les options de montage droit en fonction de la partition de périphérique.
Remarque: j'ai inclus un exemple de code pour "VFAT" (probablement le plus courant des sticks USB), des systèmes de fichiers "NTFS" et "XFS". Bien sûr, il est assez facile de l'étendre pour prendre en charge plus de systèmes de fichiers.
Étape 3) Facultatif ... Pour "Eject" == Démontez votre clé USB (ou 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ériques USB montées (en disant à l'automobile de les démonter).
Bien sûr, vous pouvez simplement vous assurer que la partition n'est utilisée nulle part; L'automointer démontera alors la partition après la période de 60 secondes ...
L'astuce réelle ici est d'utiliser des liens symboliques à partir de "/ media/USB" à "/ media/autoutb":
S'il vous plaît voir la page Archwiki UDev . Vous n'êtes pas censé exécuter mount
des règles UDev ou des scripts exécutés par les règles UDEV.
Cependant, comme indiqué dans le projet Dev-Media-Media-Automount , il est assez simple de le faire en invoquant une unité SystemD à partir de la règle UDev, qui appelle ensuite un script qui fait le montage. Contrairement à UDISKS2 et à d'autres solutions, Udev-Media-Automount est orienté vers le cas simple où vous souhaitez monter quelque chose en tant qu'utilisateur root
sans attendre nécessairement un environnement de bureau ou une "session d'utilisateur". Il semble que ce soit exactement ce que l'OP demande, et je l'ai trouvé fonctionnel et facile à comprendre.
Je pense que c'est assez tard, mais je posterai ceci si quelqu'un en a besoin: (aussi ma première réponse Stackexchange)
Après avoir vérifié la solution dans de nombreux endroits, j'ai trouvé une solution simple dans Arch Wiki:
Lien vers - Arch Wiki .
Nous pouvons ajouter une règle UDISKS2 pour modifier le répertoire de montage par défaut de /run/media/$USER/
à /media/<Label>
.
Ajoutez la règle suivante dans /etc/udev/rules.d/
avec nom comme 99-udisks2.rules
:
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
Ensuite, nous pouvons simplement installer un outil simple comme diskie pour Automount.
J'ai trouvé un moyen de le faire en modifiant/etc/fstab fichier. Une simple entrée ressemble à:
/dev/sdb1 /media/robot/hdd1 ntfs defaults 0 0
<file system> <mount point> <type> <options> <dump> <pass>