Discrepancia entre "du" y "df"

Discrepancia entre "du" y "df"

Tengo una extraña discrepancia. Con "df" veo que mi disco raíz usa casi 229G.

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/dm-2                   241G  229G   13G  96% /

pero "du" me dice que sólo tengo unos 12 GB (redondeados) en uso.

# du -sh /* | grep G
3.2G    /run
2.1G    /usr
6.0G    /var

Ambos comandos se ejecutaron como root. Lo que puedo imaginar es que hay datos "ocultos" en un directorio donde ahora está montado un recurso compartido NFS. Si este es el caso. ¿Cómo puedo saber qué archivos están "ocultos"? ¿O tienes otras ideas de por qué esos números son tan diferentes?

Respuesta1

Probablemente tengas una aplicación/proceso que tenga ese archivo abierto. Cuando elimina un archivo que una aplicación mantiene abierto, el sistema operativo aún ve el tamaño del archivo en df ya que el archivo todavía está abierto en la memoria.

Aquí hay documentación que escribí para un compañero de trabajo y que debería brindarle lo que necesita.

Truncar archivos abiertos grandes

Ha eliminado archivos para liberar espacio, pero el espacio no queda libre después. Ahora df -lah y du -lah muestran diferentes tamaños

Utilice LSOF para eliminar archivos pero retenidos

lsof |grep deleted

Esto mostrará todos los archivos eliminados pero que una aplicación mantiene abiertos.

java       2943  gateway  410w      REG              253,3  50482102     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3  46217973     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3  50483894     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

Puede reiniciar la aplicación para desbloquear archivos o truncarlos.

Para truncar los archivos, tendrá que mirar el resultado anterior para obtener el PID y el fd (número de descriptor de archivo).

truncar el archivo con

echo > /proc/PID/fd/fd_number

Ejemplo: para poner a cero el tamaño de archivo de los tres enumerados anteriormente, emitiría lo siguiente

echo > /proc/2943/fd/410 
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412

si tienes muchos para truncar bash al rescate.

for n in {410..412}; do 'echo  > /proc/2943/fd/$n'; done;

df -lah debería mostrar espacio libre ahora PERO los archivos se mostrarán en lsof |grep eliminados pero tendrán un tamaño de 1

java       2943  gateway  410w      REG              253,3         1     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3         1     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3         1     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

Los descriptores de archivos se publicarán en el próximo reinicio o reinicio/recarga de la aplicación que abrió los archivos.

Por supuesto, tendrás que ajustar tus comandos para que coincidan con la salida de tus archivos bloqueados.

Respuesta2

En mi caso (y me ayudaste en un MP diciéndome lo mismo) fue un problema de overmount. Tenía algunos datos en un directorio de la partición, que duno podía ver porque un montaje los había ocultado.

Así que intentadesmontar todos los soportesy busque datos en los directorios restantes.

¡Que lo pases bien y gracias!

información relacionada