Quanto spazio consumano le directory?


13

Quanto spazio occupa directory vuote?

Nel file system Windows e NTFS si dice "0 byte" che è impossibile.

Quanto è realmente occupato da una directory? Dipende dal file system o dal sistema operativo?


1
Tecnicamente ciò che ti mostra la finestra delle proprietà è il contenuto della cartella, che se vuota occupa 0 byte su qualsiasi disco. La tua domanda riguarda lo spazio che la struttura delle cartelle occupa su un filesystem. Dipende ovviamente dal filesystem. Su FAT32 le uniche cose che devi memorizzare sono alcune bandiere (nascoste, archiviate) e il nome e il percorso. In NTFS è inoltre necessario archiviare le autorizzazioni e alcune altre cose. Tutto sommato, quello spazio è quasi trascurabile.
Doktoro Reichard,

Quindi, su NTFS, quanto spazio occupa uno spazio vuoto? ad es. se realizzo 1 miliardo di directory, quanto spazio è?
ShadowHero

Come ho detto, dipende dal nome e dal percorso della cartella. Supponendo che tu usi tutti i 26 caratteri, con 1 miliardo di nomi univoci puoi avere circa 7 nomi di cartelle di lunghezza caratteri. Quindi, 7 byte * 1.000.000.000 equivalgono a circa 7 GB di spazio. Questo è un minimo, suppongo. Penso di avere circa 1 milione di cartelle in tutte le mie unità in modo che il valore non sia nemmeno raggiunto nella realtà. Non dimenticare che questa è una stima molto approssimativa.
Doktoro Reichard,

Bene, vedo ... come vengono archiviate le autorizzazioni?
ShadowHero

1
@AthomSfere Hmm ... ciò significherebbe che le cartelle non possono memorizzare infinite autorizzazioni utente, a meno che non possano essere assegnati più record MFT. Proverò a cercarlo.
Doktoro Reichard,

Risposte:


16

Tecnicamente ciò che ti mostra la finestra delle proprietà è il contenuto della cartella, che se vuota occupa 0 byte su qualsiasi disco.

La tua domanda riguarda lo spazio che la struttura delle cartelle occupa su un filesystem, che ovviamente dipende da esso. Su FAT32 le uniche cose che devi memorizzare sono alcune bandiere (nascoste, archiviate) e il nome e il percorso. In NTFS è inoltre necessario archiviare le autorizzazioni e alcune altre cose. Tutto sommato, quello spazio è quasi trascurabile.

Lo spazio occupato da una struttura di directory vuota dipende dal nome e dal percorso della cartella. Ad esempio, supponiamo di posizionare tutte le cartelle su un'unità radice (dire C :) e utilizzare tutti i 26 caratteri alfabetici; con 1 miliardo di nomi univoci puoi avere log_26 (1.000.000.000) = circa 7 (6.3065) lunghezza della cartella. Quindi, 7 byte * 1.000.000.000 equivalgono a circa 7 GB di spazio.

Questo è un minimo basato solo sulla quantità di spazi che i nomi devono assumere su qualsiasi struttura. Come verrà mostrato, i filesystem memorizzano molte più informazioni oltre al nome file sulla sua 'struttura dei file.

Penso di avere circa 1 milione di cartelle e file in tutte le mie unità in modo che il valore non sia nemmeno raggiunto nella realtà. Non dimenticare che questa è una stima molto approssimativa.


I filesystem più utilizzati al momento possono essere considerati (probabilmente) come FAT (File Allocation Table) e NTFS (New Technology File System). FAT come lo conosciamo è in uso dal 1996, quando Windows 95 è stato rilasciato con FAT32. Sebbene sostituito da altri file system più resilienti, come NFTS (Windows), HFS + (OSX) o ext3 (Linux), è ancora ampiamente utilizzato nei dispositivi portatili o nelle schede di memoria o nelle unità flash, poiché è ben supportato dalla maggior parte dei sistemi operativi e soprattutto è semplice.

Ora per quello che conta. I file e le directory in una partizione FAT, anche se non contengono nulla, hanno un nome, una posizione, determinati attributi, eccetera, che sono memorizzati in una zona chiamata tabella delle directory .

La tabella delle directory è un file speciale (ovvero nascosto dall'uso regolare, in modo tale che solo il sistema operativo e determinate applicazioni possano accedervi direttamente). Rappresenta una directory (aka cartella) e qualsiasi file o cartella memorizzata al suo interno ha una voce di 32 byte nella tabella. Poiché la tabella delle directory è un file, occupa quindi uno o più cluster (ovvero caselle con una dimensione predefinita all'interno di un disco, dove si adatta solo un singolo file (o una parte di uno)).

Quindi, qualsiasi cartella o directory, su un disco moderno (> 512 MB), ha almeno un sovraccarico di 4 KB, in modo da memorizzare la tabella (sorgente) . Tuttavia, ciò significa che è possibile memorizzare 128 file diversi (4 * 1024 B / 32 B = 128) nella stessa cartella e l'overhead nella memorizzazione dei record è sempre lo stesso 4KB di prima.

