Pourquoi chaque répertoire a-t-il une taille de 4096 octets (4 Ko)?

33

Comme le dit le sujet; Je veux savoir pourquoi chaque répertoire a une taille égale à 4K même s'il contient des fichiers de tailles supérieures à 4K.

Veuillez jeter un œil à ce qui suit: -

$ ls -lh
total 2.0M
drwxr-xr-x 4 ankit ankit 4.0K Sep 11 07:28 Desktop

$ ls -lrh Desktop/
-rw-rw-r-- 1 ankit ankit 9.1M Aug 4 11:15 sophosthreatsaurusaz.pdf
-rw------- 1 ankit ankit 107K Dec 27 2010 KP 3 0.pdf
drwxrwsr-x 9 ankit ankit 4.0K Sep 10 19:26 eclipse

PS: je connais l' du -shutilitaire de ligne de commande.

Edit: je suppose que le répertoire est un conteneur pour les fichiers.

Ankit
la source
Ce sont les métadonnées du répertoire
Tachyons

Réponses:

34
  • Sans devenir trop technique, considérez une entrée de répertoire comme un simple "lien" vers une liste des fichiers que le répertoire "contient".
  • Ensuite, comme pour tout, lsvous montre la taille de ce lien , pas l'espace total occupé par le contenu du répertoire.
  • La taille minimale qu'un fichier ou une entrée / lien de répertoire doit occuper est d'un bloc, qui est généralement de 4096 octets / 4K sur la plupart des systèmes de fichiers ext3 / 4.
ish
la source
7
Vous dites que "la taille minimale qu'un fichier ou une entrée / lien de répertoire doit occuper est d'un bloc" mais je suis sûr d'avoir vu des tailles de fichier inférieures à 4K.
Lakshay Garg
1
@LakshayGarg bien que le fichier puisse être inférieur à 4K, cela provoquera ce qu'on appelle la "fragmentation interne", où seulement quelques octets du bloc ont été utilisés pour stocker le petit fichier.
phyloflash
@phyloflash certains systèmes de fichiers (par exemple NTFS) stockent de petits fichiers dans les entrées de fichiers eux-mêmes (pour NTFS, c'est dans l'entrée MFT). De cette façon, leur contenu occupe zéro bloc d'allocation et la fragmentation interne est réduite.
Ruslan
26

Pour comprendre cela, vous feriez mieux d'avoir une connaissance de base des éléments suivants (système de fichiers):

  • inode (contient les attributs du fichier, les métadonnées du fichier, la structure du pointeur)
  • fichier (peut être considéré comme une table avec 2 colonnes, nom de fichier et son inode, l'inode pointe vers les blocs de données brutes sur le périphérique de bloc)
  • annuaire (juste un fichier spécial, conteneur pour d'autres noms de fichiers. Il contient un tableau de noms de fichiers et de numéros d'inode pour chaque nom de fichier. Il décrit également la relation entre le parent et les enfants.)
  • lien symbolique VS lien dur
  • dentry (entrées de répertoire)
  • ...

Sur un ext4système de fichiers typique (ce que la plupart des gens utilisent), la inodetaille par défaut est de 256 octets, la taille de bloc est de 4096 octets.

Un répertoire est juste un fichier spécial qui contient un tableau de noms de fichiers et de numéros d'inode. Lorsque le répertoire a été créé, le système de fichiers a alloué 1 inode au répertoire avec un "nom de fichier" (nom dir en fait). L'inode pointe vers un seul bloc de données (surcharge minimale), qui est de 4096 octets. C'est pourquoi vous voyez 4096 / 4.0K lors de l'utilisation ls.

Vous pouvez obtenir les détails en utilisant tune2fs& dumpe2fs.

Exemple

root@ubuntu:~# tune2fs -l /dev/ubuntu/root 
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2fca4cbb-22f1-4328-ab13-cacedb360930
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              967680
Block count:              3931136
Reserved block count:     0
Free blocks:              2537341
Free inodes:              517736
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      416
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8064
Inode blocks per group:   504
RAID stride:              35637
Flex block group size:    16
Filesystem created:       Thu Mar 15 14:31:04 2012
Last mount time:          Sat Oct 20 20:28:04 2012
Last write time:          Sat Oct 20 20:23:32 2012
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Oct 20 20:22:57 2012
Check interval:           0 (<none>)
Lifetime writes:          54 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       272350
Default directory hash:   half_md4
Directory Hash Seed:      d582ad79-75a0-4964-9a48-33ddba04df5c
Journal backup:           inode blocks
Terry Wang
la source
7

Si un fichier contient des données (même un seul octet), il occupera un bloc sur le disque (ce qui est généralement 4k de nos jours). Un bloc ne peut pas être partagé entre des fichiers. Cela signifie que l'espace de ce bloc entier ne sera pas disponible pour d'autres fichiers, il est donc considéré comme "utilisé".

La source

ThiagoPonte
la source