Montage automatique de divers systèmes de fichiers de clés USB sur Jessie Lite

18

Je veux pouvoir monter automatiquement des clés USB fat32 et ntfs formatées à la volée, comme le branchement à chaud sans redémarrer mon Raspberry Pi 2. J'ai installé ntfs-3g sur jessie-lite .

Mettre l'UUID fstabn'est pas une option car je devrais trouver l'UUID de chaque appareil. Je veux pouvoir brancher différents périphériques USB avec différents formats de fichiers et les monter automatiquement. Est-ce possible?

Une fois, j'ai presque réussi à le faire fonctionner avec le usbmountprogramme. J'ai pu accéder à mon lecteur pendant une seconde avant d'obtenir l'erreur transport endpoint is not connected. J'ai réinstallé le programme, mais je ne suis même jamais revenu à ce point, pas même avec l'erreur.

F. Untermoser
la source

Réponses:

15

Après beaucoup de recherches, j'ai pu résoudre mon problème avec usbmount:

Ajout de ntfs à usbmount

  1. Installez usbmount avec sudo apt-get install usbmount.
  2. Installez le package de pilotes NTFS ntfs-3g avec sudo apt-get install ntfs-3g.

  3. Configurez usbmount pour monter les systèmes de fichiers spécifiés en ouvrant le fichier usbmount avec sudo nano /etc/usbmount/usbmount.conf.

Ici, il y a une ligne appelée FILESYSTEMS="". Seuls les systèmes de fichiers spécifiés dans cette ligne sont montés via usbmount, nous le changeons donc en:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

Si vous voulez que usbmount monte des systèmes de fichiers NTFS, assurez-vous d'ajouter ntfs et fuseblk à la ligne. Les périphériques NTFS sont parfois répertoriés comme fusblk par le package ntfs-3g, donc ces deux sont les mêmes. Je ne sais pas vraiment pourquoi.

De plus, si vous n'ajoutez pas de fusible dans la configuration, les périphériques NTFS débranchés ne se démonteront pas automatiquement. Ils resteront montés et conserveront le dossier dans lequel ils sont montés jusqu'à ce que l'appareil soit démonté manuellement avec unmount /dev/sda1 -> où sda1 pourrait être une autre variable .

La prochaine ligne importante est FS_MOUNTOPTIONS="". Ici, vous spécifiez quels systèmes de fichiers doivent être montés et comment ils doivent être montés.

Nous le changeons en: FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"

Avec cela, les systèmes de fichiers vfat (fat32) ntfs-3g (NTFS) et fuseblk (NTFS à nouveau) sont montés. Je pense que la plupart des paramètres peuvent rester les mêmes. Encore une fois, ajoutez simplement ntfs-3g ( ajoutez ntfs-3g et non ntfs ) et fuseblk pour pouvoir monter tous les fichiers NTFS. Pour plus de systèmes de fichiers, ajoutez plus de lignes commençant par -fstype=.

Garder NTFS monté jusqu'à ce que le périphérique soit débranché

Voici une solution au problème, lorsque le lecteur NTFS monté n'est accessible que pendant quelques secondes. Ce correctif provient de Christian Weinberger .

  1. Créez le fichier usbmount.rules dans /etc/udev/rules.d/ avec sudo nano /etc/udev/rules.d/usbmount.rules.

Voici le contenu:

KERNEL=="sd*", DRIVERS=="sbp2",         ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="ub*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p [email protected] $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
KERNEL=="ub*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
  1. Créez le fichier usbmount @ .service dans / etc / systemd / system / avec sudo nano /etc/systemd/system/[email protected].

Voici le contenu:

[Unit]
BindTo=%i.device
After=%i.device

[Service]
Type=oneshot
TimeoutStartSec=0
Environment=DEVNAME=%I
ExecStart=/usr/share/usbmount/usbmount add
RemainAfterExit=yes

Maintenant, redémarrez et vérifiez cat /etc/mtabdans quel dossier les périphériques USB sont montés. Par défaut, ils sont montés sur / media / usbstick0 .

La source:

Chrétiens Fix

Pourquoi fusblk?

F. Untermoser
la source
Cette solution nécessite quelques étapes supplémentaires, voir ma réponse.
AbiusX
2

La réponse de Untermoser est correcte, mais elle interrompra certaines fonctionnalités de montage USB.

Parce qu'il utilise des unités Systemd pour générer des processus à monter (pour activer NTFS), la variable d'environnement $DEVPATHn'est plus envoyée à la usbmount addcommande, ce qui entraîne l'échec de la création du lien symbolique.

Pour résoudre ce problème, exécutez ce qui suit:

sed -i '/# Determine vendor/,/if/ s/\(.*vendor=\)/if [ -z "$DEVPATH" ]; then DEVPATH="$(udevadm info --query=path --name=\/$DEVNAME)"; fi\n\1/g' /usr/share/usbmount/usbmount

La commande ci-dessus recrée $DEVPATHsi elle n'est pas disponible.

Il y a aussi un autre bug dans usbmount, en ce qui concerne usbmount remove. Il boucle sur les points de montage, et celui qui est défini dans la configuration usmount est démonté. Cependant, si une correspondance est trouvée mais ne figure pas dans cette liste, supprimez les sauts et ne fait rien. Ceci est particulièrement crucial si vous créez plusieurs points de montage pour un USB, car usbmount voit le premier et ne fait rien.

Pour corriger, la modification suivante est nécessaire:

sed -i '/umount.d ||/,/break/ s/break.*//; /umount.d ||/,/done/ s/:/:\n\t\tbreak 2/' /usr/share/usbmount/usbmount

Cela déplacera la pause à l'intérieur de la boucle intérieure (où le succès est garanti et la pause de 2 étapes).

AbiusX
la source
1

Pour ceux qui essaient d'obtenir le même fonctionnement sur le nouveau Stretch (Lite) et constatent que les réponses d'Untermoser et d'AlbiusX ne démontent pas les lecteurs vfat, vous devrez suivre ces étapes supplémentaires en plus des réponses fournies. :

Exécutez la commande suivante dans le terminal:

sudo mkdir -p /etc/systemd/system/systemd-udevd.service.d/

Cela créera les dossiers requis nécessaires. Ensuite, créez un fichier de conf ici, par exemple:

sudo nano /etc/systemd/system/systemd-udevd.service.d/shared-mount-ns.conf

Dans ce fichier, ajoutez les lignes suivantes:

[Service] MountFlags=shared

Cela changera le comportement par défaut de systemd-udevd des espaces de noms de systèmes de fichiers privés pour en utiliser des partagés, ce qui équivaut au comportement d'udev dans jessie.

(Provenant de /unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156 )

Nacsiar
la source
C'était donc le problème depuis le début - je regardais des documents obsolètes. Suis en cours Linux raspberrypi 4.14.79-v7+d' exécution sur le Pi, pour référence
ctietze