Pregunta ¿Por qué hay una gran diferencia entre "Tamaño" y "Tamaño en el disco"?


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

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

Yo sé eso Tamaño en el disco debería 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 debido a la gran cantidad de archivos?

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


295


origen


Hola thelastblack, y bienvenido a SuperUser. Edité su pregunta para eliminar la parte sobre desfragmentación, ya que las dos respuestas existentes se centran en el tamaño / tamaño en la discrepancia del disco y el formato de Intercambio de pila funciona mejor cuando cada pregunta publicada es sobre una sola cosa. Sin embargo, puedes volver a preguntar eso como una pregunta aparte, aunque creo que las respuestas que has recibido hasta ahora sobre esta pregunta demuestran que la desfragmentación no te ayudará. (En general, tampoco da buenos resultados en los medios de estado sólido). Siéntase libre de editar su pregunta aún más si siente que cambié su intención de alguna manera. - Michael Kjörling
@ MichaelKjörling Heh, acabo de editar en una discusión menor sobre la fragmentación (se distrajo un poco antes) - Bob
@ MichaelKjörling No lo hagas edita preguntas retroactivamente para que se ajusten a las respuestas. Una de las respuestas aborda la parte de fragmentación de la pregunta de OP. Tu edición debe revertirse para evitar confusiones. - DanteTheEgregore
@DanteTheEgregore Si se está refiriendo a la respuesta de Bob, que de hecho se ha editado para analizar también los efectos de la fragmentación, antes de saltar la pistola, compruebe los historiales de edición y las marcas de tiempo de esa respuesta y la pregunta. En el momento de mi edición, la respuesta de Bob no cubría el tema de la fragmentación en absoluto. Si el OP quiere hacerlo, al volver a editar "¿desfragmentará los medios me ayudará con esto?" debería resolver cualquier confusión sobresaliente, aunque todavía siento eso es mejor preguntarlo como una pregunta separada; IMO la cuestión de la diferencia entre los dos valores no está relacionada. - Michael Kjörling
Me parece que esta aplicación está seriamente mal programada; considera archivar un informe de error. De ninguna manera soy un programador profesional, pero una vez pirateé algo similar en JavaME, y por supuesto uno de los problemas que tuve que resolver fue cómo almacenar todos esos pequeños mosaicos de mapas de manera eficiente (almacenamiento y acceso) en un contenedor. Terminé usando archivos zip sin comprimir. - A. Donda


Respuestas:


Asumiré que estás usando el sistema de archivos FAT / FAT32 aquí, 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 de todos modos no son compatibles con Windows.

