Carpetas vacías que ocupan espacio en linux

Antier me hicieron una pregunta de esas que llaman mucho mi atención, el caso es el siguiente: Un amigo me dijo que porque una carpeta vacía en linux le marcaba que ocupaba un espacio de 64 GB. No quería eliminar esa carpeta hasta estar totalmente seguro de que estuviera vacía.

Al principio creí que se trataba de un error, o que tenía alguna carpeta o archivos ocultos, pero no había tal, efectivamente, usando las herramientas de la terminal una carpeta vacía declara que ocupa espacio en el disco.

El experimento.

Para no arriesgar su instalación hice algunas pruebas en mi equipo, voy a explicar brevemente los comandos que se utilizaron.

Lo primero es crear una carpeta de pruebas

mkdir pruebas

Y luego revisamos el espacio que ocupa

stat pruebas

El espacio de la carpeta es de unos escasos 4 kb, que podemos confirmar con el comando du (disk usage).

Estadísticas de la carpeta vacía
Estadísticas de la carpeta vacía

Hasta aquí, todo normal, una carpeta vacía solo ocupa el espacio de la declaración de la carpeta.

Pocos archivos grandes

Bueno llegó la hora de crear algunos archivos. Para eso usé un pequeño script que permite generar archivos de texto del tamaño deseado.

Hice un archivo grande de 30 MB y 5 pequeños de 1 MB para tener un total de 35 MB de espacio ocupado en la carpeta. Con el comando ls -lh , podemos ver el total de espacio ocupado y el tamaño de los archivos individuales.

El resultado del comando: ls -lh
El resultado del comando: ls -lh

Si repetimos los comandos stat y du veremos que los cambios se reflejan en el espacio ocupado.

Espacio ocupado por los archivos grandes
Espacio ocupado por los archivos grandes

El espacio de la carpeta es el mismo, pero su contenido ahora es de 35 MB.

Ahora viene lo interesante, borro todos los archivos de la carpeta con el comando rm y vuelvo a revisar las estadísticas de la carpeta.

Todo vuelve a la normalidad, carpeta vacía, poco espacio.
Todo vuelve a la normalidad, carpeta vacía, poco espacio.

Y parece que todo vuelve a la normalidad a la normalidad.

Muchos archivos pequeños

Ahora hacemos el caso contrario, con ayuda de esta instrucción

for i in 'seq 1 10000'; do touch $i; done

Se van a crear 10,000 archivos pequeños y revisamos nuevamente sus estadísticas.

Muchos archivos pequeños ocupan poco espacio
Muchos archivos pequeños ocupan poco espacio

Ahora, esta carpeta con sus 10,000 archivos pequeños ocupa 152 Kb. Y procedemos a borrarlos.

Carpeta vacía que ocupa espacio
Carpeta vacía que ocupa espacio

Pero el espacio ocupado por la carpeta me dice que siguen siendo 152 Kb !!!!

Al parecer el truco consiste en el número de archivos, porque una gran cantidad de archivos requiere una mayor cantidad de bloques para guardar la información de la carpeta (se puede ver con el comando stat).

Esta información declarada se puede expander, pero no se contrae, como que reserva ese espacio aunque este disponible. Por eso si ahora creo 100 archivos (en lugar de 10,000) me sigue diciendo que ocupa los 152 Kb anteriores.

Puedo borrar la carpeta porque no contiene archivos.
Puedo borrar la carpeta porque no contiene archivos.

Al final, si borro los archivos y posteriormente la carpeta, es posible porque no contiene archivos, de lo contrario me daría un error ya que no es posible borrar una carpeta que no esta vacía.

Conclusiones

¿Entonces que muestra información muestra el comando du?, Muestra una mezcla de dos valores, uno es el espacio ocupado en disco por los archivos y el segundo es el espacio máximo ocupado para mostrar la lista de archivos contenidos en la carpeta (bloques necesarios). El primero se actualiza constantemente, el segundo no y muestra su valor máximo, es por eso que muestra la información de este dato aunque la carpeta este vacía.

Al parecer, este “detallito” esta presente en ext2/ext3/ext4 , pero no estoy seguro que sea lo mismo en otros sistemas de archivos, aunque sería interesante hacer algunas pruebas 🙂

Para saber más

9 comentarios en «Carpetas vacías que ocupan espacio en linux»

    • rfvera.. no tiene nada que ver, hice el experimento y después de vaciar la papelera, el comando du me sigue marcando el espacio ocupado.

      Pero gracias por comentar. 🙂

      Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.