Le montage de Systemd échoue. Où = le paramètre ne correspond pas au nom de l'unité

20

Si j'utilise cette commande:

mount -t xfs -o noatime,nodiratime,logbufs=8 -L d1 /srv/node/d1

tout fonctionne correctement. Mais si j'essaie de monter à travers le systemdsupport, il échoue.

J'ai créé un fichier /etc/systemd/system/mnt-d1.mountavec le contenu suivant:

[Unit]
Description = Disk 1

[Mount]
What = LABEL=d1
Where = /srv/node/d1
Type = xfs
Options = noatime,nodiratime,logbufs=8

[Install]
WantedBy = multi-user.target

Après cela, j'exécute ces commandes:

systemctl daemon-reload
systemctl start mnt-d1.mount

Le dernier m'a montré:

Failed to start mnt-d1.mount: Unit mnt-d1.mount failed to load: Invalid argument.  
See system logs and 'systemctl status mnt-d1.mount' for details.

systemctl status mnt-d1.mount m'a montré:

May 16 18:13:52 object1 systemd[1]: Cannot add dependency job for unit mnt-d1.mount, ignoring: Unit mnt-d1.mount failed to ...ectory.
May 16 18:24:05 object1 systemd[1]: mnt-d1.mount's Where= setting doesn't match unit name. Refusing.

Aidez-moi à monter un disque via une systemdunité de montage.

Alexandr
la source
Ne fonctionne toujours pas .. La même erreur
Alexandr
Cette question devrait être rouverte - j'ai eu le même problème et la solution présentée dans le commentaire m'a aidé. Le commentaire doit être une réponse afin que je puisse le voter.
Guss

Réponses:

26

Le message d'erreur explique la cause:

Where= setting doesn't match unit name. Refusing.

bien que la compréhension de ce message nécessite la lecture de plusieurs pages de manuel.
Par systemd.mountpage de manuel (mettez l'accent sur le mien):

Where=

Prend un chemin absolu d'un répertoire du point de montage. Si le point de montage n'existe pas au moment du montage, il est créé. Cette chaîne doit être reflétée dans le nom de fichier de l'unité. (Voir ci-dessus.) Cette option est obligatoire.

La partie "voir ci-dessus" est:

Les unités de montage doivent être nommées d'après les répertoires de points de montage qu'elles contrôlent. Exemple: le point de montage /home/lennartdoit être configuré dans un fichier unité home-lennart.mount. Pour plus d'informations sur la logique d'échappement utilisée pour convertir un chemin d'accès au système de fichiers en nom d'unité, voir systemd.unit(5).

OK, la systemd.unitpage de manuel indique que:

Des chemins correctement échappés peuvent être générés à l'aide de la systemd-escape(1) commande.

pointant vers la systemd-escapepage de manuel qui explique comment le faire:

Pour générer l'unité de montage pour un chemin:

$ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/"
tmp-waldi-foobar.mount

Donc, dans votre cas, se /srv/node/d1traduit parsrv-node-d1.mount

don_crissti
la source
3
Il est important de noter que le système "échappement de chemin" peut devenir un peu complexe, même avec des noms non AZ. Même certains tirets du chemin devront être convertis en un \x2déchappement de style C qui, lorsqu'il est utilisé pour créer le fichier d'unité, peut (en fonction de votre shell / éditeur) devoir à nouveau échapper le caractère barre oblique - de sorte que le montage adapté du fichier d'unité /some-pathpeut nécessite de couriredit some\\x2dpath.mount
Guss
J'ai fini par essayer de comprendre pourquoi je ne pouvais pas monter share-name. Le renommer a share_namerésolu le problème.
Brian Z
Je donnerais un double vote positif si je le pouvais!
John Mee