16.04 版更新破坏了 CIFS/SMB 挂载

16.04 版更新破坏了 CIFS/SMB 挂载

本周,我在 Ubuntu 系统上运行了 apt-get upgrade。现在,我们的 16.04 系统上的网络挂载每 5-10 分钟就会中断一次。我们收到如下错误:

ls: cannot access '/mnt/server_a/dir_a': Host is down

主机肯定没有宕机,我同时更新了一堆 14.04 系统,它们都没有出现任何问题。看起来重新启动或 umount && mount 损坏的挂载几分钟后就会修复问题,然后又会再次损坏(即使系统完全空闲)。其中的行/etc/fstab如下:

//server_a/dir_a /mnt/server_a/dir_a cifs uid=my_user,soft,rw,exec,credentials=/root/creds/mnt_server_a,file_mode=0777,dir_mode=0777,iocharset=utf8,sec=ntlm 0 0
//server_b/dir_b /mnt/server_b/dir_b cifs uid=my_user,soft,rw,exec,credentials=/root/creds/mnt_server_b,file_mode=0777,dir_mode=0777,iocharset=utf8,sec=ntlm 0 0

server_a 的 cred 文件是本地用户的(两行“username=foo”和“password=bar”)。server_b 的 cred 文件是域用户的,该用户也在 cred 文件中指定。

看起来更新是这些之一(来自/var/apt/install/history.log):

update-manager-core:amd64 (1:16.04.5, 1:16.04.6)
libapt-inst2.0:amd64 (1.2.19, 1.2.20)
update-notifier-common:amd64 (3.168.3, 3.168.4)
libgtk-3-common:amd64 (3.18.9-1ubuntu3.2, 3.18.9-1ubuntu3.3)
apt:amd64 (1.2.19, 1.2.20)
libgtk-3-0:amd64 (3.18.9-1ubuntu3.2, 3.18.9-1ubuntu3.3)
snapd:amd64 (2.22.6, 2.24.1)
snap-confine:amd64 (2.22.6, 2.24.1)
dnsmasq-base:amd64 (2.75-1ubuntu0.16.04.1, 2.75-1ubuntu0.16.04.2)
grub-legacy-ec2:amd64 (0.7.9-48-g1c795b9-0ubuntu1~16.04.1, 0.7.9-90-g61eb03fe-0ubuntu1~16.04.1)
libapt-pkg5.0:amd64 (1.2.19, 1.2.20)
cifs-utils:amd64 (2:6.4-1ubuntu1, 2:6.4-1ubuntu1.1)
ntp:amd64 (1:4.2.8p4+dfsg-3ubuntu5.3, 1:4.2.8p4+dfsg-3ubuntu5.4)
libgtk-3-bin:amd64 (3.18.9-1ubuntu3.2, 3.18.9-1ubuntu3.3)
python3-update-manager:amd64 (1:16.04.5, 1:16.04.6)
ubuntu-core-launcher:amd64 (2.22.6, 2.24.1)
apt-utils:amd64 (1.2.19, 1.2.20)
pciutils:amd64 (1:3.3.1-1.1ubuntu1, 1:3.3.1-1.1ubuntu1.1)
apt-transport-https:amd64 (1.2.19, 1.2.20)
libpci3:amd64 (1:3.3.1-1.1ubuntu1, 1:3.3.1-1.1ubuntu1.1)

我尝试恢复,但 apt-get 只允许我降级下面列出的版本,而且都没有解决问题(尽管我真的怀疑 cifs 或 dnsmasq 可能是罪魁祸首):

  • cifs-utils:amd64=2:6.4-1ubuntu1
  • dnsmasq-base:amd64=2.75-1ubuntu0.16.04.1
  • ntp:amd64=1:4.2.8p4+dfsg-3ubuntu5.3
  • pciutils:amd64=1:3.3.1-1.1ubuntu1
  • libpci3:amd64=1:3.3.1-1.1ubuntu1

有人知道如何让我的安装重新工作吗?我真的很绝望,这对我们来说是一个巨大的阻碍,如果我不能在接下来的几天内让它工作,我们将不得不将整个基础设施切换回 Ubuntu 14.04。

答案1

我遇到了同样的问题,对我来说,删除最新的内核是有帮助的。我这样做了:

  1. 检查是否有第二个旧内核:

    dpkg --list | grep linux-image

  2. 如果有较旧的,请删除最新的:

    apt 删除 --purge 4.4.0-75-*

  3. 更新grub:

    更新 grub

现在需要重新启动,之后它就可以工作了。

当您以后需要新内核时,您必须使用以下命令安装它们:apt install linux-generic

另一个解决方案是添加vers=3.0到 fstab mount 语句。

答案2

我遇到了完全相同的问题 - 在过去的 3 或 4 天里,作为 ESXi VM 的 Plex 媒体服务器会从裸机 Freenas 服务器上删除其永久 SMB 挂载(在 fstab 中定义),并显示“主机已关闭”错误消息;甚至 umount 也不起作用,表明目标正忙。

恢复到 4.4.0-72-generic 就成功了。

答案3

看起来这是 4.4.0 内核的一个错误。每隔 15 分钟就会出现某种竞争条件,导致网络泛滥和断线。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=856843

我升级到 4.9.30,似乎已经解决了这些问题。我遵循的步骤如下:

下载所有内核 deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.30/linux-headers-4.9.30-040930_4.9.30-040930.201705251131_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

然后安装:

sudo dpkg -i *.deb

然后重新启动进入新内核。确认:

uname -r

显然,如果您的硬件或服务严重依赖某个内核,则要小心。我的服务器只运行 Plex,我能够进行更新而不会产生任何不良影响。

相关内容