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:
Quien dice echo $PID dice kill -9 $PID, jajaja
Otro posible problema es montar un dispositivo 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/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.
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 ;)