311 votos

¿Por qué hay tanta diferencia entre "Tamaño" y "Tamaño en disco"?

Como puede ver a continuación, hay mucha diferencia entre el Tamaño y Tamaño en disco campos en mi carpeta. ¿Por qué?

Screenshot showing 50,875 files in 1,504 folders, 105 MB being 1.43 GB on disk

Sé que Tamaño en disco debe ser un poco más que Tamaño debido a las unidades de asignación en Windows, pero ¿por qué tanta diferencia? ¿Podría ser por el gran número de archivos?

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

0 votos

He encontrado algo : Pregunta . ¿Podría ser este también mi problema?

10 votos

Hola thelastblack, y bienvenido a SuperUser. He editado tu pregunta para eliminar la parte sobre la desfragmentación, ya que las dos respuestas existentes se centran en la discrepancia de tamaño/tamaño en el disco y el formato de Stack Exchange funciona mejor cuando cada pregunta publicada es sobre una sola cosa. Sin embargo, puedes volver a plantear esa pregunta por separado, aunque creo que las respuestas que has recibido hasta ahora sobre esta cuestión muestran que la desfragmentación no te ayudará. (En general, tampoco sirve de nada en los soportes de estado sólido). editar su pregunta si cree que he cambiado su intención de alguna manera.

1 votos

@MichaelKjörling Je, acabo de editar una pequeña discusión sobre la fragmentación (me distraje un poco antes)

310voto

notFound Puntos 41

Asumo que estás usando el sistema de archivos FAT/FAT32, ya que mencionas que es una tarjeta SD. NTFS y exFAT se comportan de manera similar con respecto a las unidades de asignación. Otros sistemas de archivos pueden ser diferentes, pero no son compatibles con Windows de todos modos.

Si tienes muchos archivos pequeños, esto es ciertamente posible. Piensa en esto:

  • 50.000 archivos.

  • 32 kB de tamaño de cluster (unidades de asignación), que es el máximo para FAT32

Bien, ahora el mínimo El espacio ocupado es de 50.000 * 32.000 = 1,6 GB (utilizando prefijos SI, no binarios, para simplificar las matemáticas). El espacio que ocupa cada archivo en el disco es siempre un múltiplo del tamaño de la unidad de asignación, y aquí suponemos que cada archivo es lo suficientemente pequeño como para caber en una sola unidad, con algo de espacio (desperdiciado) de sobra.

Si cada archivo tuviera una media de 2 kB, obtendrías unos 100 MB en total, pero también estás desperdiciando 15 veces eso (30 kB por archivo) de media debido al tamaño de la unidad de asignación.


Explicación detallada

¿Por qué ocurre esto? Bueno, el sistema de archivos FAT32 necesita llevar la cuenta de dónde se almacena cada archivo. Si mantuviera una lista de cada byte, la tabla (como una libreta de direcciones) crecería a la misma velocidad que los datos - y desperdiciaría mucho espacio. Así que lo que se hace es utilizar "unidades de asignación", también conocidas como "tamaño de cluster". El volumen se divide en estas unidades de asignación y, en lo que respecta al sistema de archivos, no pueden subdividirse: son los bloques más pequeños a los que puede dirigirse. Es como si tuvieras un número de casa, pero a tu cartero no le importa cuántas habitaciones tienes o quién vive en ellas.

¿Qué pasa si tienes un archivo muy pequeño? Bueno, al sistema de archivos no le importa si el archivo es de 0 kB, 2 kB o incluso 15 kB, le dará el menor espacio posible - en el ejemplo anterior, eso es 32 kB. Tu archivo sólo utiliza una pequeña cantidad de este espacio, y el resto está básicamente desperdiciado, pero sigue perteneciendo al archivo - como un dormitorio que dejas desocupado.

¿Por qué hay diferentes tamaños de unidades de asignación? Bueno, se convierte en un compromiso entre tener una tabla más grande (libreta de direcciones, por ejemplo, decir que Juan es dueño de una casa en 123 Fake Street, 124 Fake Street, 666 Satan Lane, etc.), o más espacio desperdiciado en cada unidad (casa). Si tiene archivos más grandes, tiene más sentido utilizar unidades de asignación más grandes, porque un archivo no obtiene una nueva unidad (casa) hasta que se llenan todas las demás. Si tienes muchos archivos pequeños, bueno, vas a tener una tabla grande (libreta de direcciones) de todos modos, así que puedes darles unidades pequeñas (casas).

