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 12077
es 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 deleted
es 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.