El problema
En un sistema basado en Linux, el sistema de archivos raíz se está llenando por algún proceso desconocido. Continúa independientemente de qué archivos se muevan o limpien del sistema de archivos.
# df -hP / /dev/mapper/VGExaDb-LVDbSys1 ext3 30G 29G 0 100% /
No hay archivos grandes para dar cuenta del sistema de archivos completo:
# find / -xdev -type f -size +100M -exec ls -lh {} \;
No hay directorios grandes para dar cuenta del sistema de archivos completo:
# du -h --max-depth=1 / 42M /sbin 13M /etc 2.4G /usr 45M /tmp 451M /var 192M /lib (and so on) ...
La solución
En un momento del pasado, dos o más procesos usaban un archivo; por ejemplo,/tmp/top.log. Un proceso detuvo su acceso a /tmp/top.log eliminándolo (en realidad es una entrada de directorio) y el otro proceso continuó escribiendo en la referencia del inodo, lo que permitió que el archivo siguiera creciendo.
Esto se puede ver en la salida de:“lsof +L 1 ”
# lsof +L 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME top 34261 root 1W REG 252,0 21460567592 0 1785896 /tmp/top.log (deleted)
También se enumeraron otros archivos, pero eran mucho más pequeños.
Esto muestra que user=root estaba ejecutando un comando superior que se estaba almacenando en /tmp/top.log, y que actualmente no hay enlaces a ese archivo. Ese archivo de spool tenía un tamaño de 21 Gb, pero no se informó en la salida "du –h –max- depth=1 /", donde /tmp aparece como solo 45M.
Siga los pasos a continuación para identificar y eliminar dicho proceso.
1. Identifique los archivos en el sistema que tienen menos de 1 enlace con el comando:
# lsof +L 1
2. Elimine cualquier proceso que esté escribiendo en cualquier archivo inusualmente grande de la lista. En el ejemplo anterior, ejecutaría:
# kill 34261
3. Se liberará espacio cuando el proceso final deje de usar el archivo.