# Linux - unmount a busy target safely # Goal - removing target without data loss Unplugging or `unmount -l` (lazy unmount) can cause data loss. I want to share a way o avoid data loss. **Side note**: `unmount -l` will let you unmount the device, but as far as I know only 'hides' the mountpoint, and active processes can still write on said device. #### The problem `Error unmounting /dev/sdc1: target is busy` So, there are now different ways to unmount the target safely. **Side note**: the most common case is that you are still in a directory of said target. It happened way too often to me. ## Preparation Those steps are not necessary, but help you troubleshoot. #### Finding the mount point We are going to use `df -h` to find the mount point of the busy target. It is often not necessary, but it can be helpful. ```bash kuser@pleasejustwork:~$ df -h [...] /dev/sdc1 59G 25G 35G 42% /media/kuser/hdd-target ``` #### Check if the device is still actively in use Additionally, you can check the activity of said device with [iostat](https://www.man7.org/linux/man-pages/man1/iostat.1.html). ```bash kuser@pleasejustwork:~$ iostat 1 -p sdc vg-cpu: %user %nice %system %iowait %steal %idle 1,14 0,00 0,63 2,66 0,00 95,56 Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd sdc 13,00 0,00 7,50 0,00 0 7 0 sdc1 13,00 0,00 7,50 0,00 0 7 0 ``` `iostat` is powerful, but in this case the most important columns here are `kB_read/s kB_wrtn/s`. If there is anything but `0,00`, the device is in use. If there is any activity and you unplug or unmount the device forcefully, data loss will most likely occur. ## Finding the process ### Using 'fuser' More information can be found in the [manual of 'fuser'](https://linux.die.net/man/1/fuser). ```bash kuser@pleasejustwork:~$ fuser -vm /dev/sdc1 USER PID ACCESS COMMAND /dev/sdc1: root kernel mount /media/kuser/hdd-target kuser 43966 F.c.. kate kuser 44842 ..c.. kate ``` I prefer 'fuser' since it is installed on most OS and does the job too. ### Using 'lsof' More information can be found in the [manual of 'lsof' (list open files)](https://linux.die.net/man/8/lsof). ```bash kuser@pleasejustwork:~$ lsof /dev/sdc1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME kate 43966 kuser cwd DIR 8,33 32768 1 /media/kuser/hdd-target kate 43966 kuser 24w REG 8,33 142 2176 /media/kuser/hdd-target/.busybusy.txt.kate-swp ``` or ```bash kuser@pleasejustwork:~$ lsof /media/kuser/hdd-target COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME kate 43966 kuser cwd DIR 8,33 32768 1 /media/kuser/hdd-target kate 43966 kuser 24w REG 8,33 142 2176 /media/kuser/hdd-target/.busybusy.txt.kate-swp ``` ### Kill process / close program Kill process by PID: : `sudo kill -9 43966` or simply close the program that is using the file in the GUI. ### Unmount Try to unmount again. ## Some other methods I have had no problems with those yet, but some notable mentions. Some other things to look into: : check the swap partition: `cat /proc/swaps` : stop nfs-kernel-server : stop samba/smb server : check for symbolic links There are more scenarios in which a target can be busy, but this should cover 95% of cases. ---