在 Linux 命令行中卸载磁盘并不复杂,只需要执行 umount 命令即可:
但有时候可能会遇到报错信息,比如:umount: target is busy
那么该怎样解决这个问题呢?
在介绍如何解决问题之前,我们先来了解一下产生这个问题的原因。
Umount target is busy 错误产生的原因
原因很简单,要卸载的目标设备还仍在使用中。
如果有足够的权限,任何进程都可能正在使用你即将要卸载的驱动器。为了防止数据丢失,所以系统内核不允许你将其卸载。
那么怎么解决这个问题呢?
提示:如果后台正在进行数据传输,可能会因为强制卸载驱动器而造成数据丢失。
基于某种原因,有时候我们需要强制卸载驱动器。比如因某种原因造成的驱动器没有相应。强制卸载驱动器有多种方法,比如:
- 杀掉进程;
- 使用强制卸载(force unmount)
- 使用延迟卸载(lazy unmount)
我们先来看看第一种方法。
方法1:通过杀掉进程来强制卸载驱动器
这应该是强制卸载磁盘驱动器的最佳方式,因为不管怎样,你都会杀掉这个进程。
首先第一步是要找到造成该问题的进程的 PID。可以使用 lsof 命令,如下所示:
找到 pid 后,要终止这个进程就很简单了:
终止进程后,再次执行磁盘驱动器 umount 命令就可以了:
方法2:强制卸载(适用于网络文件系统 Network file systems)
当处理网路文件系统的时候,强制卸载是遇到 'umount: target is busy' 问题时首选的方法。但是对于本地文件系统,其结果可能会不一样。
强制卸载磁盘,可以使用 umount 命令的 -f 选项,如下所示:
方法3:使用延迟卸载(lazy unmount)
该方法不会立刻卸载目标,而只是将其从命名空间中删除掉。当目标驱动器不被使用的时候,再将其卸载掉。使用这个方法,你可能无法确定目标是否已经被卸载掉,这就像薛定谔的卸载。我们之所以介绍这种方法,是因为它是最柔和(无害)的一种方法。
使用延迟卸载,可以在 umount 命令中添加 -l 选项,如下所示:
上述我们介绍的三种方法中,我更倾向于使用第一种方法,即直接杀掉占用磁盘的进程。当然大家可以根据各自实际情况选择合适的方法。