當你看到 target is busy
,說明仍有進程在使用該掛載點或你當前的 shell 就位于該目錄下。可以按下面步驟排查并強制卸載:
1. 確保不在掛載目錄下
先切換到其它目錄,避免當前 shell 占用:
cd ~
2. 查找占用該掛載點的進程
-
使用 fuser
sudo fuser -m /media/zhangbin/DATA/HuaSongs
它會列出占用該掛載點的 PID 列表。
-
使用 lsof
sudo lsof +D /media/zhangbin/DATA/HuaSongs
或者
sudo lsof /media/zhangbin/DATA/HuaSongs
列出打開該目錄或其下文件的所有進程與文件句柄。
3. 終止占用進程
-
如果確認可以殺掉它們:
sudo fuser -km /media/zhangbin/DATA/HuaSongs
這會向所有占用該掛載點的進程發送
SIGKILL
,請謹慎使用。 -
或者針對單個 PID:
sudo kill <PID> # 如果進程沒響應再 sudo kill -9 <PID>
4. 再次卸載
sudo umount /media/zhangbin/DATA/HuaSongs
如果還是提示 busy,可以使用 懶卸載(detach):
sudo umount -l /media/zhangbin/DATA/HuaSongs
-l
(lazy):讓掛載點立即對新進程不可見,但內核會在資源空閑后徹底清理。
或者強制卸載(在某些系統對 CIFS 有效):
sudo umount -f /media/zhangbin/DATA/HuaSongs
5. 驗證
mount | grep HuaSongs
如果沒有輸出,說明已成功卸載。
按照以上步驟,就能解除“target is busy”導致的卸載失敗問題。
我的操作
sudo fuser -m /media/zhangbin/DATA/HuaSongs
/media/zhangbin/DATA/HuaSongs: 1100864 1145941c 1146181c 1146190c
看到這幾個 PID 正在占用掛載點:
1100864 1145941c 1146181c 1146190c
下面有兩種常用方式,任選其一即可清理占用并卸載:
方法一:用 fuser 一步終結并卸載
-
終止所有占用進程
sudo fuser -km /media/zhangbin/DATA/HuaSongs
這會對所有使用該目錄的進程發送 SIGKILL。
-
卸載
sudo umount /media/zhangbin/DATA/HuaSongs
方法二:手動殺進程再卸載
-
切換目錄(避免 shell 自己也占用)
cd ~
-
逐個殺掉 PID
sudo kill 1100864 1145941 1146181 1146190 # 如果有進程不響應,再用 -9 強制殺 sudo kill -9 1100864 1145941 1146181 1146190
-
卸載
sudo umount /media/zhangbin/DATA/HuaSongs
如果仍然提示“busy”
-
懶卸載(掛載點對新進程立即不可見,后臺清理):
sudo umount -l /media/zhangbin/DATA/HuaSongs
-
強制卸載(針對 CIFS 有時有效):
sudo umount -f /media/zhangbin/DATA/HuaSongs
執行完后,用 mount | grep HuaSongs
驗證是否已卸載。這樣就可以清除“target is busy”導致的卸載失敗問題了。