J'utilise Debian Squeeze sur un ordinateur plug (donc SSH uniquement, pas d'interface graphique) et ce que j'essaie de faire, c'est de l'obtenir de sorte que lorsqu'une clé USB est branchée, elle soit automatiquement montée.
Ce que j'ai fait, c'est installer autofs
qui, d'après ce que j'ai rassemblé, gère le montage automatique à condition qu'il sache où se trouve l'appareil /dev
.
Le problème est que la clé USB ne porte pas toujours le même nom d'appareil. Parfois c'est /dev/sdc1
, parfois /dev/sdd1
, etc.
Je suppose que pour y remédier, je dois utiliser udev
pour m'assurer que la clé USB porte toujours le même nom.
J'ai obtenu les informations suivantes de udevadm
:
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/block/sdd/sdd1':
KERNEL=="sdd1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{partition}=="1"
ATTR{start}=="63"
ATTR{size}=="129339"
ATTR{ro}=="0"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{stat}==" 31 244 275 190 0 0 0 0 0 190 190"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0/block/sdd':
KERNELS=="sdd"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{range}=="16"
ATTRS{ext_range}=="256"
ATTRS{removable}=="1"
ATTRS{ro}=="0"
ATTRS{size}=="129439"
ATTRS{alignment_offset}=="0"
ATTRS{discard_alignment}=="0"
ATTRS{capability}=="51"
ATTRS{stat}==" 56 727 783 520 0 0 0 0 0 520 520"
ATTRS{inflight}==" 0 0"
ATTRS{events}=="media_change"
ATTRS{events_async}==""
ATTRS{events_poll_msecs}=="-1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0':
KERNELS=="8:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{vendor}==" "
ATTRS{model}=="Flash Disk "
ATTRS{rev}=="2.00"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{iocounterbits}=="32"
ATTRS{iorequest_cnt}=="0x90"
ATTRS{iodone_cnt}=="0x90"
ATTRS{ioerr_cnt}=="0x0"
ATTRS{modalias}=="scsi:t-0x00"
ATTRS{evt_media_change}=="0"
ATTRS{queue_depth}=="1"
ATTRS{queue_type}=="none"
ATTRS{max_sectors}=="240"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0':
KERNELS=="target8:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8':
KERNELS=="host8"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0':
KERNELS=="1-1.2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="02"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{modalias}=="usb:v1976p6025d0100dc00dsc00dp00ic08isc06ip50"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2':
KERNELS=="1-1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="383"
ATTRS{idVendor}=="1976"
ATTRS{idProduct}=="6025"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="1"
ATTRS{devnum}=="11"
ATTRS{devpath}=="1.2"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="197"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{bcdDevice}=="0111"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{product}=="USB 2.0 Hub"
looking at parent device '/devices/platform/orion-ehci.0/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="24"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
ATTRS{bcdDevice}=="0206"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="1"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.38.8 ehci_hcd"
ATTRS{product}=="Marvell Orion EHCI"
ATTRS{serial}=="orion-ehci.0"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/platform/orion-ehci.0':
KERNELS=="orion-ehci.0"
SUBSYSTEMS=="platform"
DRIVERS=="orion-ehci"
ATTRS{modalias}=="platform:orion-ehci"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
J'ai essayé d'écrire des udev
règles pour forcer la clé USB à prendre le nom /dev/usbstick
mais jusqu'à présent, je n'ai pas réussi.
Quelqu'un peut-il m'aider avec quelle règle je dois spécifier dans mon fichier de règles pour que cette clé USB obtienne toujours le même nom?
- Ou, y a-t-il un moyen beaucoup plus simple de monter automatiquement la clé USB qui me manque complètement?
METTRE À JOUR
OK, j'ai donc fait des progrès. J'ai ajouté la règle suivante:
SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
Je sais que cela nécessite encore un peu de travail en termes de gestion de l'ajout / suppression, mais ce n'est qu'un test de base pour l'instant.
L'effet de ceci est que je parviens maintenant à obtenir trois nouveaux nœuds de périphérique /dev
, à savoir /dev/usbstick-sdc
, /dev/usbstick-sdc1
et usbstick-sg2
.
Cependant, ce que j'ai trouvé, c'est que le code de la RUN
section ne s'exécute qu'une seule fois et ne fait qu'un répertoire mnt/usbstick-sdc
. J'ai également constaté que le répertoire est toujours vide, donc quelque chose ne tourne toujours pas rond! (même si je progresse).
/dev/sdc1
censée êtresdd1
? Et vous pouvez utiliserblkid
pour identifier de manière unique le lecteur (enfin, en fait la partition; cela changera si vous reformatez).udev
règle pour créer des nœuds de périphérique pour chaque partition, mais je ne sais pas pour quel niveau deudevadm
sortie créer des règles!ACTION==
, unKERNEL==
et unATTRS{something}==
(c'est complètement faisable - c'est ce que j'utilise). Pensez également à exécuter un seul script à partir de la chaîne de commandes deRUN+=
.KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
- mais non, bien sûr, cela ne fonctionne pas non plus. Je suis de plus en plus frustré après avoir passé presque toute la journée à essayer simplement de trouver un moyen de brancher une clé USB pour qu'elle se monte. Les choses devraient-elles vraiment être si difficiles? La sortie deudevadm test /sys/block/sdd
est - bien sûr - pratiquement illisible, donc je n'ai aucun moyen de savoir où je me trompe. Quelqu'un peut-il m'orienter dans la bonne direction à ce sujet?Réponses:
J'ai pensé qu'il devrait y avoir un moyen beaucoup plus facile de résoudre un problème aussi courant, et c'est le cas. Voici ce que j'ai essayé sur mon serveur Wheezy / Sid:
Branchez la clé USB, c'est fait! Mon stick est désormais accessible via
/media/usb
.Btw, usbmount n'a pas de page de manuel, veuillez lire à la
/usr/share/doc/usbmount/README.gz
place. Il semble que usbmount monte votre stick avec l'option de synchronisation par défaut. Il pourrait être bien mieux pour votre bâton de le monter en mode asynchrone et de l'exécutersync
ouumount
avant de le débrancher. C'est configurable.la source
pumount
usbmount
ne supporte plus NTFS depuis Debian Jessie: bugs.debian.org/774149Notez que vous ne pouvez pas simplement avoir un seul nœud de périphérique pour représenter n'importe quelle clé USB connectée. Et si vous en branchez deux? Ou lorsque la clé USB a plus d'une partition?
Généralement, ce que vous utilisez pour créer un nœud d'appareil nommé personnalisé est
SYMLINK+=
. grep dans les règles pour voir comment il est utilisé:grep SYMLINK /etc/udev/rules.d/*
. Comme dans toutes les commandes déclenchées par udev, vous pouvez utiliser certaines variables significatives décrites dansman udev
. Vous pourriez vous rendre compte que vous n'avez pas vraiment besoin de donner un nom personnalisé à l'appareil, car vous pouvez donner son nom à un script (via la%k
variable).En ce qui concerne la solution de montage automatique, jetez un œil à l' UAM , que j'ai décrit un peu dans la réponse à cette question .
la source
udev
règles avec des scripts d'accompagnement. Vous pouvez consulter les règles et les adapter facilement à vos besoins.udevadm
et me dire de quel appareil est le périphérique que je devrais réellement cibler avec ma règle? Les divers exemples que j'ai vus en ligne semblent tous impliquer des arbres beaucoup plus courts et chaque exemple semble cibler un niveau différent de périphérique, sans aucune explication sur celui qui devrait être ciblé et pourquoi.Voici comment je l'ai fait récemment, et je suis maintenant très satisfait de cette approche. 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"). :
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 / <...>".
Le deuxième lien symbolique reliera de "/ media / usb / <...>" à "/ media / autousb / <...>" ceci est fait pour le support de montage automatique (voir l'étape 2).
Pour vous assurer que udev lit ces règles, utilisez
Remarque: Même nom pour la même clé USB: Possible mais peut-être dangereux: Vous pouvez utiliser par exemple "$ env {ID_FS_LABEL_ENC}", au lieu de "% k" dans les règles UDEV ci-dessus. Cela utilisera l'étiquette de volume pour créer / media / usb / <...>, mais que se passe-t-il si vous branchez deux clés USB et que les deux utilisent la même étiquette de volume ...
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):
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
Maintenant, j'ai créé "auto.usb" avec le contenu suivant:
Ce fichier auto.usb doit être exécutable, afin que autofs l'utilise comme un script (bash). Donc par exemple
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 les systèmes de fichiers "vfat" (probablement les plus courants pour les clés USB), "ntfs" et "ext4". 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:
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 ...
La vraie astuce ici est d'utiliser des liens symboliques de "/ media / usb" vers "/ media / autousb":
la source
Désolé de répondre à ma propre question, et merci beaucoup à rozcietrzewiacz pour sa contribution, mais j'ai finalement réussi à faire des progrès importants en utilisant la règle suivante après des heures de lecture en ligne:
SUBSYSTEMS=="scsi", KERNEL=="sd[a-h]1", SYMLINK+="removable", RUN+="/bin/mount /dev/removable /path/to/mount"
Cela montera la première partition de tout périphérique SCSI. Je suppose que la question suivante sera de savoir comment monter plusieurs partitions, mais c'est un autre problème pour un autre jour.
la source
removable
attribut que vous devriez tester, et non à lablock
placescsi
.J'ai trouvé que la meilleure réponse est devenue obsolète, car elle n'est pas maintenue et ne fonctionne pas sur / depuis Jessie (voir le commentaire de malat)
Pour moi (sur Jessie), la solution de ce blog a fonctionné comme un charme.
Crédits à "ddumont", mais en affichant ici un aperçu de son blog / réponse, pour faire face à une éventuelle pourriture des liens à l'avenir.
Ajoutez la ligne suivante à
/etc/fstab
Vous pouvez le faire en utilisant nano:
Explication:
/dev/sr0
est le fichier du périphérique. Vous pouvez également utiliser l'un des liens symboliques configurés par udev dans / dev / disk / by-id. Vous devrez le modifier en fonction du fichier de votre appareil (sudo fdisk -l
pour répertorier les appareils)/media/bluray
est le point de montage. Vous pouvez choisir un autre point de montagenofail
est nécessaire pour éviter le rapport d'échec lors du démarrage sans disque dans le lecteur optiquex-systemd.automount
est l'option pour configurer systemd pour monter automatiquement le disque inséréNe spécifiez pas noauto: cela empêcherait systemd de monter automatiquement un disque, ce qui va à l'encontre de l'objectif.
Tester
Exécutez la commande
journalctl -x -f
dans un terminal pour vérifier ce qui se passe avec systemdRechargez la configuration systemd avec
sudo systemctl daemon-reload
.charger un disque dans votre lecteur optique
Ensuite, journalctl devrait montrer quelque chose comme:
Plus loin
Pour monter avec succès des lecteurs NTFS, j'ai dû installer ntfs-3g (anciens ntfsprogs)
Je n'ai pas eu à installer hfsprogs pour faire fonctionner une clé USB au format OSX, mais vous devriez le vérifier vous-même.
la source