在 Linux 系統下,當任何目錄是用 mount 來掛載,後續要解除掛載(umount)的時候,若是有程式 使用,或是有 user cd 在那個目錄上的話,此時就沒有辦法 umount 掉,在 umount 時會出現 "Device is busy" 的訊息。
要怎麼找出是哪個程式掛在那個目錄上? 然後去把那個程式砍掉呢?
這時候可以使用 fuser 指令來處理
-m 參數顯示所有使用指定該資源的系統程序,後面可以跟掛載點,或是dev設備
-v 參數輸出詳細訊息,可以看出是哪個程式還在佔用著資源
fuser 還會告訴你程序的 PID,知道了 PID,你就可以隨便怎麼處置這個程序了。
假設現在 mount 掛載的目錄是 /mnt/sdb1
查詢: fuser -m /mnt/sdb1
顯示: /mnt/sdb1: 11025c
就代表是 Process ID 11025(PID) 有使用到這個目錄,後面 c 代表的意義可以參考下列說明:
c: current directory.
e: executable being run.
f: open file. f is omitted in default display mode.
F: open file for writing. F is omitted in default display mode.
r: root directory.
m: mmap'ed file or shared library.
如果要把這個資源釋放,讓 /mnt/sdb1 可以 umount 的話,fuser 有以下幾種做法:
-k 參數可以把霸佔著該裝置的所有 PID 砍掉:
fuser -m -k /mnt/sdb1
如果你不確定是否要 kill 所有佔用該設備的 PID,你可以加一個 -i 參數,這樣每 kill 一個 PID 之前,都會詢問你的意見
fuser -m -v -i -k /mnt/sdb1
就會問你是不是要把 11025 這個 PID kill 掉,選 y 就會 kill 掉
訊息如下:
USER PID ACCESS COMMAND
/mnt/sdb1: root 11025 ..c.. bash
Kill process 11025 ? (y/N) y
沒有留言:
張貼留言