Forcing Linux to Unmount a Filesystem Reporting “device is busy”

Linux may report “device is busy” when we try to umount a filesystem. This behavior is reasonable as it can help us avoid data loss by disallowing unmouting a filesystem when it is being used. But for situations when we are sure there is something wrong happened or we care not data lost such as a NFS mounting failed because that the NFS server is dead and will never be back. Under these kinds of situations, how do we force Linux to unmount a filesystem?

First, why “device is busy”? The reason is that there are likely programs/kernel threads accessing partition or open files. Knowing the reason, we can find the solutions.

Option 0: Try to remount the filesystem if what you want is remounting

Here this option is not to really do unmounting a filesystem. But it is a useful technique. It is common that the reason we want to unmount a filesystem is that we find that there are problems with the mounting temporarily and we want to unmount and re-mount it. For these situations, you may first try

# mount -o remount /your/mount/point

The “-o remount” option will make Linux try to remount the filesystem. If the remounting can succeed, it avoids the problems of disrupting or killing processes.

Option 1: Force unmount

There are options of umount to detach a busy device immediately even if the device is busy.

-f, --force
  Force an unmount (in case of an unreachable NFS system).
  (Requires kernel 2.1.116 or later.)

The -f option is for unreachable NFS system. Please be aware that programs may not expect a force or lazy unmounting and these options may disrupt running processes using the filesystem, cause data loss or corrupt files opened.

Option 2: Kill the processes using the filesystem and then unmount it

If the reason is that processes are using the filesystem, we can kill the processes using the filesystem and then it will be fine to unmount it. Here, we introduce 2 common methods with 2 common tools.

Method 1: use lsof

The following command finds out the processes accessing the partition/filesystem. You need to run the following command as root. Here, we use the mount point /mnt/data as an example.

# lsof | grep '/mnt/data'

It will output lines like

bash  17622  user1 cwd   DIR    253,2  4096  2 /mnt/data

If you are sure that it is safe to kill the process, you may kill them by kill or kill -9. After the processes are killed, the filesystem will be able to be unmounted.

Method 2: use fuser

You can find out the processes using a filesystem (e.g. /mnt/data) by

# fuser /mnt/data

fuser can also help you kill all processes using a filesystem at the same time by

# fuser -k /mnt/data

or

# fuser -k -9 /mnt/data

Then you can continue to umount the filesystem.

Lastly, if all above options and methods failed for you, you may try the final method reboot or SysRq or hardware resetting to reboot you Linux.

Eric Ma

Eric is a systems guy. Eric is interested in building high-performance and scalable distributed systems and related technologies. The views or opinions expressed here are solely Eric's own and do not necessarily represent those of any third parties.

One comment:

Leave a Reply

Your email address will not be published. Required fields are marked *