Il montaggio di Systemd non riesce. Where = setting non corrisponde al nome dell'unità


20

Se uso questo comando:

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

tutto funziona correttamente. Ma se provo a montare il systemdmount non riesce.

Ho creato un file /etc/systemd/system/mnt-d1.mountcon il seguente contenuto:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

Dopodiché eseguo questi comandi:

systemctl daemon-reload
systemctl start mnt-d1.mount

L'ultimo mi ha mostrato:

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 mi ha fatto vedere:

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.

Aiutami a montare un disco tramite systemdun'unità di montaggio.


Non funziona ancora. Lo stesso errore
Alexandr,

Questa domanda dovrebbe essere riaperta: ho avuto lo stesso problema e la soluzione presentata nel commento mi ha aiutato. Il commento dovrebbe essere una risposta in modo da poterlo votare.
Guss,

Risposte:


26

Il messaggio di errore spiega la causa:

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

anche se capire quel messaggio richiede la lettura di più pagine man.
Per systemd.mountpagina man (enfatizzare la mia):

Where=

Prende un percorso assoluto di una directory del punto di montaggio. Se il punto di montaggio non esiste al momento del montaggio, viene creato. Questa stringa deve essere riflessa nel nome file dell'unità. (Vedi sopra.) Questa opzione è obbligatoria.

La parte "vedi sopra" è:

Le unità di mount devono avere il nome delle directory dei mount point che controllano. Esempio: il punto di montaggio /home/lennartdeve essere configurato in un file di unità home-lennart.mount. Per i dettagli sulla logica di escape utilizzata per convertire un percorso del file system in un nome di unità, vedere systemd.unit(5).

OK, la systemd.unitpagina man afferma che:

I percorsi con escape corretto possono essere generati usando il systemd-escape(1) comando

indicando la systemd-escapepagina man che spiega come farlo:

Per generare l'unità di montaggio per un percorso:

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

Quindi, nel tuo caso, si /srv/node/d1traduce insrv-node-d1.mount


3
È importante notare che il sistema di "escape del percorso" può diventare un po 'complesso anche occupandosi di nomi non AZ. Anche alcuni trattini nel percorso dovranno essere convertiti in \x2descape in stile C , che quando utilizzato per creare il file di unità potrebbe (a seconda della shell / dell'editor) dover uscire di nuovo dal carattere barra - quindi il montaggio del file di unità /some-pathpotrebbe richiede di correreedit some\\x2dpath.mount
Guss

Sono finito qui cercando di capire perché non riuscivo a montare share-name. Rinominare ha share_namerisolto il problema.
Brian Z

Darei un doppio voto se potessi!
John Mee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.