systemctl 在启动时不使用完整共享路径

systemctl 在启动时不使用完整共享路径

我的家庭路由器上运行着一个 samba 服务器,我尝试在系统启动时连接该服务器。

重要的是,路由器会自动为我设置共享名,它们的形式如下foo (at Elements)

我添加了一个 fstab 条目来在我的 Linux 服务器上挂载 samba 共享,如果我直接运行挂载命令,它可以正常工作sudo mount /media/sambashare

fstab 条目如下所示:

//192.168.50.1/andy\040\050at\040Elements\051  /media/samba_share  cifs  credentials=/etc/samba/user,noexec,vers=2.0,gid=1002,uid=114,_netdev,x-systemd.requires=network.target 0 0

但是,每当系统启动时,驱动器都不会安装。

我终于找到了问题所在。

当我手动运行时,mount我可以找到如下所示的journalctl条目:

Jan 01 21:56:59 media-server sudo[5624]:   andymc : TTY=pts/0 ; PWD=/home/andymc ; USER=root ; COMMAND=/usr/bin/mount /media/samba_share
Jan 01 21:56:59 media-server kernel: CIFS: Attempting to mount \\192.168.50.1\andy (at Elements)

但在系统启动时,日志条目看起来有点不同。

Jan 01 21:51:03 media-server systemd[1]: Mounting /media/samba_share...
Jan 01 21:51:03 media-server kernel: CIFS: Attempting to mount \\192.168.50.1\andy
Jan 01 21:51:03 media-server kernel: CIFS: VFS: cifs_mount failed w/return code = -2
Jan 01 21:51:03 media-server mount[1250]: mount error(2): No such file or directory
Jan 01 21:51:03 media-server mount[1250]: Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
Jan 01 21:51:03 media-server systemd[1]: media-samba_share.mount: Mount process exited, code=exited, status=32/n/a
Jan 01 21:51:03 media-server systemd[1]: media-samba_share.mount: Failed with result 'exit-code'.
Jan 01 21:51:03 media-server systemd[1]: Failed to mount /media/samba_share.

请注意,在第二个日志条目中,它不包含at Elements它尝试挂载的共享名中的位。我很确定这就是导致失败的原因,但我不知道如何防止它。

有任何想法吗?

答案1

Systemd 不直接使用 的内容/etc/fstab,而是运行systemd-fstab-generatorfstab 文件的每个非空非注释行来构建挂载单元。 (详情请参见man 8 systemd-fstab-generatorman 5 systemd.mount、 和。)man 7 systemd.generator

这些消息表明转义的空格和括号显然无法在此过程中保留下来,并且共享名在 后被切断\\192.168.50.1\andy

要查看问题是否是由进程引起的systemd-fstab-generator,您可以注释掉/etc/fstab共享行,然后直接为其编写挂载单元,如下所示/etc/systemd/system/media-samba_share.mount

[Unit]
Documentation=man:fstab(5)
After=network.target
Requires=network.target
Before=remote-fs.target

[Mount]
What=//192.168.50.1/andy\x20\x28at\x20Elements\x29
# if the above won't work, try this form:
# What=//192.168.50.1/andy (at Elements)
Where=/media/samba_share
Type=cifs
Options=credentials=/etc/samba/user,noexec,vers=2.0,gid=1002,uid=114

[Install]
WantedBy=remote-fs.target

请注意,如 中所述man systemd.unit,systemd 使用基于十六进制的字符转义而不是传统的八进制。

实际上,在像这样编写自己的自定义安装单元时,您可能根本不做任何转义。如果十六进制转义不起作用,请尝试这种方式。

创建挂载单元文件后,运行systemctl daemon-reload以使更改生效,然后运行systemctl start media-samba_share.mount进行测试。如果现在可以工作,那么它在启动时也应该可以工作。

相关内容