El montaje del sistema falla. Donde = la configuración no coincide con el nombre de la unidad

20

Si uso este comando:

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

Todo funciona correctamente. Pero si intento montar a través del systemdmontaje, falla.

He creado un archivo /etc/systemd/system/mnt-d1.mountcon el siguiente contenido:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

Después de eso ejecuto estos comandos:

systemctl daemon-reload
systemctl start mnt-d1.mount

El último me mostró:

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 me mostró:

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.

Ayúdame a montar un disco a través de una systemdunidad de montaje.

Alexandr
fuente
Todavía no funciona .. El mismo error
Alexandr
Esta pregunta debe reabrirse: he tenido el mismo problema y la solución presentada en el comentario me ayudó. El comentario debe ser una respuesta para que pueda votarlo.
Guss

Respuestas:

26

El mensaje de error explica la causa:

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

aunque entender ese mensaje requiere leer varias páginas de manual.
Por systemd.mountpágina de manual (enfatice la mía):

Where=

Toma una ruta absoluta de un directorio del punto de montaje. Si el punto de montaje no existe en el momento del montaje, se crea. Esta cadena debe reflejarse en el nombre de archivo de la unidad. (Ver arriba). Esta opción es obligatoria.

La parte "ver arriba" es:

Las unidades de montaje deben nombrarse después de los directorios de puntos de montaje que controlan. Ejemplo: el punto de montaje /home/lennartdebe configurarse en un archivo de unidad home-lennart.mount. Para obtener detalles sobre la lógica de escape utilizada para convertir una ruta del sistema de archivos a un nombre de unidad, consulte systemd.unit(5).

OK, la systemd.unitpágina del manual dice que:

Las rutas de escape correctamente se pueden generar con el systemd-escape(1) comando

apuntando a la systemd-escapepágina de manual que explica cómo hacerlo:

Para generar la unidad de montaje para una ruta:

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

Entonces, en su caso, se /srv/node/d1traduce ensrv-node-d1.mount

don_crissti
fuente
3
Es importante tener en cuenta que el sistema de "escape de ruta" puede volverse un poco complejo incluso cuando se trata de nombres que no son AZ. Incluso algunos guiones en la ruta deberán convertirse al \x2descape de estilo C , que cuando se usa para crear el archivo de la unidad puede (dependiendo de su shell / editor) necesitar escapar nuevamente del carácter de barra, por lo que el montaje del archivo de la unidad /some-pathpuede requieren correredit some\\x2dpath.mount
Guss
Terminé aquí tratando de descubrir por qué no podía montar share-name. Renombrarlo share_nameresolvió el problema.
Brian Z
¡Daría un doble voto si pudiera!
John Mee