Nous mettons à jour nos serveurs d'une distribution très obsolète à un système moderne basé sur Debian Jessie, y compris lightdm / xfce, et bien sûr systemd (et udisks2). Un point de blocage est le montage automatique de clés USB. Nous avions l'habitude d'accomplir cela avec quelques règles udev. Les anciennes règles fonctionnent presque toujours - le point de montage est créé et le lecteur est monté correctement, mais après quelques secondes, systemd fait quelque chose qui rompt le montage, de sorte que les tentatives d'accès suivantes entraînent des erreurs «Le point d'extrémité de transport n'est pas connecté».
Le montage manuel du lecteur via la ligne de commande fonctionne correctement. Il en va de même pour un gestionnaire de fichiers (thunar et thunar-volman, qui à son tour utilise udisks2). Mais ce ne sont pas des options viables - ces systèmes fonctionnent généralement sans tête, donc thunar ne fonctionne pas normalement. Nous devons être capables de brancher des unités de disque pour des sauvegardes cron sans assistance.
Je pensais que la modification du script udev pour générer un travail détaché qui attend quelques secondes avant d'effectuer le montage pourrait faire l'affaire, mais systemd semble se mettre en quatre pour éviter cela - il attend toujours que le travail détaché se termine avant continue.
Peut-être que le script udev chatouille udisks2 est en quelque sorte la bonne approche? Je suis perdu, donc tout conseil est grandement apprécié.
la source
Réponses:
Après plusieurs faux départs, j'ai compris cela. La clé est d'ajouter un service d'unité systemd entre udev et un script de montage.
(Pour mémoire, je n'ai pas pu faire fonctionner cela en utilisant udisks2 (via quelque chose comme
udisksctl mount -b /dev/sdb1
) appelé directement à partir d'une règle udev ou d'un fichier d'unité systemd. Il semble y avoir une condition de concurrence critique et le nœud de périphérique n'est pas tout à fait prêt , résultant enError looking up object for device /dev/sdb1
. Malheureusement, car udisks2 pourrait prendre soin de tout le désordre de point de montage ...)Le gros du travail est effectué par un script shell, qui prend en charge la création et la suppression des points de montage, ainsi que le montage et le démontage des disques.
/usr/local/bin/usb-mount.sh
Le script, à son tour, est appelé par un fichier d'unité systemd. Nous utilisons la syntaxe de nom de fichier "@" afin de pouvoir passer le nom du périphérique en argument.
/etc/systemd/system/[email protected]
Enfin, certaines règles udev démarrent et arrêtent le service d'unité systemd sur hotplug / unplug:
/etc/udev/rules.d/99-local.rules
Cela semble faire l'affaire! Quelques commandes utiles pour déboguer des trucs comme celui-ci:
udevadm control -l debug
active la journalisation détaillée pour/var/log/syslog
que vous puissiez voir ce qui se passe.udevadm control --reload-rules
après avoir modifié des fichiers dans le dir rules.d (peut ne pas être nécessaire, mais ne peut pas faire de mal ...).systemctl daemon-reload
après avoir modifié les fichiers d'unité systemd.la source
blkid
il ne semble pas en extraire unID_FS_LABEL
, j'ai donc simplement utilisé leDEVBASE
plutôt queLABEL
de le construire à laMOUNT_POINT
place.udevadm
place deblkid
. Il donne beaucoup plus de détails ainsi que des informations supplémentaires. (par exemple,udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. Le nettoyage peut utiliser une vérification supplémentaire commeif [ "$f" != "/media/*" ]; then
avant l'exécutionfind
.il existe une nouvelle
systemd
option de montage automatique succinct qui peut être utilisée avecfstab
laquelle vous pouvez utiliser toutes les options d'autorisation de montage standardisées, et cela ressemble à ceci:un exemple de celui-ci dans une
fstab
ligne:l'
noauto
option signifie qu'il ne tentera pas d'être monté au démarrage, comme avec les logiciels plus anciensautofs
.après avoir ajouté une nouvelle
x-systemd.automount
ligne,fstab
vous devez exécuter:puis les deux ou l'un des éléments suivants:
pour plus d'informations à ce sujet:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
la source
sudo systemctl restart local-fs.target
a fait l'affaire pour moiJ'ai modifié le script de @MikeBlackwell en:
/dev/sd[a-z]
mais/dev/sd[a-z]*
; souvent le cas avec des serveurs qui ont un plus grand nombre de broches./var/log/usb-mount.track
/var/log/messages
avec la balise usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Étant donné que @MikeBlackwell a déjà effectué la plupart des travaux lourds, j'ai choisi de ne pas le réécrire; vient de faire les changements nécessaires. J'ai reconnu son travail en voyant son nom et l'URI de la réponse originale.
Trouvez-le sur https://github.com/raamsri/automount-usb
la source
En utilisant pmount , systemd et l'approche de Mike Blackwell, vous pouvez simplifier le tout:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH et merci Mike.
la source
J'irais avec la réponse de Warren Young J'ai quelques modifications que j'ai apportées à
J'ai ajouté une protection d'espace car cela donnait des erreurs de l'évaluation de l'environnement pour le lecteur.
J'ai ajouté une section pour chmoder un disque USB afin que tous les utilisateurs aient un accès complet aux disques non ntfs ou vfat.
/usr/local/bin/usb-mount.sh
la source