Las unidades de asignación grandes, como regla general, desperdiciarán mucho espacio si tienes muchos archivos pequeños. No suele haber una buena razón para superar los 4 kB para uso general.


¿Fragmentación?

En cuanto a la fragmentación, ésta no debería desperdiciar espacio de esta manera. Los archivos grandes pueden fragmentarse, es decir, dividirse, en varias unidades de asignación, pero cada unidad debe llenarse antes de iniciar la siguiente. La desfragmentación podría ahorrar un poco de espacio en las tablas de asignación, pero este no es tu problema específico.


Posibles soluciones

Como gladiator2345 sugirió En este punto, sus únicas opciones reales son vivir con ello o reformatear con unidades de asignación más pequeñas.

Es posible que su tarjeta esté formateada en FAT16, que tiene un límite menor en el tamaño de la tabla y, por lo tanto, requiere unidades de asignación mucho mayores para poder abordar un volumen más grande (con un límite superior de 2 GB con unidades de asignación de 32 kB). Fuente cortesía de Braiam . Si ese es el caso, debería poder formatear con seguridad como FAT32 de todos modos.

4 votos

El espacio desperdiciado debido a los tamaños mínimos de asignación se denomina técnicamente "fragmentación interna", por lo que podría dicen que la fragmentación es la culpable. Pero todavía no es algo que cualquier herramienta de "desfragmentación" pueda hacer algo al respecto.

3 votos

(Menos técnicamente, se llama simplemente "holgura").

1 votos

El tamaño de los clústeres también limita el tamaño máximo del sistema de archivos. Por ejemplo, si tu espacio de direcciones es de 32 bits, tienes un total de ~4.290 millones de clusters posibles. Ahora bien, si utilizas el tamaño de cluster más pequeño soportado por NTFS (512 bytes), puedes direccionar un máximo de 512 * 2^32 bytes = 2 GiB. Si necesitas un volumen que pueda almacenar más de 2 GiB de datos, tienes que aumentar el tamaño del cluster. Todo esto es independiente del archivo más grande que intentes almacenar, siempre y cuando no puedas almacenar un archivo mayor a 2 GiB, ese es el menor de tus problemas.

45voto

Braiam Puntos 3457

Esta es una de esas situaciones en las que comprimir/archivar en un solo archivo puede ayudar. Qué Lo que dijo Bob en su respuesta es cierto pero la solución puede ser más fácil que reformar el disco como sugieren otras respuestas. Si comprime o archiva el directorio (usando zip, tar, o cualquier otro método) el sistema de archivos verá que tiene un solo archivo grande, en lugar de varios más pequeños. Incluso sin comprimirlo estarás recuperando casi 1,4 GiB de espacio, porque todos esos "archivos pequeños" se contarán como un único archivo grande.

Dentro de esto, mi aplicación de mapas almacena sus mapas en caché y la aplicación obtiene su mapa de Google Maps

Tal vez debería discutir con el desarrollador para utilizar un archivo o una base de datos en lugar de múltiples archivos. Esto probablemente también ayudará a tener el disco menos fragmentado y seguramente ahorrará espacio, especialmente si se trata de una unidad flash NAND. Si explicas la ridícula situación en la que 100MB de datos útiles/de carga se convierten en 1.4GiB, hay algo que está mal en la forma en que se almacenan los datos, y los desarrolladores deberían aportar una solución más agradable.

1 votos

> Dentro de esto, mi aplicación de mapas almacena sus mapas en caché y la aplicación obtiene su mapa de Google Maps. - Por desgracia, en este caso, la compresión (que es efectivamente un sistema de archivos por encima de la base) requeriría el apoyo de esta aplicación de mapeo.

1 votos

@Bob entonces la solución debe venir del lado del desarrollador D:

4 votos

Eso es totalmente cierto. Creo que por el momento, debería cambiar mi aplicación.

26voto

