1: ../source3/smbd/service.c:1050(close_cnum)
2: closed connection to service data
通过匹配Mac上的时间戳,我可以看到它们将丢弃记录为:
kcm DEPRECATED USE in libdispatch client: Setting timer interval to 0 requests a 1ns timer, did you mean FOREVER (a one-shot timer)?; set a breakpoint on _dispatch_bug_deprecated to debug
通过分析时间戳,我已确定这是仅在Mac客户端一侧记录的事件。以下是一个示例客户端,它具有一个Shell脚本,每十秒写入一个共享文件夹中的文本文件:
您可以看到连接在左侧的文本文件中的08:59:46是活动的,并且在/var/log/system.log中只有一条相关消息。
我在Samba邮件列表上询问了此问题,被告知Mac只是关闭了连接。
更新:
Wireshark分析显示了一些附加信息:
- STATUS_NETWORK_SESSION_EXPIRED
- SATATUS_INVALID_PARAMETER
- STATUS_NETWORK_NAME_DELETED
这是最终的SMB2消息(从底部数第二个):Negotiate Protocol Response:

更令人困惑的是,其中有一个NT Status: STATUS_SUCCESS的消息(请参见批注)。
这是微软关于此错误的解释:
如果SMB2头中的状态字段为STATUS_NETWORK_SESSION_EXPIRED,则客户端必须尝试重新验证由SMB2头中的SessionId标识的会话,如3.2.4.2.3节所述。如果重新验证尝试成功,客户端必须重试使用STATUS_NETWORK_SESSION_EXPIRED失败的请求。如果重新验证尝试失败,客户端必须失败操作并终止会话,如3.2.4.23节所述。 有没有一个脚本可以在cron作业中运行来仅仅更新会话?其他类型的客户端将永远保持连接,所以似乎只有Mac才会这样。操作系统版本从OS X 10.12到macOS Catalina不等,使用各种SMB2到SMB3的变体。 有没有办法让我开始理解为什么Mac会这样做,或者有没有什么提示可以让它们保持连接? Mac客户端正在运行依赖于持久连接的作业。
非常重要的信息,但最初被忽略了,因为我一直在寻找解决办法: 过去几年里,我有大约十几台这样的服务器(主要是Ubuntu 18.04;Samba 4.7.6)运行得很好。其中三台安装了自动更新,而这三台出现了Mac断开连接的问题。我暂时不让其他服务器重新启动进行更新,而且Mac不会断开与未更新的服务器的连接。 为了测试,我设置了一个16.04版本的服务器,看看旧版本的Ubuntu Server是否会出现同样的问题。令人惊讶的是,它使用了不同版本的Samba(4.3.11),却有相同的问题。为了确认我的怀疑,我将不让16.04安装最新的安全更新,再次进行测试。 虽然我怀疑Ubuntu核心发生了变化,但我在这里提问,因为只有Mac受到影响。
在多台安装了从10.12到Catalina的Mac上,我尝试使用它们的默认设置以及对
/etc/nsmb.conf进行的所有可能的更改组合进行测试。
[default]
signing_required=no
protocol_vers_map=[see manpage for nsmb.conf (linked below)]
我还尝试了禁用所有睡眠和省电选项,甚至使用一个很好的cafffinate包装器,KeepingYouAwake,来强制执行这一点。
在服务器上,我尝试了另一位系统管理员在#macosx freenode频道上的建议,kode54,他分享了他们最终获得稳定连接的方法。
这些建议对我没有帮助,因为我还没有完全尝试过,需要安装来自Linux for Schools Project维护的Samba版本(链接1:PPA for a version of Samba maintained by the Linux for Schools Project)。不过,它告诉了我关于vfs_fruit和通过额外软件包扩展Samba的开发工作的事实(链接2:developmental effort of extending Samba through an extra package for, in part, dealing with Macs)。它还引导我找到了Samba Wiki上一篇讨论与Mac和服务器端解决方法相关困难的页面:Configure Samba to Work Better with Mac OS X。
对我来说,尝试安装建议的Samba PPA很困难,因为这些服务器只是部分地用作文件服务器,并且通常始终被用于可能需要数天才能完成的计算任务(神经影像处理)。它们是为计算任务而构建的,存储只是双插槽、高内存密度服务器选项的副产品,同时也是具有大量驱动器托架(16+)的服务器。
在完全产生负面影响之前,我希望尝试其他选项。
由于服务器端的选项都没有帮助-我已经尝试了各种组合的标志,但都无济于事-我希望苹果社区能够给我提供一些解决方法。
无论问题的起源在哪里,保持持久连接的任何方式都将非常有价值。

../source3/smbd/service.c:1050(close_cnum)的错误,导致连接中断。不知何故,我的连接仍然保持着(使用原始设置的Mac)。 - Louis Waweru