Systemd挂载失败。where =设置与单位名称不匹配


20

如果我使用此命令:

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

一切正常。但是,如果我尝试通过安装进行systemd安装,它将失败。

我创建了一个/etc/systemd/system/mnt-d1.mount包含以下内容的文件:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

之后,我运行以下命令:

systemctl daemon-reload
systemctl start mnt-d1.mount

最后一个显示给我:

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 给我看了:

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.

请帮助我通过systemd安装单元安装磁盘。


仍然不起作用。.相同的错误
亚历山大

这个问题应该重新打开-我遇到了同样的问题,评论中提出的解决方案对我有所帮助。该评论应该作为答案,以便我可以投票。
古斯

Answers:


26

错误消息说明了原因:

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

尽管了解该消息需要阅读几本手册页。
systemd.mount手册页(强调我的):

Where=

取得安装点目录的绝对路径。如果安装时不存在安装点,则会创建它。 该字符串必须反映在单位文件名中。(请参见上文。)此选项是必需的。

“参见上文”部分是:

挂载单元必须以其控制的挂载点目录命名。示例:/home/lennart必须在单元文件中配置安装点home-lennart.mount。有关用于将文件系统路径转换为单元名称的转义逻辑的详细信息,请参见 systemd.unit(5)

好的,systemd.unit手册页指出:

可以使用该systemd-escape(1) 命令生成正确的转义路径。

指向说明如何执行操作的systemd-escape手册页

要生成路径的安装单元:

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

所以,在你的情况下,/srv/node/d1转化成srv-node-d1.mount


3
需要特别注意的是,即使处理非可用区名称,“路径转义”系统也会变得有些复杂。即使路径中的一些破折号也需要转换为C样式\x2d转义符,当用于创建单位文件时(取决于您的外壳/编辑器),它可能需要再次转义斜杠字符-因此,适合单位文件的安装/some-path可能需要跑步edit some\\x2dpath.mount
Guss

我最终在这里试图弄清楚为什么我无法挂载share-name。重命名share_name解决了该问题。
Brian Z

如果可以的话,我会加倍投票!
约翰·米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.