解決umount.nfs: /data: device is busy 問題

有時候我們需要umount某個掛載目錄時會遇到如下問題:

1
2
[root@localhost /]# umount /data/
umount.nfs: /data: device is busy

通過這條命令查看:

1
2
3
4
[root@localhost /]# fuser -m -v /data/
                     用戶     進程號 權限   命令
/data/:              root       2798 ..c.. bash
                     root       2996 ..c.. su

-v 表示 verbose 模式。進程以 ps 的方式顯示,包括 PID、USER、COMMAND、ACCESS 字段

-m 表示指定文件所在的文件系統或者塊設備(處於 mount 狀態)。所有訪問該文件系統的進程都被列出。

如上所示,有兩個進程佔用了,將其kill掉,再重新取消掛載。

1
2
3
4
[root@localhost /]# kill -9 2798
[root@localhost /]# kill -9 2996
[root@localhost /]# umount /data/
[root@localhost /]#

成功!

fuser 概述

fuser命令是用來顯示所有正在使用着指定的file, file system 或者 sockets的進程信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@gc-statis2 ]# fuser -m -v tests/
                     用戶     進程號 權限   命令
tests/:              root       7300 F.ce. php-fpm
                     www        7301 ..ce. php-fpm
                     www        7302 ..ce. php-fpm
                     www        7303 ..ce. php-fpm
                     www        7304 ..ce. php-fpm
                     www        7305 ..ce. php-fpm
                     www        7306 ..ce. php-fpm
                     www        7307 ..ce. php-fpm
                     www        7308 ..ce. php-fpm
                     www        7309 ..ce. php-fpm              
                     root      18891 ..c.. bash

同時fuser 可以用來查找哪些進程正在使用指定的端口(network port).

1
2
3
4
[root@gc-statis2 ]# fuser -v -n tcp 80
                     用戶     進程號 權限   命令
80/tcp:              root       7975 F.... nginx
                     www        7976 F.... nginx

fuser 常用場景

fuser通常被用在診斷系統的“resource busy”問題,通常是在你希望umount指定的掛載點得時候遇到。 如果你希望kill所有正在使用某一指定的file, file system or sockets的進程的時候,你可以使用-k option。

1
fuser –k  /path/to/your/filename  

這時fuser會向所以正在使用/path/to/your/filename的進程發送SIGKILL。如果你希望在發送之前得到提示,可以使用-i 選項。

1
fuser –k –i /path/to/your/filename
發佈了32 篇原創文章 · 獲贊 8 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章