Linux文件系统卸载小技巧解决大问题

现在系统功能越来越丰富,那么响应的开发资源需要的越来越多,文件存储也越来越必要。无论是你用nfs、glusterfs等等,都需要在linux服务器中设置挂载点并执行挂载后才可使用,但如果fs文件系统有调整,那么可能就需要卸载umount,重新挂载,但是你真的可以顺顺利利的卸载吗?不见得,因为可能有应用在占用该磁盘或者系统在fstab中写入了磁盘自动挂载,本文就详细给你介绍个小技巧,帮你解决该烦恼。

1626075503955

场景一:磁盘正有程序占用

但出现这种情况时,可以根据提示用lsof 或fuser来判断有哪些进程正在占用该磁盘,停掉改进程,重新挂载后再重新启动进程应用即可。

可以根据图上看到,找到了进程16011占用了该文件系统,并可以准确看到该进程是哪些应用,并占用了哪些文件等信息。

科普

1
fuser -m -v /mnt

可以查看到当前占用/mnt目录的进程号,然后用kill杀死它。

也可以直接杀死这个进程

1
fuser -m -k /mnt

如果你不是很明确是否要杀死所有霸占设备的程序,你还可以加一个 -i 参数,这样每杀死一个程序前,都会询问,加参数-i

1
fuser -m -v -i -k /mnt

-m : 表明指定的路径是一个挂载点显示所有使用指定文件系统的进程。后面可以跟挂载点或dev设备

-v : 给出详细的输出。可以给出了占用磁盘程序的详细信息,如进程号等。

场景二:内核占用

应用程序占用可以根据场景一操作拿到进程id,你就可以对它为所欲为了。但是场景一图中有一个隐藏的信息,可能有同学已经发现

PID: kernel这个是内核占用着该磁盘,要怎么去杀掉呢。这又是怎么造成的呢?

出现这种情况是因为在linux系统fstab中添加的文件磁盘,那么在系统启动时,内核自动挂载该磁盘,所有就是内核进程。

那有办法解决吗?答案是肯定的,要不就不会有本教程了。

方法一

既然内核占有,那么先把fstab中fs挂载点删掉,并重启服务器,那么重启时内核重新加载,就不会再占用了。

但是对于生产环境,业务应用在线上跑,有没有不用重启,还能解决挂载问题的呢?

方法二

lazy umount法,使用如下命令和参数:

1
umount -l /mnt

–l :并不是马上umount,而是在该目录空闲后再umount。

请注意,该方法并不是完全安全的,它主要完成如下操作:

1,立即从目录结构中实现卸载,即新进程将无法通过/media/disk访问,该磁盘。

2,正在访问该文件系统的程序不受影响。即正在操作/media/disk的进程不会被打断,且仍可以读写磁盘中的所有文件。如果所有进程对/media/disk的操作都执行完,那么才真正地umount。

由此可知,lazy umount并没有真正实现umount,仅用于特殊需要的情况。

总结

被应用程序占用,找到进程号,停掉应用解除占用就可卸载。如果是内核占用,可以重启或用lazy umount来解决。但都有优劣点,需要自行把握。

-------------本文结束感谢您的阅读-------------

本文标题:Linux文件系统卸载小技巧解决大问题

文章作者:豌豆多多

发布时间:2021年07月12日 - 15:07

最后更新:2021年08月31日 - 17:08

原始链接:https://wandouduoduo.github.io/articles/fe844df6.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

原创技术分享,您的支持将鼓励我继续创作