我的家庭路由器上运行着一个 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-generator
fstab 文件的每个非空非注释行来构建挂载单元。 (详情请参见man 8 systemd-fstab-generator
、man 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
进行测试。如果现在可以工作,那么它在启动时也应该可以工作。