16.04 CIFS“主机已关闭”,但

16.04 CIFS“主机已关闭”,但

我在 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.

TCP/IP 上的 NetBIOS 记录在RFC 10011002

相关内容