cifs挂载文件夹不断断开连接(ubuntu服务器)

cifs挂载文件夹不断断开连接(ubuntu服务器)

我有这个 fstab 条目允许 tomcat 应用程序在 Windows Samba 共享文件夹上读取/写入:

//dc/docs    /media/docs      cifs       credentials=...,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777,sec=ntlm,uid=tomcat7,gid=tomcat7,dir_mode=0770,file_mode=0770 0 0

问题是它在一定时间后不断卸载——不是 Windows 故障,我可以在其他地方访问共享

$ sudo ls /media/docs
finance  postsale  repository

#after e.g. 10 minutes...
$ sudo ls /media/docs
[sudo] password for user:
ls: cannot access '/media/docs': Connection reset by peer

#this takes ages to complete
$ sudo umount /media/docs

#this fails immediately after, succedes after about 5/10 seconds
$ sudo mount /media/docs
mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
$ sudo mount /media/docs
mount error(104): Connection reset by peer
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
$ sudo mount /media/docs
$ sudo ls /media/docs
finance  postsale  repository

我该如何调试或防止掉落?

Tomcat 应用程序用户无权重新安装,因此每次他们都需要向 IT 提出请求。

请注意,同一共享上的此安装不会掉落(我发现的唯一区别是usersudoer,而tomcat7上面的不是):

//dc/share       /media/share     cifs       credentials=....credentials,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777,sec=ntlm,uid=user,gid=user,dir_mode=0770,file_mode=0770 0 0

更新:

文件夹/var/log/samba为空——如何设置 samba 日志记录?

如果我继续列出该文件夹,它不会删除:

while true; do date; ls /media/docs; sleep 5; done

更新2:

这里的mount输出:

//fs-mxp/ZZZshare on /media/share type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ftp on /media/ftp type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//sql-mxp/C$ on /media/sql type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=administrator,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.11,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ZZZdocs on /media/docs type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=YYYdoc,domain=YYY-it,uid=113,forceuid,gid=123,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ZZZshare/ASTE on /home/esales/aste type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1001,forceuid,gid=1002,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ftp/YYYvendor on /home/esales/YYYvendor type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1001,forceuid,gid=1002,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)

答案1

我猜想这与 Windows 更新提供的补丁有关,以防止勒索软件攻击。它使保存共享文件夹的服务器拒绝 CIFS V1 请求。默认情况下挂载使用 CIFS V1。通过添加vers=2.0到安装命令的末尾来尝试一下。我遇到了同样的问题,通过这种方式我设法解决了它。 PS/仅供参考:我的命令如下所示

//192.168.1.10/public/mount /media/windowsshare cifs credentials=/home/MY_USERNAME/.smbcredentials,iocharset=utf8,sec=ntlm,vers=2.0 0 0

答案2

从您添加到问题中的安装输出中,我们可以看到您仍在使用 CIFS 1.0。

如果服务器支持的话,我建议将挂载安装为 CIFS 2.1,因为从 CIFS v2.0 或 2.1 开始,该协议支持更好地从连接睡眠/切断中恢复。为此,选项是vers=2.1.

耐用句柄 (2.02、2.1) – 如果暂时断开连接,允许连接透明地重新连接到服务器

我还建议添加该选项echo_interval=60而不是添加 while 循环,因为这样,SMB 客户端代码每分钟都会向服务器发送一个 keepalive 信标。

请注意,正如我在 @Thillina 答案中警告并更正的那样,选项全部位于第三个字段上,并用逗号分隔。

欲了解更多详情,请参阅CIFS 随机丢失与 Windows 共享的连接

阅读我在帖子中引用的文章:

3.0 - Microsoft Windows 8 和 Windows Server 2012 中引入的 SMBv3.0 协议。

因此,您拥有 Windows Server 2012 意味着 Windows 端至少支持 CIFSv3.0 及更低版本。

要检查是否重新协商以及使用哪个版本,请更改文件中的选项fstab,然后执行以下操作:

#mount -o remount /media/docs

然后运行mount命令来检查安装完成/协商的版本。

答案3

我最终完成了一个 cron 作业,每 3 分钟就会触及每个cifs共享上的一个文件mount,以保持连接处于活动状态。

到目前为止,股票已恢复正常供应:

cifs_keepalive:

#!/bin/bash

while read spot; do
   touch --no-create "${spot}/.cifs_keepalive"
done <<< "$(mount | awk '/cifs/{ print $3; }')"

/etc/cron.d/cifs_keepalive:

*/3 *   *   *   *   root    /home/bcait/bca_util/bin/cifs_keepalive >/dev/null 2>&1

学分:我的想法来自这篇博文

答案4

就我而言,我有其他网络接口已断开连接。这些接口上的 DHCP 租约到期导致挂载丢失http://ubuntuforums.org/showthread.php?t=1140094桑巴重新加载。

对我来说,我禁用了这些接口。另一种可能的解决方案是超时时间为 0 的 autofs。

相关内容