Linux運維之如何查看目錄被哪些進程所占用,lsof命令、fuser命令


之前將一塊硬盤掛載到某個目錄下,但是現在我想卸載掉這塊硬盤,無論如何都umount不了,有些同學可能說需要加上 -f 參數強制卸載,理論上是可以的,但是在我這里依然不起作用,比如:

[root@:vg_adn_clickhouseTest_1ubuntu:: ~]#umount -f /data2
umount: /data2: target is busy.

我是把一塊2T的硬盤掛載到/data2目錄下了,可是現在就是卸載不了,說是設備忙,仔細分析一下可以得出應該是某些應用程序的進程占用了這塊分區/data2 。應用程序一直在跑着,所以我們無法卸載這塊硬盤。解決的方法就是找出哪個進程在占用這塊硬盤。那我們知道一塊硬盤一般上都是關聯至某一個目錄下的。所以我們就去找這個目錄被哪些進程所占用。使用命令 lsof 即可

[root@:vg_adn_clickhouseTest_2ubuntu:172.31.19.193 ~]#lsof /data2
COMMAND     PID       USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
clickhous 31721 clickhouse    7wW  REG  253,0       59 45088774 /data2/clickhouse/status
[root@:vg_adn_clickhouseTest_2ubuntu:172.31.19.193 ~]#kill -9 31721
[root@:vg_adn_clickhouseTest_2ubuntu:172.31.19.193 ~]#service clickhouse-server status
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
   Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: signal) since Wed 2019-01-16 10:51:32 UTC; 11s ago
  Process: 31721 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml (code=killed, signal=KILL)
  Process: 31715 ExecStartPre=/bin/chown clickhouse:clickhouse -R /etc/clickhouse-server (code=exited, status=0/SUCCESS)
  Process: 31713 ExecStartPre=/usr/bin/chown clickhouse:clickhouse -R /etc/clickhouse-server (code=exited, status=0/SUCCESS)
 Main PID: 31721 (code=killed, signal=KILL)

Jan 16 10:51:32 ip-172-31-19-193 systemd[1]: clickhouse-server.service: Failed with result 'signal'.

現在我們找到原來是clickhouse程序在占用這塊磁盤,因此我們卸載不了。事實上,lsof命令后面也可以跟上lvm的名字也是可以查出來的。

 

fuser命令也可以查看某塊設備被哪個程序占用,

假設無法卸載的設備為/dev/sdb1 
1)運行下面命令看一下哪個用戶哪個進程占用着此設備 
fuser -m -v /dev/sdb1

2)運行下面命令殺掉占用此設備的進程 
fuser -m -v -k /dev/sdb1 
或者fuser -m -v -k -i  /dev/sdb1(每殺掉一下進程會讓你確認) 
3)再umount

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM