Hola compañeros de la shell,
En algunas ocasiones podemos encontrarnos con diferencias o descuadres muy significativos (del orden incluso de GB) entre la salida que devuelve el comando al revisar el tamaño de un filesystem entre el comando:
df -kh .
y el comando:
du -sh .
Habitualmente, el origen de estas diferencias reside en que se ha borrado un fichero abierto por un proceso en ejecución que todavía esté corriendo.
Para tratar de identificar el proceso culpable, podemos acotar los procesos candidatos ejecutando:
find /proc/*/fd -type f -links 0 -exec ls -lrt {} \; 2>/dev/null | awk -F"/" '{print $3}' | xargs pwdx | grep Punto_De_Montaje
Una vez localicemos y matemos el proceso culpable, el espacio se liberará. Hasta aquí la primera parte de esta entrada.
Añadimos una segunda parte para revisar que ocurre cuando observamos Diferencia de valores al ejecutar du entre distintos hosts/directorios. Antes de nada, agradecimientos a Pedro F.S. por el tip.
Imaginemos que hemos desplegado un *.tar en los hosts: host_a y host_b. Dicho tar contiene un directorio con varios ficheros. Para asegurarnos de que el tamaño del directorio es el mismo ejecutamos «du -s» y nos llevamos el siguiente chasco:
host_a#du -s foo 1727096 foo host_b#du -s foo 1727088 foo
El tamaño del directorio desplegado NO coincide. Esta discrepancia se debe a que el tamaño ocupado en el disco del host_a no es el mismo que el del host_b. Para realizar una comparativa más segura debemos usar el parámetro –apparent-size:
du -s --apparent-size
Para más información, consultar:
https://www.gnu.org/software/coreutils/manual/html_node/du-invocation.html#du-invocation
Espero que os sirva.
Nos vemos al otro lado de la pantalla negra.
