如何强制 CIFS 连接卸载

Posted

技术标签:

【中文标题】如何强制 CIFS 连接卸载【英文标题】:How do you force a CIFS connection to unmount 【发布时间】:2010-09-09 15:10:00 【问题描述】:

我在 Linux 机器上安装了一个 CIFS 共享。 CIFS 服务器已关闭,或 Internet 连接已关闭,任何接触 CIFS 挂载的内容现在都需要几分钟才能超时,并且在您等待时无法杀死。我什至不能在我的主目录中运行 ls 因为有一个符号链接指向 CIFS 挂载内部,并且 ls 试图跟随它来决定它应该是什么颜色。如果我尝试卸载它(即使使用 -fl),卸载过程也会像 ls 一样挂起。甚至 sudo kill -9 也无法杀死它。如何强制内核卸载?

【问题讨论】:

类似:Force unmount of NFS-mounted directory 【参考方案1】:

有一个 -f 选项可以卸载,你可以试试:

umount -f /mnt/fileshare

您是否指定了“-t cifs”选项来挂载?还要确保您没有指定要挂载的“硬”选项。

您可能还想考虑fusesmb,因为文件系统将在用户空间中运行,您可以像任何其他进程一样终止它。

【讨论】:

-f 和 -t 不起作用,umount 仍然挂起。 在挂载添加“-t cifs”选项后,您是否重新启动?我认为你现在无法修复卡住的挂载点,你唯一的希望是尝试以将来更能抵抗失败的方式挂载它。【参考方案2】:

试试 umount -f /mnt/share。在 NFS 上运行良好,从未尝试在 cifs 上。

另外,看看 autofs,它只会在访问时挂载共享,并在后世卸载它。

www.howtoforge.net有很好的教程

【讨论】:

很遗憾 -f 不适用于 CIFS。 umount 仍然挂起。【参考方案3】:

我使用惰性卸载:umount -l(这是一个小写的L

延迟卸载。分离文件系统 现在从文件系统层次结构中,和 清理所有对 文件系统不忙时 了。 (需要内核 2.4.11 或 稍后。)

【讨论】:

起初这对我不起作用。经过一段时间的试验(每次都在一个新的虚拟终端中)我想出了这个:sudo umount -a -t cifs -l。要么这样做,要么第一次卸载需要一段时间(120 秒?300 秒?)才能完成。我收到很多关于 umount 被阻止超过 120 秒的警告。 然后我必须杀死所有挂起的 umount 才能再次挂载。 我还需要sudo umount -a -t cifs -l 才能让它工作。 这对我真的不起作用。我尝试了上面的所有其他方法,并且 cifs 挂载从我的 /etc/mtab 列表中消失了,但它无法重新挂载,因此它实际上是无用的。当我的计算机在挂载 cifs 共享时自行挂起时,cifs 挂载会冻结。 我同意,umount -a -t cifs -l 也是我摆脱可怕的“主机已关闭”所需要的。【参考方案4】:

我有这个问题一天,直到我找到真正的解决方案。不要试图强制卸载挂起的 smb 共享,而是使用“软”选项安装共享。如果进程尝试连接到不可用的共享,它将在一定时间后停止尝试。

soft 使安装变软。几秒钟后文件系统调用失败。

mount -t smbfs -o soft //username@server/share /users/username/smb/share

stat /users/username/smb/share/file
stat: /users/username/smb/share/file: stat: Operation timed out

可能不是您问题的真正答案,但它是问题的解决方案

【讨论】:

如果您查看man mount.cifs,您会注意到soft 实际上是默认值。【参考方案5】:

umount -a -t cifs -l

在 CentOS 6.3 上对我来说就像一个魅力。它为我节省了重新启动服务器的时间。

【讨论】:

您能否详细说明-a-l 开关是什么以及它们的作用? -a 和 -t cifs 卸载所有 cifs 文件系统。最好指定要卸载的那个 如果您通过文件浏览器安装并且您无法找到有问题的安装点,这是完美的 - 前提是您不介意卸载所有内容! 谢谢,今天节省了很多时间! -l 代表“--lazy detach the filesystem now, clean up things later”,就像一个魅力【参考方案6】:

这对我有用(Ubuntu 13.10 桌面到 Ubuntu 14.04 服务器):-

 sudo umount -f /mnt/my_share

安装有

 sudo mount -t cifs -o username=me,password=mine //192.168.0.111/serv_share /mnt/my_share

serv_share 是在 smb.conf 文件中设置和指向的位置。

【讨论】:

【参考方案7】:

我对 davfs 有一个非常相似的问题。在umount.davfs 的手册页中,我发现umount.davfs 忽略了-f -l -n -r -v 选项。要强制卸载我的 davfs 挂载,我必须使用 umount -i -f -l /media/davmount

【讨论】:

【参考方案8】:

在 RHEL 6 上有效:

umount -f -a -t cifs -l 

【讨论】:

这行得通,必须等待整整 30 分钟(超时)才能重新安装。可能最好按照 jnice 的指示进行软安装。【参考方案9】:

在 RHEL 6 上,这也对我有用:

umount -f -a -t cifs -l FOLDER_NAME

【讨论】:

【参考方案10】:
umount -f -t cifs -l /mnt &

小心&,让umount 在后台运行。 umount 将首先分离文件系统,因此您将找不到任何关于 /mnt 的信息。如果你运行df 命令,那么它将强制umount /mnt

【讨论】:

【参考方案11】:

懒惰的卸载将为您完成这项工作。

umount -l <mount path>

【讨论】:

以上是关于如何强制 CIFS 连接卸载的主要内容,如果未能解决你的问题,请参考以下文章

在NETAPP CIFS文件夹中强制修改权限的方法

在NETAPP CIFS文件夹中强制修改权限的方法

存储DASNAS(nfs,cifs)SAN,Samba(cifs)介绍和区别

Linux系统下,MySQL以及禅道的安装/卸载

如何模拟强制关闭的 TCP 连接?

如何在内部连接表上强制索引?