Troubleshooting guide to reclaim space on disk after deleting files in Linux.
One of the common issues Linux Unix system users face is disk space is not being released even after files are deleted. Sysadmins face some issues when they try to recover disk space by deleting high sized files in a mount point and then they found disk utilization stays the same even after deleting huge files. Sometimes, application users are moving/deleting large log files and still won’t be able to reclaim space on the mount point.
In this troubleshooting guide, I will walk you through steps that will help you to reclaim space on disk after deleting files. Here we will learn how to remove deleted open files in Linux. Most of the time files are deleted manually but processes using those files keep them open and hence space is not reclaimed. df
also shows incorrect space utilization.
Process stop/start/restart
To resolve this issue, you need to gracefully or forcefully end processes using those deleted files. First, get a list of such deleted files that are still marked open by processes. Use lsof
(list open files) command with +L1
switch for this or you can directly grep for deleted in lsof
output without switch
root@kerneltalks # lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
tuned 777 root 7u REG 202,2 4096 0 8827610 /tmp/ffiJEo5nz (deleted)
root@kerneltalks # lsof | grep -i deleted
tuned 777 root 7u REG 202,2 4096 0 8827610 /tmp/ffiJEo5nz (deleted)
lsof
output can be read column wise as below –
- command
- PID
- user
- FD
- type
- device
- size
- node
- name
Now, in above output check the PID 777
and stop that process. If you can not stop it you can kill the process. In the case of application processes, you can refer application guides on how to stop, start, restart its processes. The restarting process helps in releasing the lock on that file which process made to hold it as open. Once the related process is stopped/restarted you can see space will be released and you can observe reduced utilization in df
command output.
Clear from proc filesystem
Another way is to vacate the space used by file by de-allocating that space from /proc
filesystem. As you are aware, every process in Linux has its allocations in /proc
filesystem i.e. process filesystem. Make sure that the process/application has no impact if you are flushing files (which are held open by an app) from /proc
filesystem.
You can find file allocation at /proc/<pid>/fd/<fd_number>
location. Where PID and fd_number you can get from lsof
output we saw above. If you check the type of this file then it’s a symbolic link to your deleted file.
root@kerneltalks # file /proc/777/fd/7
/proc/777/fd/7: broken symbolic link to `/tmp/ffiJEo5nz (deleted)
So, in our case we can do it using –
root@kerneltalks # > /proc/777/fd/7
That’s it! Flushing it will regain your lost space by those files which you already deleted.