df -l se muestra 100% lleno pero el archivo fue eliminado

df -l se muestra 100% lleno pero el archivo fue eliminado

Recibí una alerta de que un disco local estaba lleno;

dm@fooserv:/local/data/plog $ df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/rootvg-datavol
                     121790564 115659468         0 100% /local/data
tmpfs                   102400      1028    101372   2% /var/asagent/lib/asagen

Revisé el directorio y vi el archivo.

user@fooserv:/local/data/plog $ ls -ltr
total 84926904
lrwxrwxrwx 1 user ers_gsd          37 Aug 15 03:00 bomb.log -> /local/data/plog/bomb.31655.log
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 03:00 recovery.log
drwxrwxrwt 2 user ers_gsd        4096 Aug 15 03:00 log/
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 03:00 dropping.log
-rw-rw-rw- 1 user ers_gsd       10109 Aug 15 09:20 proc_fooserv.log
-rw-rw-rw- 1 user ers_gsd      381083 Aug 15 10:25 trip_bomb.rip.1.log
-rw-rw-rw- 1 user ers_gsd    60563456 Aug 15 13:35 bomb.31655.log
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 13:37 bomb.stats
-rw-rw-rw- 1 user ers_gsd 86819237888 Aug 15 13:37 process-one.log

Descubrí qué proceso estaba creando los archivos y los eliminé:

user@fooserv:/local/data/plog $ ps -ef | grep 12077
user    12077     1  0 09:20 ?        00:00:00 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log
user    12085 12077  0 09:20 ?        00:00:35 tail -f /local/data/plog/process-one.log
user    12088 12077  0 09:20 ?        00:01:31 grep ERR
user    12095 12077  0 09:20 ?        00:02:06 grep -v FIXME
user    12098 12077 61 09:20 ?        02:38:56 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log
user    22836 32756  0 13:36 pts/0    00:00:00 grep 12077
user@fooserv:/local/data/plog $ kill 12098
user@fooserv:/local/data/plog $ kill 12100

Eliminé el archivo:

usuario@fooserv:/local/data/plog $ rm proceso-one.log

el df todavía dice que el directorio está lleno:

dm@fooserv:/local/data/plog $ df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/rootvg-datavol
                    121790564 115659468         0 100% /local/data
   tmpfs                   102400      1028    101372   2% /var/asagent/lib/asagent
user@fooserv:/local/data/plog $

~

Respuesta1

Intentando verificar si el proceso aún se está ejecutando, lo que está causando que se retengan los recursos del archivo.

lsof -nP | grep '(deleted)'

Debería darte un punto de partida.

Respuesta2

¿Estás seguro de que mataste el proceso correcto? Parece que 12077es el que abre/crea/contiene el archivo en cuestión.

Respuesta3

Hymie probablemente tenga razón: o canceló el proceso incorrecto o más de un proceso tiene el archivo abierto. Al eliminar el archivo, se eliminó el inodo de la tabla del directorio, pero el espacio no se libera hasta que cada proceso que utiliza el archivo lo cierra. No está bloqueado en sí, pero hay un contador que debe estar en cero antes de que se recupere espacio.

Pruebe lsof. Y como ya eliminó el archivo, vea lo que está abierto en el directorio:

$lsof +D /local/datos/plog

O uno de los otros encantamientos de lsof:http://www.thegeekstuff.com/2012/08/lsof-command-examples/

Respuesta4

Encontré esta buena explicación aquí:

https://access.redhat.com/solutions/2316

Como en la respuesta de R J, lsof | grep deletedes de gran ayuda. Una vez que identifiqué a los principales infractores (es decir, decenas de archivos GB), utilicé echo > /proc/pid/fd/fd_number, donde pid y fd se identifican como en el enlace anterior.

Requerirá sudo. Además, reiniciar también ayuda.

El consejo vinculado fue particularmente útil, ya que teníamos la restricción de no reiniciar la máquina.

información relacionada