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.)
-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
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 -9. After the processes are killed, the filesystem will be able to be unmounted.
Method 2: use
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
# fuser -k -9 /mnt/data
Then you can continue to umount the filesystem.