Cómo encontrar y liberar espacio ocupado no presente en directorios en Linux.
Me he dado cuenta de que un servidor con un disco de 150 GB tenía 118 GB usados:
Mirando qué estaba ocupando este espacio veo:
¿Dónde está el resto del espacio usado?
Si un proceso activo mantiene abierto un archivo que ha sido eliminado, el espacio sigue ocupado hasta que el proceso en cuestión se detenga.
Para encontrar estos archivos:
En este caso, se observa que el proceso nscd tiene archivos abiertos.
Para liberar el espacio usado por todos estos archivos, reinicio el servicio:
Hecho esto, el espacio usado de forma "fantasma" se ha liberado:
Si esto no hubiera funcionado, se podría reiniciar el servidor para liberar todo el espacio ocupado.

Me he dado cuenta de que un servidor con un disco de 150 GB tenía 118 GB usados:
HOST # ip-10-250-7-164:/home/ec2-user # df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 7.9G 4.0K 7.9G 1% /dev/shm
tmpfs 3.2G 8.8M 3.2G 1% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/xvda3 150G 119 32G 80% /
/dev/xvda2 20M 146K 20M 1% /boot/efi
tmpfs 1.6G 0 1.6G 0% /run/user/1000
Mirando qué estaba ocupando este espacio veo:
HOST # du -h --max-depth=1 | sort -hr
du: cannot access './proc/22284/task/22284/fd/4': No such file or directory
du: cannot access './proc/22284/task/22284/fdinfo/4': No such file or directory
du: cannot access './proc/22284/fd/3': No such file or directory
du: cannot access './proc/22284/fdinfo/3': No such file or directory
32G .
19G ./var
5.8G ./srv
3.6G ./usr
2.1G ./home
591M ./opt
524M ./lib
321M ./run
106M ./boot
24M ./etc
15M ./tmp
9.0M ./sbin
8.5M ./lib64
7.3M ./root
744K ./bin
16K ./dev
8.0K ./CPAN
0 ./sys
0 ./selinux
0 ./proc
0 ./mnt
¿Dónde está el resto del espacio usado?
Si un proceso activo mantiene abierto un archivo que ha sido eliminado, el espacio sigue ocupado hasta que el proceso en cuestión se detenga.
Para encontrar estos archivos:
HOST # lsof | grep deleted
nscd 628 nscd 10u REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted)
nscd 628 nscd 11r REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted)
nscd 628 651 nscd nscd 10u REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted)
nscd 628 651 nscd nscd 11r REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted)
...
En este caso, se observa que el proceso nscd tiene archivos abiertos.
Para liberar el espacio usado por todos estos archivos, reinicio el servicio:
HOST # systemctl restart nscd
Hecho esto, el espacio usado de forma "fantasma" se ha liberado:
HOST # # df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 7.9G 4.0K 7.9G 1% /dev/shm
tmpfs 3.2G 8.8M 3.2G 1% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/xvda3 150G 32G 119G 22% /
/dev/xvda2 20M 146K 20M 1% /boot/efi
tmpfs 1.6G 0 1.6G 0% /run/user/1000
Si esto no hubiera funcionado, se podría reiniciar el servidor para liberar todo el espacio ocupado.