Cosa determina una dimensione della directory?


10

So che la dimensione di una directory stessa è una cosa diversa dalle dimensioni dei file in essa contenuti.

Penso a una directory come a un elenco delle directory e dei file all'interno, quindi le dimensioni di una directory dovrebbero essere correlate al numero di file / directory all'interno, con un minimo di 4096 byte a causa del vincolo delle dimensioni del blocco.

Ma nel mio sistema, ho molte directory ben popolate con 4096 byte e alcune directory che sono considerevolmente meno popolate che sono circa 10 megabyte. Potete per favore spiegarmi perché questo accade?


1
Per ulteriori letture, questo è abbastanza informativo: askubuntu.com/a/404716/380067
kos

3
Non si tratta solo del numero di voci nella directory, ma anche della lunghezza dei loro nomi.
Kasperd,

Risposte:


13

Il file system utilizzato e il numero massimo di entità in quella directory in qualsiasi momento determinano la dimensione. Una volta esaurite le dimensioni predefinite riservate per la directory, viene allocato più spazio per la directory. Tuttavia, quando il numero di entità diminuisce, lo spazio allocato non viene liberato automaticamente. Quindi, se, a un certo punto, una directory avesse 10 milioni di entità, rimarrebbe della stessa dimensione se ne venissero cancellate 9.999.999. Questo porta a situazioni interessanti come in questo post Unix e Linux .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Questo non vale necessariamente per altri filesystem. I ext{2,3,4}filesystem sono interessati. NTFS è, in misura minore. tmpfse btrfs non lo sono. ZFS è piuttosto conservativo, ho ottenuto un output 2per il secondo statcomando.

Relazionato:


Grande! Mi chiedevo ancora come potesse essere.
kos,

XFS non è interessato! dovrebbe aggiungere
Edward Torvalds il
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.