在hadoop集群运维过程中经常会遇到计算节点磁盘损坏的情况,这个时候我们就需要更换硬盘,但是有时候出现硬盘无法umount的现象,我们就需要用法哦fuser这个命令了。
umount /data/disk16
umount: /data/disk16: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
强制卸载也不行
umount /data/disk16 -f
umount: /data/disk16: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
这个时候我们要找出是哪个进程正在占用这个目录
fuser -mv /data/disk12
USER PID ACCESS COMMAND
/data/disk12: root kernel mount /data/disk12
hdfs 44545 F.... java
关闭并卸载kill -9 44545
fuser -m /data/disk12
umount /data/disk12
这样我们卸载硬盘就很顺利了,然后我们在换盘
二、出现另外一种情况,我们也无法看到是什么程序正在占用磁盘
[root@cdh181 ~]# umount /data/disk20
umount: /data/disk20: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@cdh181 ~]# fuser -mv /data/disk20
USER PID ACCESS COMMAND
/data/disk20: root kernel mount /data/disk20
这是我们用
umount -l /data/disk20 加给-l参数强制卸载
小提示:
出现device busy之类的错误,这里我们可以用lazy umount 技术
请注意,该方法并不是完全安全的,lazy umount主要完成如下操作:
立即从目录结构中实现卸载,即新进程将无法通过/data/disk20访问/dev/sds
正在访问该文件系统的程序不受影响。即正在操作/data/disk20的进程不会被打断,且仍可以读写/dev/sds中的所有文件。
如果所有进程对/data/disk20的操作都执行完,那么才真正地umount
由此可知,lazy umount并没有真正实现umount,仅用于特殊需要的情况
三.扩展知识
一,为什么要使用fuser?先说 fuser的作用,fuser能识别出正在对某个文件或端口访问的进程大家想一下,还有哪个命令具备这个功能? 没错,是lsof,我们前面讲过, lsof能够找出正在对指定文件访问的进程
那么它们两者之间有何区别?
fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程。
二,如何使用fuser?
1,如何用fuser得到正在使用指定文件的进程?用法: fuser 文件说明:它会把正在使用当前文件的进程id列出
三、还有一种情况是占用这个硬盘的父进程是1,这样我们无法正常杀掉这个子进程,当时的处理办法就是重启机器,让这个进程释放掉。