一、了解错误原因
在准备拔出你的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命令可帮助我们方便地进行查找,并解决某些死锁问题。