Piggybacking sul primo esempio, ciò significherebbe che il miliardo di cartelle avrebbe un sovraccarico di 32 GB, anziché i 7 GB approssimativamente stimati che ho calcolato. Questi 32 GB memorizzano non solo il nome breve (8 caratteri ASCII), ma gli attributi, i flag, le date di accesso, creazione e modifica e altri attributi legacy.

Supponendo che tu legga tutto questo, potrebbe esserci una domanda che potresti avere: "Bene, va bene e va bene, ma come sono i nomi lunghi, come Wabbajack o anche i nomi hash come e4d909c290d0fb1ca068ffaddf22cbd0 , memorizzati?"

Microsoft in Windows 95 ha deciso di aggiungere quella funzionalità per migliorare l'esperienza utente. Per evitare di rompere un sistema "quasi standard", hanno usato una soluzione ordinata chiamata VFAT (Virtual FAT). Essenzialmente per adattare il nome del file lungo al file, sono stati scritti record aggiuntivi prima del record del file effettivo (con alcuni attributi speciali che non possono essere visti dai sistemi precedenti). Il sistema di nomi di file lunghi consente una lunghezza massima di 255 caratteri UTF-16 (Unicode) (sorgente) (sorgente) .

Se dovessi cambiare il primo esempio in modo tale che ogni cartella avesse 9 caratteri, il sovraccarico raddoppierebbe da 32 GB a 64 GB, poiché sarebbe necessario scrivere un altro record per memorizzare il nome lungo.


Secondo l' articolo di Wikipedia su NTFS, tutte le autorizzazioni sono archiviate nella tabella dei file master. Il suo spazio può essere visto apparentemente attraverso l'Utilità di deframmentazione dischi, come mostrato qui .

Le dimensioni che un record MFT occupa sia da una cartella che da un file, sono descritte qui :

I record di file e cartelle sono ciascuno da 1 KB e sono memorizzati nella MFT, i cui attributi sono scritti nello spazio allocato nella MFT. Oltre agli attributi di file, ogni record di file contiene informazioni sulla posizione del record di file nella MFT.

Quando gli attributi di un file possono rientrare nel record del file MFT per quel file, vengono chiamati attributi residenti. Gli attributi come il nome del file e il timestamp sono sempre residenti. Quando la quantità di informazioni per un file non rientra nel suo record di file MFT, alcuni attributi del file diventano non residenti . Agli attributi non residenti vengono assegnati uno o più cluster di spazio su disco . Una parte dell'attributo non residente rimane nella MFT e punta ai cluster esterni. NTFS crea l'attributo Elenco attributi per descrivere la posizione di tutti i record di attributi. La tabella Tipi di attributi di file NTFS elenca gli attributi di file attualmente definiti da NTFS.

Quindi, in NTFS, le cartelle occupano almeno 1 KB di spazio, a meno che non dispongano di elenchi di argomenti e autorizzazioni molto lunghi; a quel punto, il record MFT occupa un cluster aggiuntivo nella partizione, la cui dimensione dipende da come è stata formattata, anche se per più di 2 GB Microsoft in quel post raccomanda cluster 4KB.


1
Ho trovato alcune informazioni sulla lunghezza di 1024 byte che ho menzionato in precedenza, c-ad.bnl.gov/kinyip/windows/MFT.html È un'ottima lettura e potrebbe essere utile per la tua risposta se ti interessa espandere.
Austin T, francese,

Vorrei espandere (per rendere questa una risposta più completa, senza che questo sia troppo tecnico ...) anche se dovrei lasciarlo per domani. Grazie comunque per quella fonte.
Doktoro Reichard,

Correzione tecnica: non esiste un limite di 255 percorsi. Piuttosto, c'è il limite MAX_PATH di 260 caratteri per i percorsi standard, e poi c'è il percorso esteso di 32.767 caratteri (sì, oltre 32 mila caratteri) per i percorsi unicode veri (usando l'indicatore `\\?`, Sia come percorso semplice di lunghezza estesa o come percorso UNC). Vedere docs.microsoft.com/en-us/windows/win32/fileio/… per maggiori dettagli al riguardo.
Mike 'Pomax' Kamermans,

3

Per un esempio del mondo reale, ho appena registrato il mio spazio libero, quindi ho creato una grande struttura di directory e sottratto il nuovo spazio libero per trovare quanto spazio è stato utilizzato. Ho creato le directory 0-6 per ogni giorno della settimana, quindi all'interno delle directory 0-23 per le ore del giorno, quindi 0-59 per i minuti dell'ora. In totale le sue 10.080 directory. Il mio utilizzo del disco è cambiato di 6.926.336 byte. Che funziona a 687 byte per directory. In questo caso, anche questo funziona allo 0,0006% di un'unità da 1 TB (se si calcola 1 TB come 1024 ^ 4).


3
Puoi aggiungere il file system alla tua risposta? I nomi delle directory erano tutti brevi?
fixer1234

0

Su Windows 10 ho creato 1.000.000 di cartelle vuote e, secondo la getsizefunzione di Python , occupava 200540160 byte di spazio. Questa è una media di 200,54016 byte per cartella.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.