¿Por qué hay una gran diferencia entre «Tamaño» y «Tamaño en disco»?

La mayoría de las veces, los valores de «Tamaño» y «Tamaño en disco» estarán muy cerca de coincidir al verificar el tamaño de una carpeta o archivo, pero ¿qué sucede? ¿Hay una gran brecha entre los dos? La publicación de preguntas y respuestas del superusuario de hoy examina la respuesta a este desconcertante problema.

La sesión de preguntas y respuestas de hoy nos la ofrece SuperUser, una subdivisión de Stack Exchange, una colección comunitaria de sitios web de preguntas y respuestas.

La cuestión

El superusuario thelastblack reader quiere saber por qué hay una diferencia tan grande entre «Tamaño» y «Tamaño en disco» para una carpeta en la tarjeta SD de su teléfono:

Como puede ver a continuación, hay mucha diferencia entre los campos «Tamaño» y «Tamaño en disco» para esta carpeta. ¿Por qué entonces?

Sé que «Tamaño en disco» debería ser un poco más que «Tamaño» debido a las unidades de asignación en Windows, pero ¿por qué hay tanta diferencia? ¿Podría ser por la gran cantidad de archivos?

Por cierto, esta carpeta está en la tarjeta SD de mi teléfono Android. En el interior, mi aplicación de mapas almacena sus mapas en caché y la aplicación obtiene sus mapas de Google Maps.

Mirando la captura de pantalla, ciertamente hay una gran diferencia entre «Tamaño» y «Tamaño en disco», entonces, ¿qué sucedió aquí para causar eso?

La respuesta

El colaborador de superusuario Bob tiene la respuesta para nosotros:

Supongo que está utilizando el sistema de archivos FAT / FAT32 aquí, ya que menciona que es una tarjeta SD. NTFS y exFAT se comportan de la misma manera con respecto a las unidades de asignación. Otros sistemas de archivos pueden ser diferentes, pero de todos modos Windows no los admite.

Si tiene muchos archivos pequeños, definitivamente es posible. Considera esto:

  • 50.000 archivos
  • Tamaño de clúster de 32 KB (unidades de asignación), que es el máximo para FAT32

Ok, ahora el espacio mínimo tomado es 50,000 * 32,000 = 1.6 GB (usando prefijos SI, no binarios, para simplificar las matemáticas). El espacio ocupado por cada archivo en el disco es siempre un múltiplo del tamaño de la unidad de asignación, y aquí asumimos que cada archivo es en realidad lo suficientemente pequeño como para caber en una sola unidad, con un poco de espacio restante (perdido).

Si cada archivo tuviera un promedio de 2 KB, obtendría aproximadamente 100 MB en total, pero también perdería 15 veces más (30 KB por archivo) en promedio debido al tamaño de la unidad de asignación.

Explicación detallada

¿Por qué está pasando esto? Bueno, el sistema de archivos FAT32 necesita realizar un seguimiento de dónde se almacena cada archivo. Si tuviera una lista de cada byte, la tabla (como una libreta de direcciones) crecería al mismo ritmo que los datos y desperdiciaría mucho espacio. Por lo tanto, utilizan «unidades de asignación», también llamadas «tamaño de grupo». El volumen se divide en estas unidades de asignación y, en lo que respecta al sistema de archivos, no se pueden subdividir: son los bloques más pequeños que puede abordar. Al igual que tienes un número de casa, pero a tu cartero no le importa cuántos dormitorios tienes o quién vive en ellos.

Entonces, ¿qué pasa si tiene un archivo muy pequeño? Bueno, al sistema de archivos no le importa si el archivo es 0KB, 2KB o incluso 15KB, le dará el menor espacio posible; en el ejemplo anterior, es 32KB. El archivo solo usa una pequeña cantidad de ese espacio, y el el resto es esencialmente un desperdicio, pero aún pertenece al archivo, al igual que una habitación que deja desocupada.

¿Por qué hay diferentes tamaños de unidades de asignación? Bueno, se convierte en una compensación entre tener una mesa más grande (libreta de direcciones, por ejemplo, decir que John es dueño de una casa en 123 Fake Street, 124 Fake Street, 666 Satan Lane, etc.), o más espacio perdido en cada unidad ( casa). Si tiene archivos más grandes, tiene más sentido usar unidades de asignación más grandes, ya que un archivo no obtiene una unidad nueva (de inicio) hasta que se llenan todos los demás. Si tiene muchos archivos pequeños, bueno, tendrá una mesa grande (libreta de direcciones) de todos modos, por lo que también podría darles unidades pequeñas (casas).

Las unidades de asignación grandes, por regla general, desperdiciarán mucho espacio si tiene muchos archivos pequeños. Por lo general, no hay una buena razón para superar los 4 KB para uso general.

¿Fragmentación?

En cuanto a la fragmentación, la fragmentación no debería desperdiciar espacio de esta manera. Los archivos grandes se pueden fragmentar, es decir, dividir en varias unidades de asignación, pero cada unidad debe llenarse antes de que comience la siguiente. La desfragmentación puede ahorrar un poco de espacio en las tablas de asignación, pero no es su problema específico.

Soluciones posibles

Como gladiador sugerido2345, sus únicas opciones reales en este momento son vivir con él o reformatear con unidades de asignación más pequeñas.

Su tarjeta puede formatearse como FAT16, que tiene un límite más pequeño en el tamaño de la tabla y, por lo tanto, requiere unidades de asignación mucho más grandes para manejar un volumen mayor (con un límite superior de 2 GB con una asignación d de 32 KB). La fuente cortesía de Braiam. Si es así, debería poder formatear de forma segura a FAT32 de todos modos.

¿Tiene algo que agregar a la explicación? Habla en los comentarios. ¿Quiere leer más respuestas de otros usuarios expertos en tecnología de Stack Exchange? Consulte el hilo de discusión completo aquí..

Experto Geek - Tu Guía en Tendencias Tecnológicas