Perché la dimensione di una directory è sempre 4096 byte in unix?


26

Sono sicuro che un file di directory abbia molte meno informazioni di 4096 byte. So che la dimensione del settore è di 4096 byte. Ma esistono file normali di dimensioni inferiori.

Perché Unix riserva 4096 byte per ogni cartella?

Risposte:


30

È la dimensione iniziale necessaria per memorizzare i metadati sui file contenuti in quella directory (compresi i nomi). L'allocazione iniziale equivale alla dimensione di un settore, ma può aumentare oltre quella se necessario. Una volta allocato, lo spazio non viene liberato se i file vengono rimossi, per ridurre la frammentazione.

Per esempio:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

fonte


3
Grazie per la parte "lo spazio non viene liberato se i file vengono rimossi". Ho ripristinato un backup e non ero sicuro del perché due directory altrimenti identiche avessero dimensioni diverse.
Tomasz Zieliński,

11

A volte 4096 byte è la più piccola unità di allocazione per alcuni filesystem. Ecco perché la directory ha 4096.

Lo stesso vale per i file. Anche se alcuni file potrebbero riportare meno di 4096, in realtà stanno prendendo almeno 4096 di spazio di archiviazione dal disco.


4
Sì, come ha detto Pablo. La dimensione che stai osservando con il file è la dimensione del contenuto dei file, non i file sulla dimensione del disco. La dimensione su disco di quei piccoli file è in realtà 4096, proprio come la directory in quanto può allocare spazio su disco solo in blocchi di quelle dimensioni
Dan McGrath,

1
Questo non ha nulla a che fare con la domanda.
harrymc,

Questo non è corretto Vedi la risposta accettata
Duncan X Simpson,

Non corretto? Non è una combinazione di entrambe le risposte? 4096 è la dimensione della pagina, vedere i sistemi di paging della memoria per maggiori informazioni.
Harrichael,

5

4096 è riservato per ridurre la frammentazione, poiché spesso le dimensioni effettive dei metadati contenuti fluttuano in base al contenuto della directory. Se è in costante crescita e riduzione (diciamo che conteneva file di registro o contenuto dinamico) nel tempo, ciò potrebbe compromettere le prestazioni. Questo probabilmente non accadrà con una cartella, ma in tutto il file system si sommerebbe rapidamente.


3

Dipende dal filesystem. Su ext2 / 3/4 "è" 4096. Su reiserfs può essere 9608 (my $HOME) 1032 ( /tmp) o 48 (alcuni dir in /tmp).

Per impostazione predefinita, il blocco ext2 / 3/4 è 4096 - e il file non può richiedere meno di quello. Se il file è più piccolo, richiede comunque un intero blocco. Poiché è inutile chiedere informazioni sulla dimensione logica della directory e questa informazione non è probabilmente su disco in ogni caso e deve riportare qualcosa che riporta una dimensione di blocchi per il numero di blocchi occupati, cioè lo spazio fisico che è stato occupato.


Sono sicuro che anche la dimensione del file non è memorizzata con i file. Viene calcolato quando richiesto. Ma per i file, riporta le actualdimensioni del file.
Lazer,

1
La dimensione del file è memorizzata con l'inode. L'inode ext2 contiene sicuramente la dimensione in byte al suo interno. Altrimenti sarebbe impossibile trovare dove finisce il file come \0è il carattere legale nei file binari. PS. È possibile creare FS che non lo memorizzano, ma non solo in modo familiare (e probabilmente nessun altro popolare).
Maciej Piechotka,
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.