mins Puntos 477

Como ya se ha explicado, la razón más común para la diferencia de tamaño es el espacio utilizado frente al espacio asignado. Pero no es la única posible, NTFS tiene una función para añadir datos ocultos a los archivos. Esta posibilidad fue la que explotó el ransomware del sector sanitario a finales de 2019.

Bifurcación de archivos y flujo de datos alternativo

" Horquilla de recursos " ha sido utilizado por Apple desde 1984 (Macintosh) para almacenar el contenido principal de un programa (instrucciones) y los recursos asociados (como iconos y menús) en el mismo archivo. Incrustar recursos en archivos ejecutables es una técnica común, pero hacerlo con forks no lo es.

Apple diseñó sistemáticamente los sistemas de archivos de Macintosh para admitir la bifurcación de archivos, y cuando Microsoft diseñó NTFS para sustituir a FAT, también se introdujo la bifurcación con el nombre de " flujo de datos alternativo " (ADS).

En NTFS, un archivo contiene:

  • El flujo de datos obligatorio sin nombre (UDS)
  • Uno o más flujos de datos alternativos (ADS) opcionales.

Oculto a la vista de todos

La bifurcación de archivos no es mala, excepto que los ADS de NTFS no son compatibles con las herramientas comunes, incluido el Explorador de Windows, los ADS son de facto una característica oculta, un regalo inesperado para los hackers. En Wikipedia :

Los flujos alternativos no aparecen en el Explorador de Windows, y su tamaño no se incluye en el tamaño del archivo.

Mientras que el tamaño del archivo, que sólo informa del tamaño UDS, no se modifica por la existencia de ADS, el tamaño asignado (grupos asignados al archivo por el sistema de archivos) informa del tamaño real del archivo, con todos los flujos incluidos.

El explorador de Windows no reporta ADS, ni el comando CMD dir . Sin embargo los ADS son visibles con:

Tenga en cuenta que todavía es posible ocultar ADS de algunas de estas herramientas mediante el uso de palabras clave reservadas del sistema de archivos (véase el documento de Pierce vinculado a continuación).

  • Windows utiliza ADS para etiquetar un archivo como descargado de Internet y para almacenar otros metadatos.

  • Los hackers utilizan los ADS para ocultar datos y código para actividades maliciosas.

Descripción exhaustiva de la ADS que merece la pena leer:

Uso de ADS por parte del malware

Las herramientas antimalware serias buscan ADS, pero el malware sigue utilizando ADS, a gran escala, porque:

  • Algunas suites de seguridad ni siquiera son conscientes de ADS, o no pueden identificar los usos maliciosos de ADS.
  • Es fácil redirigir la ejecución de un archivo legítimo a un ADS (por ejemplo, utilizando un acceso directo).

BitPaymer

El ransomware BitPaymer entra en el ordenador como un archivo normal y visible, pero cuando se ejecuta se copia en un archivo legítimo como un ADS y luego eliminar el archivo inicial. Como esto no cambia el tamaño del archivo legítimo, y los ADS no aparecen en las herramientas comunes, el malware está ahora prácticamente oculto.

Operación Cobalt Kitty

También se esconde usando ADS .

Lo que quiero decir es que En caso de que se observe una gran diferencia de tamaño de archivo (más de un tamaño del grupo : 4KB), no pases por alto la posibilidad de ADS, y el malware oculto.

Experimente usted mismo el ADS

Para experimentar con seguridad con ADS, pruebe esto a nivel de DOS/CMD...

Crear y luego mostrar el contenido de un archivo en root de C:

C:\> echo The main data stream> test.txt
C:\> type test.txt

Resultado:

C:\> The main data stream

Ahora añada un ADS con el mismo método, sólo especifique el nombre del ADS además del nombre del archivo:

C:\> echo The secret message> test.txt:secret

Acabas de ocultar el mensaje secreto en el archivo. Observe que el tamaño del archivo en el Explorador no ha cambiado a pesar de que hemos añadido bytes en el ADS "secreto".

Intenta mostrar el contenido de ADS:

C:\> type test.txt:secret

Resultado:

The filename, directory name, or volume label syntax is incorrect.

