我有这个 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 提出请求。
请注意,同一共享上的此安装不会掉落(我发现的唯一区别是user
sudoer,而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。