A montagem do Systemd falha. Onde = a configuração não corresponde ao nome da unidade

20

Se eu usar este comando:

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

tudo funciona corretamente. Mas se eu tentar montar através da systemdmontagem, ele falhará.

Eu criei um arquivo /etc/systemd/system/mnt-d1.mountcom o seguinte conteúdo:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

Depois disso, eu executo estes comandos:

systemctl daemon-reload
systemctl start mnt-d1.mount

O último me mostrou:

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 mostrou-me:

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.

Por favor, ajude-me a montar um disco através de uma systemdunidade de montagem.

Alexandr
fonte
Ainda não funciona .. O mesmo erro #
Alexandr
Esta pergunta deve ser reaberta - eu tive o mesmo problema e a solução apresentada no comentário me ajudou. O comentário deve ser respondido para que eu possa votar novamente.
Guss 16/02

Respostas:

26

A mensagem de erro explica a causa:

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

embora entender essa mensagem exija a leitura de várias páginas do manual.
Por systemd.mountpágina de manual (enfatize a minha):

Where=

Leva um caminho absoluto de um diretório do ponto de montagem. Se o ponto de montagem não existir no momento da montagem, ele será criado. Essa sequência deve ser refletida no nome do arquivo da unidade. (Veja acima.) Esta opção é obrigatória.

A parte "veja acima" é:

As unidades de montagem devem ser nomeadas de acordo com os diretórios do ponto de montagem que controlam. Exemplo: o ponto de montagem /home/lennartdeve ser configurado em um arquivo de unidade home-lennart.mount. Para obter detalhes sobre a lógica de escape usada para converter um caminho do sistema de arquivos em um nome de unidade, consulte systemd.unit(5).

OK, a systemd.unitpágina de manual afirma que:

Caminhos com escape apropriado podem ser gerados usando o systemd-escape(1) comando

apontando para a systemd-escapepágina de manual, que explica como fazê-lo:

Para gerar a unidade de montagem para um caminho:

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

Então, no seu caso, se /srv/node/d1traduz emsrv-node-d1.mount

don_crissti
fonte
3
É importante observar que o sistema "path escape" pode ser um pouco complexo, mesmo lidando com nomes que não são AZ. Mesmo alguns traços no caminho precisarão ser convertidos para a \x2dfuga no estilo C , que quando usada para criar o arquivo de unidade pode (dependendo do seu shell / editor) precisar escapar novamente do caractere de barra - para que a montagem do arquivo de unidade /some-pathpossa ser adequada. requer execuçãoedit some\\x2dpath.mount
Guss
Acabei aqui tentando descobrir por que não conseguia montar share-name. Renomear share_nameresolveu o problema.
Brian Z
Eu daria um voto duplo, se pudesse!
John Mee