在 Linux 下 umount 掛載的優(yōu)盤或者移動硬盤的時候,經(jīng)常會出現(xiàn) “Device is busy” 的提示,哦~真讓人惱火,在 Windows 下的那個無法卸載移動設(shè)備的問題,竟然也竄到了 Linux 下 ……![](/d/20211018/f79f8121df0f10c0999e6bdbf44b0ead.gif)
其實,錯誤不在 WIndows 也不在 Linux,無法卸載移動設(shè)備的原因,是因為系統(tǒng)中還有程序在霸占著移動設(shè)備上的文件,如果冒然強制卸載,可能會導(dǎo)致數(shù)據(jù)丟失和設(shè)備損壞,“Device is busy” 是一種保護措施。
既然知道是有程序霸占,找出這個程序再處理一下就好了。 fuser 這個小程序可以派上用場,基本上每個發(fā)行版都會帶有 fuser 這個工具。
fuser 可以顯示出當前哪個程序在使用磁盤上的某個文件、掛載點、甚至網(wǎng)絡(luò)端口,并給出程序進程的詳細信息。
假設(shè)無法卸載的設(shè)備為 /media/USB,運行下列命令即可:
$ fuser -m -v /media/USB/
用戶 進程號 權(quán)限 命令
/media/BAK/: galeki 335 ..c.. gqview
-m 參數(shù)表明指定的路徑是一個掛載點顯示所有使用指定文件系統(tǒng)的進程,后面可以跟掛載點,或是dev設(shè)備 ( Thanks lisir :),-v 參數(shù)給出詳細的輸出,可以看出,原來是 gqview 這個程序還在霸占著移動設(shè)備,fuser 還給出了程序的進程號,知道了進程號,你就可以隨便怎么處置這個程序了。
另外你也可以添加一個 -k 參數(shù):
fuser -m -k /media/USB/
這招自動把霸占著 /media/USB/ 的程序殺死。如果你不是很明確是否要殺死所有霸占設(shè)備的程序,你還可以加一個 -i 參數(shù),這樣每殺死一個程序前,都會詢問:
$ fuser -m -v -i -k /media/BAK/
用戶 進程號 權(quán)限 命令
/media/BAK/: galeki 371 ..c.. gqview
殺死進程 371 ? (y/N)
很順利的解決了 “Device is busy” 的問題~