使用 SMBCLIENT 连接到 Windows 7 时出现错误:“协议协商失败:ERRDOS:ERRnomem”

使用 SMBCLIENT 连接到 Windows 7 时出现错误:“协议协商失败:ERRDOS:ERRnomem”

我们有一个混合了不同操作系统的家庭网络,包括两台 Windows 7 Ultimate PC、几部 Android 手机、一台 MacBook Pro 和两台 Linux PC。我的室友拥有除 Linux 之外的所有计算机,并且成功地在所有设备上通过 SMB/CIFS 进行联网和文件共享,没有任何问题。

但是,我无法让我的 Linux 机器连接到它们的文件共享:每次尝试时,我只会从 Samba(smbclient)收到 ERRDOS:ERRnomem 响应。

$ smbclient -L \\COMPUTER
Enter zoqaeski's password:
protocol negotiation failed: ERRDOS:ERRnomem

我已经对配置 Samba 和 ERRnomem 响应进行了各种搜索,显然需要更改注册表的已知 Windows 7 问题。我建议这可能是解决方案,但他们俩都不愿意修改注册表项,因为它适用于所有设备,相反,他们声称我没有正确配置 Samba,或者我没有最新的驱动程序。

不过,它在我的两台电脑之间运行良好,我一直认为驱动程序是指控制机器上物理硬件的软件。无论如何,我的系统都是最新的:我运行的是 Arch Linux(滚动发布版本),带有 Samba 4.1.14。

有没有一种解决方案,不会弄乱我室友的电脑?他们都是使用高端系统的游戏玩家,所以当我被告知他们没有足够的内存来共享文件时,我感觉很奇怪。

答案1

更改 smbclient 或 mount.cifs 使用的 SMB/CIFS 版本可使一切再次变得更好!对于 smbclient,-m SMB2在查询末尾包含“ ”以强制其使用 SMB 协议版本 2。对于 mount.cifs,ver=2.1在选项中包含“ ”,例如:

//server/share /mnt/point cifs credentials=/my/credentials/.file,vers=2.1,sec=ntlm 0 0

我没有进一步去弄清楚有哪些版本可用,因为这个恰好对我有用,但我认为它应该是所有连接投诉的真正解决方案。

答案2

这里的问题不在于您的 Samba 配置,因为网络上的机器可以毫无问题地访问您的共享。

错误消息清楚地表明 Windows 返回了内存错误smbclient。唯一的解决办法是让你的室友更改 Windows 机器上的系统内存设置。共享池的内存使用量可以忽略不计,那么他们为什么抱怨呢???

同一来源包含修复:http://www.dedoimedo.com/computers/windows-7-samba-errnomem.html

答案3

笔记:假设你运行的是服务器,而不是客户端,那么也有一个解决方法。但是,如果你是 Linux 客户端,那就使用SMB 版本变更

以下解决方法也描述在Arch Linux 维基

现在,正如链接中的页面这个答案描述,在 Windows 中,修改以下注册表项(我已经赞同对我有用的其他答案,但在这里列出关键点会很有帮助):

  1. HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache;更改默认0 至 1
  2. HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size;更改默认1 至 3

Microsoft TechNetLargeSystemCache详细解释了该参数

我只能说,这使得 Windows 服务器能够保持运行而无需修改客户端。

相关内容