Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

DF vs DU


Hay ocasiones en las que la salida de df no nos cuadrará con la de du, esto puede ser debido a varios factores:

  • Los ficheros son retenidos por procesos activos
  • Se ha montado un directorio sobre otro

 

Para comprender este comportamiento debemos tener en cuenta el funcionamiento de cada una de las herramientas:

  • df --> Consulta el superbloque principal del sistema de ficheros, si esta info es incorrecta df mostrará datos incorrectos. Si se ha realizado un fsck y no se reinicia puede que los datos sean erróneos.
  • du --> Pasa por los directorios buscando ficheros y sumando el espacio consumido, puede ver lo mismo que un ls.

 

NOTA: Si un fichero es utilizado por un proceso y se borra, du no lo detectará ya que en el disco no existe, pero df consultará la info del sistema de ficheros, como el proceso está utilizando este espacio no se ha marcado como libre(no se ha eliminado la entrada correspondiente en la tabla de inodos).

Para encontrar los procesos responsables podemos ejecutar:

for PID in $(lsof |grep deleted|awk -F " " '{print$2}'); do echo PID: $PID; done

Quien dice echo $PID dice kill -9 $PID, jajaja

 

Otro posible problema es montar un dsp en un dir con datos, du solo verá lo que hay arriba mientras df verá todos los datos, para solventar este problema podemos emplear el siguiente "truco":

mkdir /mnt/au2
mkdir /mnt/aux2
touch /mnt/aux/aaa
mount /dev/sda1 /mnt/aux/
ls -la /mnt/aux/aaa
ls: no se puede acceder a /mnt/aux/aaa: No existe el fichero o el directorio

Ahora solo vemos el contenido de sda1.

 

mount --bind / /mnt/aux2/
ls -la /mnt/aux2/mnt/aux/aaa
-rw-r--r-- 1 root root 0 sep 20 22:22 /mnt/aux2/mnt/aux/aaa

Si hacemos un du sobre /mnt/aux2/ podemos ver lo que hay en el sistema de ficheros de abajo ;)


Autor: Kr0m -- 20/09/2013 22:09:33