如何强制卸载CIFS连接

169

我在Linux机器上挂载了一个CIFS共享。如果CIFS服务器宕机或者网络连接不通,那么任何接触到该CIFS挂载点的操作都需要等待几分钟才能超时,并且在等待期间无法被终止。由于我的主目录中有一个符号链接指向CIFS挂载点内部,因此甚至无法在主目录中运行ls命令,因为ls会尝试访问该链接以确定颜色。如果我尝试卸载它(即使使用-fl参数),则umount进程会像ls一样挂起。甚至sudo kill -9也不能杀死它。如何强制内核卸载?


13个回答

204

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

惰性卸载。立即从文件系统层次结构中分离文件系统,并在其不再繁忙时尽快清除所有对文件系统的引用。(需要内核2.4.11或更高版本。)


48
一开始这对我没用。尝试了一段时间后(每次在新的虚拟终端中),我得出了这个命令:sudo umount -a -t cifs -l。要么是这个命令解决了问题,要么是第一个 umount 需要一些时间(可能是120秒?300秒?)才能完成。我收到了很多关于 umount 被阻止超过120秒的警告。 - Peter Jaric
2
然后我必须在重新挂载之前杀掉所有挂起的卸载。 - Peter Jaric
16
我还需要运行 sudo umount -a -t cifs -l 才能使它正常工作。 - Joma
5
这对我并没有起作用。我尝试了上面的所有方法,但cifs挂载点已从我的/etc/mtab列表中消失,但无法重新挂载,因此实际上是无用的。当我的计算机在cifs共享挂载时自动挂起时,cifs挂载点会冻结。 - DH4
我同意,umount -a -t cifs -l也是我需要的,以克服可怕的“主机已关闭”问题,谢谢。 - Pooch
显示剩余4条评论

86

umount -a -t cifs -l

这个命令在CentOS 6.3上对我非常有效,它避免了服务器重启。


9
请问您能否详细说明一下 -a-l 开关是什么以及它们如何起作用? - Isaac
14
-a 和 -t cifs 会卸载所有的 cifs 文件系统。最好指定你要卸载的文件系统。 - dwery
2
如果您是通过文件浏览器挂载的,并且无法找到有问题的挂载点,那么这很完美——前提是您不介意卸载所有内容! - sage
2
"-l代表“--lazy”,立即卸载文件系统,稍后再清理。非常有效。" - Sevyls
警告。如果您实际上想使用该挂载点,则此操作可能无法真正“节省服务器重新启动”的时间。`懒惰卸载。立即从文件层次结构中分离文件系统,并在其不再繁忙时清除对该文件系统的所有引用。共享的重新挂载将不再可能”。 - erwin

17
在 RHEL 6 上,这是有效的:
umount -f -a -t cifs -l 

这个方法可行,但必须等待30分钟的完整超时时间才能重新挂载。最好像jnice所建议的那样进行软挂载。 - XMAN

15
这对我有用(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文件中设置并指向的。


6

我曾经遇到这个问题,花了一整天才找到真正的解决方法。不要试图强制卸载挂起的smb共享,而是使用"soft"选项挂载共享。如果某个进程尝试连接不可用的共享,它会在一定时间后停止尝试。

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

也许不是你问题的真正答案,但这是解决问题的办法。


22
如果您查看 man mount.cifs,您会注意到 soft 实际上是默认设置。 - Benj
事实上,这是默认设置,但(至少在我的系统上),它似乎没有按预期的方式运行。在连接中断后(例如当服务器未响应时),我的cifs系统调用会永远挂起。 - rrrrrrrrrrrrrrrr

2

我曾经遇到过davfs的类似问题。在umount.davfs的手册中,我发现-f -l -n -r -v选项被umount.davfs忽略了。为了强制卸载我的davfs挂载点,我不得不使用umount -i -f -l /media/davmount


2

umount 命令有一个 -f 选项,您可以尝试使用它:

umount -f /mnt/fileshare

你是否在挂载时指定了“-t cifs”选项?还要确保没有指定“hard”选项进行挂载。

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


4
-f 和 -t 没有帮助,卸载仍然挂起。 - Lawrence D'Anna
你在添加“-t cifs”选项后重新启动了吗?我认为现在没有什么可以做来修复你卡住的挂载点,你唯一的希望是尝试以更抗故障的方式进行挂载。 - Chris AtLee

2

尝试使用umount -f /mnt/share命令。对于NFS,可以正常工作,但从未尝试过cifs。

另外,请查看autofs,它只在访问时挂载共享,并在之后卸载它。

www.howtoforge.net有一个很好的教程。


5
很遗憾,-f 参数在 CIFS 中无效。卸载仍然会一直挂起。 - Lawrence D'Anna

1

侧面解决这个问题:

如果你无法卸载,因为文件系统正忙,那么你的ssh/终端会话是否cd到了挂载目录,从而使文件系统繁忙?

对我来说,解决方案是cd进入我的主目录,然后sudo umount完美地工作。

cd ~
umount /path/to/my/share

我想将这个留言发布为评论,但是我的声望不够。希望能够帮助其他人避免重蹈覆辙。

1
umount -f -t cifs -l /mnt &

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接