Si tiene muchos archivos pequeños, esto es ciertamente 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 mínimo el espacio ocupado es de 50,000 * 32,000 = 1,6 GB (usando 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í asumimos que cada archivo es lo suficientemente pequeño como para caber dentro de una sola unidad, con un poco de espacio (desperdiciado).

Si cada archivo tuviera un promedio de 2 kB, obtendrá aproximadamente 100 MB en total, pero también está desperdiciando 15 veces ese promedio (30 kB por archivo) debido al tamaño de la unidad de asignación.


Explicación en profundidad

¿Por qué pasó esto? Bueno, el sistema de archivos FAT32 necesita hacer un seguimiento de dónde se almacena cada archivo. Si fuera a mantener 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. Entonces lo que hacen es usar "unidades de asignación", también conocidas como "tamaño de conglomerado". El volumen se divide en estas unidades de asignación y, en lo que respecta al sistema de archivos, no se pueden subdividir, ya que son los bloques más pequeños que puede abordar. Al igual que usted tiene un número de casa, pero a su cartero no le importa cuántos dormitorios tiene o quién vive en ellos.

Entonces, ¿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. Su archivo solo está usando una pequeña cantidad de este espacio, y el resto se desperdicia básicamente, pero aún pertenece al archivo, al igual que un dormitorio que deja desocupado.

¿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 posee 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, porque un archivo no obtiene una nueva unidad (casa) hasta que se completen todas las demás. Si tienes muchos archivos pequeños, bueno, vas a tener una gran mesa (libreta de direcciones) de todos modos así que también puedes darles pequeñas unidades (casas).

Las grandes unidades de asignación, como regla general, perderán mucho espacio si tienes muchos archivos pequeños. Por lo general, no hay una buena razón para ir por encima de 4 kB para uso general.


¿Fragmentación?

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


Soluciones posibles

Como gladiator2345 sugirió, sus únicas opciones reales en este momento son vivir con eso 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 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 abordar un volumen mayor (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 ser capaz de formatear de forma segura como FAT32 de todos modos.


299



El espacio desperdiciado debido a los tamaños de asignación mínimos en realidad se llama técnicamente "fragmentación interna", por lo que podría decir que la fragmentación es el culpable. Pero todavía no es algo que cualquier herramienta de "desfragmentación" pueda hacer algo al respecto. - hobbs
(Menos técnicamente, simplemente se llama "holgura"). - hobbs
Los tamaños de clúster también limitan el tamaño máximo del sistema de archivos. Por ejemplo, si su espacio de direcciones es de 32 bits, tiene un total de ~ 4.29 mil millones de clústeres totales posibles. Ahora, si usa el tamaño de clúster más pequeño compatible con NTFS (512 bytes), puede abordar un máximo de 512 * 2 ^ 32 bytes = 2 GiB. Si necesita un volumen que pueda almacenar más de 2 GiB de datos, debe aumentar el tamaño del clúster. Todo esto es independiente del archivo más grande que intenta almacenar, con la garantía de que no puede almacenar un archivo de más de 2 GiB que es el menor de sus problemas. - Andon M. Coleman
4 clusters KiB le permitirán abordar archivos en un volumen de hasta 16 TiB de tamaño, lo que debería ser suficiente en el futuro previsible. - Andon M. Coleman
Bueno, podría comprimir su archivo de pequeños archivos en un archivo grande. - einpoklum


Esta es una de esas situaciones en las que comprimir / archivar en un único archivo puede ayudar. Qué Bob dijo en su respuesta es cierto pero la solución puede ser más fácil que reformatear 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 único archivo grande, en lugar de varios archivos más pequeños. Incluso sin comprimir, recuperará casi 1.4 GiB de espacio, porque todos esos "archivos pequeños" se contarán como un solo 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 deba hablar con el desarrollador para usar 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 explica la situación ridícula en la que 100MB de carga / datos útiles se convierten en 1.4GiB, hay algo mal con la forma en que se almacenan los datos, y los desarrolladores deberían ofrecer una solución más agradable.


46



> Dentro de esto, mi aplicación de mapas almacena sus mapas en caché y la aplicación obtiene su mapa de Google Maps. - Desafortunadamente, en este caso, la compresión (que es efectivamente un sistema de archivos por encima de la base) requeriría soporte de esta aplicación de mapas. - Bob
@Bob, entonces la solución debe venir del lado D del desarrollador: - Braiam
Eso es totalmente cierto. Creo que por el momento, debería cambiar mi aplicación. - vfsoraki
@Braiam No está engañando al sistema de archivos para que piense que solo hay un archivo; ahí es solo un archivo En cuanto a por qué los desarrolladores no almacenan la información de la memoria caché en un archivo, es probable que se deba a que la mayoría de los formatos de archivo no están diseñados para escrituras aleatorias rápidas, lo que ciertamente necesita una memoria caché. Una mejor alternativa podría ser utilizar una biblioteca de base de datos liviana como SQLite. - bcrist
Absolutamente cierto ..... +1 - arundevma


En caso de que alguien se enfrente a este problema, podría ser útil saber también que otra razón para ver una gran diferencia en el tamaño / espacio del disco es el uso de flujos de datos alternativos (ADS)

Esto se aplica solo a NTFS que yo sepa. Los ADS son conocidos por usos legítimos y no legítimos:

  • para etiquetar un archivo como descargado de Internet
  • para almacenar metadatos (Microsoft quería incluir algunas de las características del sistema operativo Apple, como no usar la extensión de archivo para determinar el tipo de archivo)
  • para ocultar datos o códigos en el contexto de un malware.

ADS simplemente: cualquier archivo NTFS puede contener múltiples flujos de datos (entender "subarchivos"). Una es la secuencia principal, utilizada por Windows Explorer y otras herramientas de Windows, contiene el contenido habitual de un archivo. Las secuencias de datos alternativas pueden contener otra información, exactamente como la secuencia principal, pero no pueden ser manejadas directamente por las herramientas de Windows (en particular, Explorer muestra el tamaño del archivo igual al tamaño de la secuencia principal, independientemente del tamaño de la ADS). debe usar herramientas o códigos especializados para escribir, leer y ubicar ADS.

El punto principal es que, en caso de que se observe una gran diferencia de tamaño de archivo, no pase por alto la posibilidad de ADS y malware oculto.

Otro enlace.

Para experimentar de forma segura con ADS, prueba esto en el nivel DOS / CMD ...

Cree y luego visualice el contenido de un archivo en la raíz de C:

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

Resultado:

C:\> The main data stream

Ahora agregue un ADS con el mismo método, simplemente especifique el nombre ADS además del nombre del archivo:

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

Usted acaba de ocultar el mensaje secreto en el archivo. Tenga en cuenta que el tamaño del archivo en el Explorador no ha cambiado a pesar de que agregamos 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 puede mostrar el contenido de los ADS. Utilizaremos el Bloc de notas en su lugar:

notepad test.txt:secret

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

The secret message

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


25



Yo no soy un ganador, mi trabajo se realiza principalmente en Linux. Esto fue muy útil. Gracias - vfsoraki
Vale la pena usar una herramienta como Streams de Sysinternals para verificar el uso de ADS. Por ejemplo, los archivos descargados en un sistema Windows pueden etiquetarse con una fuente en ADS, aunque esto es muy pequeño y no debería ocupar espacio. No se mostrará en dir o salida de Explorer normalmente. Puede tomar bloques y agravar el problema de uso de disco que está investigando. . - adric


El problema puede deberse al tamaño del clúster.

De acuerdo a Microsoft:

Si no está utilizando compresión NTFS para ningún archivo o carpeta   contenido en el volumen, la diferencia entre TAMAÑO y TAMAÑO EN DISCO   Se desperdicia espacio debido a un tamaño de clúster mayor de lo necesario. Tú   debe intentar usar un tamaño de cluster óptimo para que el TAMAÑO EN DISCO   el valor es lo más cercano posible al valor TAMAÑO. Un exceso   discrepancia entre el TAMAÑO DEL DISCO y el valor del TAMAÑO es   indicación de que el tamaño de clúster predeterminado es demasiado grande para el promedio   tamaño de archivo que está almacenando en el volumen, y que debe ser   disminuido Esto solo se puede hacer haciendo una copia de seguridad del volumen y luego   reformateando el volumen usando el comando format y el modificador / a   para especificar el tamaño de asignación apropiado: IE: format D: /a:2048   (Este ejemplo usa un tamaño de clúster de 2 KB).

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


19



Dicho esto, no se debe hacer un tamaño de clúster inferior a 4096 bytes o simplemente no ser múltiplo de este número. El sistema operativo de 32 bits funciona con páginas que (en el caso que no es PAE) son de 4096 bytes, por lo que el uso de clústeres no múltiples puede afectar negativamente el rendimiento del sistema de archivos. Esta es la razón por la que el tamaño predeterminado se establece en 4096 bytes. - Ruslan
Para agregar a lo que @Ruslan dijo, los discos duros más nuevos ahora tienen un tamaño de sector de 4 kB, y sería óptimo alinear el sistema de archivos a los sectores físicos, y tener un múltiplo del tamaño del sector físico como el tamaño de la unidad de asignación. - Bob
@Ruslan Creo que quieres decir que debería ser un poder de dos veces 4096. 12288 (3 × 4096) y 20480 (5 × 4096) no son buenas opciones. - Scott


Veo que muchas personas recomiendan reformatear tu disco con un tamaño de clúster más pequeño. Como 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 del tamaño de clúster de NAND (mantener ambas sincronizadas es muy importante para un rendimiento óptimo de lectura / escritura y reducción del desgaste)

No puede cambiar el tamaño del clúster de NAND (es un atributo físico del hardware de su tarjeta SD).

Primero ejecute scandisk / chkdsk en su tarjeta SD para asegurarse de que el problema del informe de tamaño no se encuentre dentro de un sistema de archivos dañado.

En segundo lugar, le sugiero que informe el error a los desarrolladores de Google Map, ya que ellos son los únicos culpables aquí. Deberían estar usando un método de almacenamiento superior. Repararlo también debería hacer que la aplicación funcione más rápido en muchos dispositivos debido a una menor actividad de E / S y del sistema de archivos.


9



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


Este es un problema general con muchos sistemas de archivos. Aquí hay dos factores en juego, la cantidad máxima de "bloques" que un sistema de archivos puede manejar por volumen lógico y las restricciones físicas del medio de almacenamiento. Solo se puede asignar 1 archivo a un bloque dado (los archivos generalmente toman tantos bloques como necesiten). De modo que un archivo de texto con 64 bytes a menudo puede tomar cualquier cosa desde 4k hasta 32k, dependiendo del tamaño de bloque del sistema de archivos en el que reside.

Una forma de pensar sobre esto es pensar en cada bloque en el sistema de archivos como una caja, y el sistema de archivos como una habitación. Todos sus cuadros son del mismo tamaño e intenta incluir tantos como pueda en una habitación. Si les acomodas a todos con más espacio sobrante, tienes que conseguir cajas más grandes para que la habitación se llene completamente con cajas.

Una de las reglas para poner las cosas en cajas es que no puedes poner dos cosas no relacionadas en una caja. Deben ser parte del mismo documento. Entonces, si tuviera que escribir una página de texto, tendría su propia casilla. Si mi texto mecanografiado tuviera tantas páginas que no pudiera incluirlo todo en una sola casilla, simplemente buscaría otra casilla y continuaría colocando páginas allí, repitiendo hasta que archivara todas mis páginas. También habría anotado las casillas que había usado para ese documento y el orden de las cajas para leerlo en secuencia.

Dependiendo de cómo organice las cajas, es posible que solo tenga suficiente espacio en mi manifiesto para cierto número de cajas. Entonces, si tuviera un gran espacio para llenar, pero solo un pequeño número de cajas, tendría que usar cajas muy grandes para alcanzar la capacidad de la sala.

Entonces, en ese caso, mi documento de una página ocuparía una sola casilla, sin compartir nada más.

Las mismas situaciones se desarrollan entre varias soluciones de almacenamiento. FAT32 solo puede administrar lo que se considera una baja cantidad de "cajas" en los enormes discos duros de hoy, por lo que termina con "cajas" muy grandes para compensar esto.


7





Además de los tamaños de clúster, también puede tener una discrepancia debido a las siguientes condiciones:

  • Los archivos comprimidos o cifrados pueden agotar un espacio diferente del tamaño del archivo lógico.
  • Los archivos vinculados informarán norte multiplicado por el número de enlaces multiplicado por el tamaño del archivo para el tamaño del archivo lógico, pero el espacio físico utilizado suele ser menor.

6



En general, eso podría ser cierto. Pero en mi caso, la unidad de alta asignación fue el problema. - vfsoraki
Sí, solo estoy tratando de agregar a la respuesta dando más razones posibles para la discrepancia. - Archimedes Trajano


Deberías echar un vistazo a la entrada de Subasignación de Bloque en Wikipedia. Eso es exactamente lo que te está pasando. El uso de un sistema de archivos con soporte para Tail Packaging es una solución de nivel de sistema de archivos para este problema, además de cambiar el tamaño del clúster de asignación.

Todos tienen el inconveniente de necesitar reformatear el disco.

En algunos casos, simplemente almacenar esos archivos en un archivo solucionaría el problema (y los archivos pequeños también se comprimirían al dejar de perder espacio al final de los archivos). Esto tiene el inconveniente de pasar algún tiempo para la descompresión.

Otra opción si tiene tantos archivos pequeños debido a algún problema específico relacionado con la aplicación es almacenar los datos de su software utilizando otro método (puede estar en una base de datos). Pero, por supuesto, es una solución para programadores, no para usuarios finales.

http://en.wikipedia.org/wiki/Tail_packing


6





Anoté enormes discrepancias de tamaño de archivo en Windows 10 en un archivo individual, pero si miro las propiedades del MISMO archivo desde la misma ubicación (una unidad de red), con Windows XP, la gran discrepancia no está allí; solo una pequeña diferencia, que es lo que esperarías. Creo que hay un error en Windows 10. Un archivo que es de 449MB probablemente no ocupe 3.99GB, que es lo que Windows 10 me está diciendo.


0



Solo un FYI, la pregunta no tiene nada que ver con Windows 10. OP está usando Windows 7. - TheKB