一、了解錯誤原因
在準備拔出你的U盤、硬碟或SD卡等設備時,你可能會遇到一個突然出現的異常提示:「umount: /media/XXX: device is busy。」此錯誤提示表明要卸載的設備正忙,或者其中有一個進程正在使用該設備,因此無法安全卸載。為了避免數據損壞,你需要了解一些可能出現問題的情況。
二、尋找干擾源
當你遇到「umount device is busy」的錯誤時,要先查看終端或文件管理器中哪個進程或者文件正在使用該設備。最簡單的方式是通過重複嘗試卸載來獲取更多錯誤信息,如下所示:
$ sudo umount /media/USB_STICK umount: /media/USB_STICK: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) $ sudo fuser -cu /media/USB_STICK /media/USB_STICK: 423236c(rw) 422182c(rw) 422183c(rw)
此命令將顯示使用USB stick的進程列表。在本例中,進程編號為423236。為了找到進程名,我們可以運行以下命令:
$ ps aux | grep 423236 john 671 0.0 0.0 4036 652 pts/3 R+ 11:23 0:00 grep 423236
在這個例子中,沒有進程正在佔用。如果您找到了一個進程,您可能會發現您可以暫時停止該進程,以便能夠安全地卸載存儲設備。對於其他被佔用的文件,你也可以使用這些方法來查找並解決問題。
三、使用卸載命令
有時運行卸載命令後會有錯誤,如設備正在使用,無法解除某些掛載的客戶端或者是已經進行了已取消的操作。如果某些進程確實沒有相關聯的切換或者服務,則可以使用「fuser」或者「lsof」工具實現卸載。
這裡介紹兩種卸載命令方法,分別是:fuser和lsof命令。
四、使用fuser命令
fuser 命令用於標明當前使用著文件的進程,可以使用 kill 命令殺掉這個進程以釋放文件佔用,然後進行卸載操作。以下是使用fuser命令的步驟:
1.查找佔用的設備
$ sudo fuser -m # 查找佔用的設備 $ sudo fuser -m /dev/sda1 # 查找佔用的設備設備sda1
2.查找進程名
$ sudo lsof /dev/sda1
使用此命令,系統將會列出哪些進程正在使用該指定設備。然後,你需要找出哪些進程不必要地持有設備的句柄 – 這可能是一些已經掛起的進程。然後你可以使用fuser命令來測試需要殺掉的進程,如下所示:
$ sudo fuser -c /dev/sdc1
之後,你可以使用kill命令結束指定進程,然後再一次嘗試卸載。
五、使用lsof命令
lsof 命令用於列出當前系統中打開的文件或者進程信息,同樣可以使用 kill 命令殺掉進程以釋放文件佔用,然後進行卸載操作。以下是使用lsof命令的步驟:
1.使用lsof查看設備信息
$ sudo lsof | grep "/dev/sdb1"
2.查找進程名
$ sudo lsof /dev/sdc1
使用此命令,系統將列出哪些進程正在使用指定設備。找出哪些進程並進行正確處理,然後再一次嘗試卸載設備。
六、總結
錯誤提示「umount device is busy」意味著您的設備已被某個進程或文件所佔用,可能導致數據損壞。在卸載之前,務必了解哪些進程或文件佔用了設備,然後殺掉這些進程或文件。使用fuser和lsof命令可幫助我們方便地進行查找,並解決某些死鎖問題。
原創文章,作者:MJPAE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369553.html