如何防止写入 CIFS 连续停止几分钟?

如何防止写入 CIFS 连续停止几分钟?

当从 NetApp 文件管理器挂载 CIFS 文件系统并将几 GB 的文件复制到其中时,复制过程经常会挂起几分钟。内核将消息写入系统日志,如下所示:

Nov 15 14:03:15 myclient kernel: [173570.048387] CIFS VFS: sends on sock ffff88003a2d4000 stuck for 15 seconds
Nov 15 14:03:15 myclient kernel: [173570.049115] CIFS VFS: Error -11 sending data on socket to server
Nov 15 19:01:22 myclient kernel: [191466.594088] CIFS VFS: Server myfileserver has not responded in 120 seconds. Reconnecting...

事实上,最后一条消息可能会在继续写入之前重复。当进程挂起时,无法将其杀死;即使尝试重新启动机器也会挂起。

服务器是NetApp的,我还不知道它的规格。客户端是两台 Ubuntu 14.04 LTS 机器,其中一台是虚拟的(两台机器上都会发生这种情况)。它们的内核分别是版本3.5.0-54-generic3.13.0-68-generic

我有三个问题。

  1. 如果您曾经在哪个版本的 Linux 上遇到过这个问题?
  2. 首先这个问题怎么会发生呢? CIFS 文件系统支持难道不应该比不间断挂断更智能吗?
  3. 哪些安装选项可以保证消除此问题?

我的 fstab 条目如下所示(匿名):

//myfileserver/path/to/mydirectory /mnt/mydirectory cifs credentials=mycredentialsfile,rw,sec=ntlmv2,forceuid,forcegid,file_mode=0644,dir_mode=0755,noserverino,nounix,user,noauto 0 0

添加并cache=none不能解决问题。添加directio也不行:man mount.cifs声称它是受支持的选项,但事实并非如此。什么似乎可以解决问题的是添加wsize=4096wsize=8192:到目前为止,我的测试表明这些选项没有停滞。 (使用 时wsize=16384,仍然会发生停顿。)

我不想只是通过反复试验,而是想了解正在发生的事情并百分百确定地消除问题。你能告诉我为什么会发生这种情况或者该怎么办吗?

(在 Ask Ubuntu、Unix & Linux 和 ServerFault 上已经发布了几个看起来像这个问题的问题,但大多数都不是:他们抱怨在阅读文件或文件系统上闲置的,而就我而言,这种情况永远不会发生,只有在以下情况下才会发生停顿写作文件)

答案1

默认情况下,cifs 安装使用协议 1.0,该协议除了过时之外,效率也很低,并且由于多种原因不能很好地从睡眠中恢复。

根据您的服务器技术,您vers=2.1至少可以使用 或vers=3.0

我建议检查文档或供应商支持哪个版本的 SMB 协议,或者至少使用3.0和查阅命令的输出mount来查看协商的版本。

更改为更新的 CIFS 版本协议应该可以解决部分或全部停顿问题,并为您提供更高效的传输速度。

请查看相关问题CIFS 随机丢失与 Windows 共享的连接更多细节。

请注意,停顿会改善,但在复制大文件时不会消失。该行为是一个功能,例如文件进入缓冲区,文件系统等待服务器通知复制已成功完成。

相关内容