之前將一塊硬盤掛載到某個目錄下,但是現在我想卸載掉這塊硬盤,無論如何都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