Perché c'è una grande differenza tra Dimensione e Dimensione su disco?
Nella maggior parte dei casi, i valori di "Dimensioni" e "Dimensioni su disco" saranno molto vicini alla corrispondenza quando si controllano le dimensioni di una cartella o di un file, ma cosa accadrebbe se ci fosse un'enorme discrepanza tra i due? Il post di Q & A di SuperUser di oggi esamina la risposta a questo problema confuso.
La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte basato sulla comunità.
La domanda
Il lettore SuperUser thelastblack vuole sapere perché c'è una così grande differenza tra "Dimensione" e "Dimensione su disco" per una cartella sulla scheda SD del suo telefono:
Come puoi vedere qui sotto, c'è molta differenza tra i campi "Size" e "Size on disk" per questa cartella. Perché?
So che "Size on disk" dovrebbe essere un po 'più di "Size" a causa delle unità di allocazione in Windows, ma perché c'è così tanta differenza? Potrebbe essere a causa del gran numero di file?
A proposito, questa cartella è sulla scheda SD del mio telefono Android. Al suo interno, l'app delle mie mappe memorizza le mappe memorizzate nella cache e l'app ottiene le sue mappe da Google Maps.
Guardando lo screenshot, c'è sicuramente un'enorme discrepanza tra "Size" e "Size on disk", quindi cosa è successo qui per causare questo?
La risposta
Collaboratore SuperUser Bob ha la risposta per noi:
Partirò dal presupposto che stai usando il file system FAT / FAT32 qui, dato che hai detto che questa è una scheda SD. NTFS e exFAT si comportano allo stesso modo per quanto riguarda le unità di allocazione. Altri file system potrebbero essere diversi, ma non sono comunque supportati su Windows.
Se hai un sacco di piccoli file, questo è certamente possibile. Considera questo:
- 50.000 file
- Dimensione del cluster di 32 KB (unità di allocazione), che è il massimo per FAT32
Ok, ora il minimo lo spazio occupato è 50.000 * 32.000 = 1,6 GB (usando prefissi SI, non binari, per semplificare la matematica). Lo spazio su cui ogni file occupa il disco è sempre un multiplo delle dimensioni dell'unità di allocazione - e qui stiamo assumendo che ogni file sia effettivamente abbastanza piccolo da adattarsi all'interno di una singola unità, con qualche spazio (sprecato) rimasto.
Se ogni file ha una media di 2 KB, otterresti circa 100 MB totali, ma stai anche sprecando 15 volte quello (30 KB per file) in media a causa delle dimensioni dell'unità di allocazione.
Spiegazione approfondita
Perché succede? Bene, il file system FAT32 deve tenere traccia di dove è archiviato ogni file. Se dovesse tenere un elenco di ogni singolo byte, la tabella (come una rubrica) crescerebbe alla stessa velocità dei dati e sprecerebbe molto spazio. Quindi, quello che fanno è utilizzare "unità di allocazione", noto anche come "dimensione del cluster". Il volume è diviso in queste unità di allocazione e, per quanto riguarda il file system, non possono essere suddivisi: sono i blocchi più piccoli a cui è possibile indirizzare. Molto come hai un numero civico, ma al tuo postino non importa quante camere hai o chi vive in esse.
Quindi cosa succede se hai un file molto piccolo? Bene, al file system non interessa se il file è 0 KB, 2 KB o anche 15 KB, gli darà il minimo spazio possibile - nell'esempio sopra, questo è 32 KB. Il tuo file utilizza solo una piccola quantità di questo spazio, e il resto è fondamentalmente sprecato, ma appartiene ancora al file - proprio come una camera da letto che non hai occupato.
Perché ci sono diverse dimensioni delle unità di allocazione? Bene, diventa un compromesso tra avere un tavolo più grande (rubrica, ad esempio dicendo che John possiede una casa in 123 Fake Street, 124 Fake Street, 666 Satan Lane, ecc.), O più spazio sprecato in ogni unità (casa) . Se hai file più grandi, ha più senso usare unità di allocazione più grandi - perché un file non ottiene una nuova unità (casa) finché tutti gli altri non sono riempiti. Se hai un sacco di piccoli file, beh, avrai comunque un grande tavolo (rubrica), quindi potresti anche dare loro piccole unità (case).
Le grandi unità di allocazione, come regola generale, sprecheranno molto spazio se si hanno molti piccoli file. Di solito non c'è una buona ragione per andare oltre i 4 KB per uso generale.
La frammentazione?
Per quanto riguarda la frammentazione, la frammentazione non dovrebbe sprecare spazio in questo modo. File di grandi dimensioni possono essere frammentati, cioè suddivisi in più unità di allocazione, ma ogni unità deve essere riempita prima dell'avvio successivo. La deframmentazione potrebbe risparmiare un po 'di spazio nelle tabelle di allocazione, ma questo non è il tuo problema specifico.
Possibili soluzioni
Come suggerito da gladiator2345, le tue uniche opzioni reali a questo punto sono di conviverci o riformattare con unità di allocazione più piccole.
La tua scheda potrebbe essere formattata in FAT16, che ha un limite inferiore per le dimensioni della tabella e pertanto richiede unità di allocazione molto più grandi per indirizzare un volume più grande (con un limite superiore di 2 GB con unità di allocazione di 32 KB). Fonte per gentile concessione di Braiam. Se questo è il caso, dovresti essere in grado di formattare in tutta sicurezza come FAT32 comunque.
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.