我在 fstab 中设置了 CIFS,它们在启动时按预期工作。它们按预期挂载并工作了一段时间。突然之间(可能是在解锁机器等之后)我在尝试访问它时收到“主机已关闭”错误。我有多个,它们都已关闭。它们也从同一台服务器共享。此时,我在 Windows 计算机和过时的 14.04 机器上检查,它们已启动并按预期运行。在 nautilus 中单击共享并重复出现错误后,它们将重新开始工作。要访问“关闭”的共享,大约需要 2-3 分钟,随机单击不同的挂载并返回第一个,此时它会自动显示挂载点中的数据。
我在一段时间没有更新的 14.04 机器上没有遇到这个问题。所有这些机器都功能齐全,CIFS 从未“关闭”。在 16.04 上,直到最近才出现问题。
我确保每隔一天更新一次,并清理了旧的 Linux 标头(事后看来,我可能应该恢复)。我这样做是因为我希望修复出现,但已经与 CIFS 挂载斗争了数周,却没有任何解决方案。
答案1
经过多次测试,添加vers=1.0
挂载行似乎可以解决问题。挂载现在可以在 Ubuntu 17.10 上运行,就像多年来在旧 Ubuntu 版本上运行一样。
答案2
我遇到了同样的问题。似乎与最新的内核版本和 samba 有关。
我已设法通过在 mount 命令(或每个 fstab 行的末尾)添加 vers=2.0 来解决这个问题
答案3
其他人已经暗示了解决方案,但可能值得简要解释一下原因。
mount.cifs
在Ubuntu 16.04中默认使用SMB1协议。
在后续版本中mount.cifs
,默认的SMB版本为2.1或3.0。
当前的 Windows 服务器不再支持 SMB 1.0 协议,除非在其注册表中专门配置为接受该协议。因此,默认情况下,它们会拒绝使用 SMB1 协议的客户端的连接。这会导致出现误导性消息“主机已关闭”。
但是一些较旧的系统(通常是 NAS)不支持协议 2.1 或 3。
解决方案是mount.cifs
使用选项来告诉您使用正确的协议连接到您的服务器vers=
。例如,要连接到 Windows 10 计算机:
mount -t cifs ... -o vers=3.0,...
或者从 Ubuntu 18.04 或更高版本迁移到旧 NAS:
mount -t cifs ... -o vers=1.0,...
来自man mount.cifs
(Ubuntu 16.04):
vers= SMB protocol version. Allowed values are: · 1.0 - The classic CIFS/SMBv1 protocol. This is the default. · 2.0 - The SMBv2.002 protocol. This was initially introduced in Windows Vista Service Pack 1, and Windows Server 2008. Note that the initial release version of Windows Vista spoke a slightly different dialect (2.000) that is not supported. · 2.1 - The SMBv2.1 protocol that was introduced in Microsoft Windows 7 and Windows Server 2008R2. · 3.0 - The SMBv3.0 protocol that was introduced in Microsoft Windows 8 and Windows Server 2012. Note too that while this option governs the protocol version used, not all features of each version are available.
如果你在中定义你的挂载/etc/fstab
,它可能看起来像这样:
//server/share /mnt/share cifs defaults,vers=3.0,...your_other_options...,nofail,x-systemd.device-timeout=15 0 0
答案4
为了Windows 9x(95、98、ME)服务器,除了vers=1.0
,还需要servern[etbiosname]
在调用时添加开关mount
:
mount -t cifs -o vers=1.0,sec=none,user=alice,file_mode=0644,servern=SERVER //server/share /mount/point
该值应为偏僻的服务器。
这是该开关的文档:
servernetbiosname=arg
Specify the server netbios name (RFC1001 name) to use when at‐
tempting to setup a session to the server. Although rarely
needed for mounting to newer servers, this option is needed for
mounting to some older servers (such as OS/2 or Windows 98 and
Windows ME) since when connecting over port 139 they, unlike
most newer servers, do not support a default server name. A
server name can be up to 15 characters long and is usually up‐
percased.