CMD type no es capaz de mostrar el contenido del ADS. En su lugar, utilizaremos el Bloc de notas:

notepad test.txt:secret

En el Bloc de notas podemos ver el contenido de los ADS:

The secret message

También puede ocultar un ejecutable completo en un ADS de un inocente archivo de texto, y ejecutarlo en cualquier momento. La riqueza no hace daño a los hackers :-)

0 votos

Yo no soy un hombre de Win, mi trabajo se realiza principalmente en Linux. Esto fue muy útil. Gracias

4 votos

Merece la pena utilizar una herramienta como Streams de Sysinternals para comprobar el uso de ADS. Por ejemplo, los archivos descargados en un sistema Windows pueden ser etiquetados con una fuente en ADS, aunque ésta es pequeña y no debería ocupar espacio. No se mostrará en la salida del dir o del Explorador normalmente. Puede ocupar bloques y agravar el problema de uso de disco que está investigando. .

21voto

ichathan Puntos 1155

El problema puede deberse al tamaño del grupo.

Según Microsoft :

Si no está utilizando la compresión NTFS para cualquier archivo o carpeta contenidos en el volumen, la diferencia entre TAMAÑO y TAMAÑO EN EL DISCO es espacio desperdiciado debido a un tamaño de cluster mayor al necesario. Usted Debe intentar utilizar un tamaño de clúster óptimo para que el valor de SIZE ON DISK sea lo más cercano posible al valor de SIZE. Una excesiva discrepancia entre el valor SIZE ON DISK y el valor SIZE es una es una indicación de que el tamaño de cluster por defecto es demasiado grande para el promedio de tamaño promedio de los archivos que se almacenan en el volumen, y que debe ser disminuirlo. Esto sólo puede hacerse haciendo una copia de seguridad del volumen y luego formatear el volumen utilizando el comando format y el parámetro /a para especificar el tamaño de asignación apropiado: IE: format D: /a:2048 (Este ejemplo utiliza un tamaño de clúster de 2 KB).

Intente formatear su unidad con un tamaño de clúster más pequeño.

4 votos

Dicho esto, no hay que hacer que el tamaño del cluster sea inferior a 4096 bytes o que no sea múltiplo de este número. El sistema operativo de 32 bits trabaja con páginas que (en el caso de los no-PAE) son de 4096 bytes, por lo que usar clusters no múltiples puede afectar negativamente al rendimiento del sistema de archivos. Por eso el tamaño por defecto es de 4096 bytes.

2 votos

Para añadir a lo que dijo @Ruslan, los discos duros más nuevos tienen ahora un tamaño de sector de 4 kB, y sería óptimo alinear el sistema de archivos con los sectores físicos, y tener un múltiplo del tamaño del sector físico como tamaño de la unidad de asignación.

1 votos

@Ruslan Creo que quieres decir que debe ser una potencia de dos veces 4096. 12288 (3×4096) y 20480 (5×4096) no son buenas opciones.

9voto

Matias N Goldberg Puntos 181

Veo que mucha gente te recomienda reformatear tu disco con un tamaño de cluster menor. Dado que se trata de una tarjeta SD, tenga en cuenta que muchos proveedores preformatean la tarjeta con el tamaño de clúster recomendado para que coincida con el tamaño de clúster de la NAND (mantener ambos sincronizados es muy importante para un rendimiento óptimo de lectura/escritura y para reducir el desgaste)

No puedes cambiar el tamaño del cluster de la NAND (es un atributo físico del hardware de tu tarjeta SD).

Primero ejecuta scandisk/chkdsk en tu tarjeta SD para asegurarte de que el problema del informe de tamaño no radica en un sistema de archivos corrupto.

En segundo lugar, te sugiero que informes del error a los desarrolladores de Google Map, ya que ellos son los culpables. Deberían utilizar un método de almacenamiento superior. La solución también debería hacer que la aplicación se ejecute más rápido en muchos dispositivos debido a una menor actividad de E/S y del controlador del sistema de archivos.

0 votos

En realidad, no era Google Maps, sino otra aplicación que utilizaba los mapas de Google. Informé al desarrollador, y simplemente eliminé esos archivos de mi SD.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X