Linux 无法使用 /etc/fstab 挂载路径中带有逗号的 CIFS 共享

Linux 无法使用 /etc/fstab 挂载路径中带有逗号的 CIFS 共享

我在安装 CIFS 网络驱动器以用于我开发/维护的应用程序时遇到问题。共享路径中有一个名为的文件夹, EmployeesCompany/, Employees/Some data映射文件夹位于 Windows 域中)。

我必须使用八进制 转义空格\040。八进制的逗号\054不起作用 - 我仍然收到错误。查看 后kern.log,我发现它按字面意思解释了逗号并破坏了路径:

Nov 21 11:15:58 dashboard-prod kernel: [669753.128303] CIFS: Unknown mount option " Employees/Some data"

看起来它在那里结束了路径并期望逗号后面的内容成为路径选项。

这是 fstab 中的行:

//path/to/share/, Employees/   /local/path  cifs    defaults,password=foo,sec=ntlm,iocharset=utf8,username=bar   0    0

当我尝试引用路径(希望它能正确地转义逗号)时,它确实正确地转义了逗号,但随后我得到:

mount.cifs: bad UNC ('//path/to/app/, Employees/folder')

答案1

我在使用代理应用程序时遇到了这个问题,该应用程序必须观察文件和用户权限并处理来自多个服务器的挂载。用户太喜欢“,”了。

因此我通过以下方法解决了这个问题:

(让我们使用示例中的路径 - '//path/to/app/, Employees/folder')

  1. 创建临时挂载目录,即/root/TMP_123)

    mkdir -p /root/TMP_123

  2. 将共享挂载在根目录,通常不包含任何垃圾(在本例中为 //path/to)

    安装 -t cifs“//path/to”“/root/TMP_123”-o 用户名=xxxx,密码=yyyy,域=zzzz.local,vers=3.0,nocase

  3. 通过将根路径后的共享名称的其余部分与挂载点组合,创建到原始内容的符号链接,如下所示:

    ln -s "/root/TMP_123/app/, 员工/文件夹" "/root/TMP_123-LNK"

此后,您可以通过 /root/TMP_123-LNK 访问您的内容

我还没有测试过实际的命令,它们是从我的原始代码中转录过来的。

代码运行后,我只需运行一些垃圾收集(unmount -f -l /root/TMP_123,然后删除每个超过 10 天的符号链接和空目录)。类似这样的内容:

find /root/TMP_* -maxdepth 1 -type d -ctime +10 -exec rmdir {} \;
find /root/TMP_* -maxdepth 1 -ctime +10 -type l -delete

请不要,我故意避免使用 rm -rf,因为如果挂载点没有“解除武装”,例如 umount 失败,那么您可以递归地删除该共享。另一方面,rmdir 只会失败,您可以捕获错误。另一行也是一样。与 maxdepth 一起使用,它不应该干扰因任何原因保持挂载状态的东西......

希望这能让某人走上正确的道路,如果没有其他帮助......

相关内容