![使用 SMBCLIENT 连接到 Windows 7 时出现错误:“协议协商失败:ERRDOS:ERRnomem”](https://linux22.com/image/1435275/%E4%BD%BF%E7%94%A8%20SMBCLIENT%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20Windows%207%20%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%EF%BC%9A%E2%80%9C%E5%8D%8F%E8%AE%AE%E5%8D%8F%E5%95%86%E5%A4%B1%E8%B4%A5%EF%BC%9AERRDOS%EF%BC%9AERRnomem%E2%80%9D.png)
我们有一个混合了不同操作系统的家庭网络,包括两台 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 中,修改以下注册表项(我已经赞同对我有用的其他答案,但在这里列出关键点会很有帮助):
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache
;更改默认0 至 1HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
;更改默认1 至 3
Microsoft TechNetLargeSystemCache
详细解释了该参数。
我只能说,这使得 Windows 服务器能够保持运行而无需修改客户端。