Combien d'espace les répertoires consomment-ils?

13

Combien d'espace les répertoires vides prennent-ils?

Dans les systèmes de fichiers Windows et NTFS, il est dit "0 octet", ce qui est impossible.

Combien est réellement absorbé par un annuaire? Cela dépend-il du système de fichiers ou du système d'exploitation?

ShadowHero
la source
1
Techniquement, ce que la fenêtre Propriétés vous montre, c'est le contenu du dossier qui, s'il est vide, occupe 0 octet sur n'importe quel disque. Votre question porte sur l'espace occupé par la structure de dossiers sur un système de fichiers. Cela dépend évidemment du système de fichiers. Sur FAT32, les seules choses que vous devez stocker sont des indicateurs (cachés, archivés) ainsi que le nom et le chemin. Dans NTFS, vous devez également stocker des autorisations et d'autres éléments. Dans l'ensemble, cet espace est presque négligeable.
Doktoro Reichard
Ainsi, sur le NTFS, combien d'espace prend un diractory vide? Par exemple, si je crée 1 milliard d'annuaires, combien d'espace cela représente-t-il?
ShadowHero
Comme je l'ai dit, cela dépend du nom et du chemin du dossier. En supposant que vous utilisez les 26 caractères, avec 1 milliard de noms uniques, vous pouvez avoir environ 7 noms de dossier de longueur de caractère. Ainsi, 7 octets * 1.000.000.000 équivalent à environ 7 Go d'espace. C'est un minimum, je suppose. Je pense avoir environ 1 million de dossiers dans tous mes disques, de sorte que la valeur n'est même pas atteinte en réalité. N'oubliez pas qu'il s'agit d'une estimation très approximative.
Doktoro Reichard
Cool, je vois ... comment les autorisations sont stockées?
ShadowHero
1
@AthomSfere Hmm ... cela signifierait que les dossiers ne peuvent pas stocker des autorisations utilisateur infinies, à moins que plusieurs enregistrements MFT puissent être attribués. Va essayer de le rechercher.
Doktoro Reichard

Réponses:

16

Techniquement, ce que la fenêtre Propriétés vous montre, c'est le contenu du dossier qui, s'il est vide, occupe 0 octet sur n'importe quel disque.

Votre question porte sur l'espace occupé par la structure de dossiers sur un système de fichiers, qui en dépend évidemment. Sur FAT32, les seules choses que vous devez stocker sont des indicateurs (cachés, archivés) ainsi que le nom et le chemin. Dans NTFS, vous devez également stocker des autorisations et d'autres éléments. Dans l'ensemble, cet espace est presque négligeable.

L'espace occupé par une structure de répertoire vide dépend du nom et du chemin du dossier. Par exemple, supposons que vous placez tous les dossiers sur un lecteur racine (par exemple C :) et utilisez les 26 caractères alphabétiques; avec 1 milliard de noms uniques, vous pouvez avoir log_26 (1.000.000.000) = environ 7 (6.3065) nom de dossier de longueur de caractère. Ainsi, 7 octets * 1.000.000.000 équivalent à environ 7 Go d'espace.

Il s'agit d'un minimum basé uniquement sur la quantité de noms d'espace à prendre sur n'importe quelle structure. Comme cela sera montré, les systèmes de fichiers stockent beaucoup plus d'informations que le nom de fichier sur sa structure de fichiers.

Je pense avoir environ 1 million de dossiers et fichiers dans tous mes lecteurs, de sorte que la valeur n'est même pas atteinte en réalité. N'oubliez pas qu'il s'agit d'une estimation très approximative.


Les systèmes de fichiers les plus utilisés à l'heure actuelle peuvent être considérés (sans doute) comme FAT (File Allocation Table) et NTFS (New Technology File System). FAT tel que nous le connaissons est utilisé depuis 1996, lorsque Windows 95 est sorti avec FAT32. Bien que remplacé par d'autres systèmes de fichiers plus résistants, tels que NFTS (Windows), HFS + (OSX) ou ext3 (Linux), il est toujours largement utilisé dans les appareils portables ou dans les cartes mémoire ou les lecteurs flash, car il est bien pris en charge par la plupart des systèmes d'exploitation. et surtout, c'est simple.

Maintenant, pour ce qui compte. Les fichiers et répertoires d'une partition FAT, même s'ils ne contiennent rien, ont un nom, un emplacement, certains attributs, etc., qui sont stockés dans une zone appelée table de répertoires .

La table des répertoires est un fichier spécial (c'est-à-dire qu'il est caché à une utilisation régulière, de sorte que seuls le système d'exploitation et certaines applications peuvent y accéder directement). Il représente un répertoire (ou dossier) et tout fichier ou dossier stocké dans celui-ci a une entrée de 32 octets dans le tableau. Comme table d'annuaire est un fichier, elle occupe alors un ou plusieurs clusters (c'est-à-dire des boîtes avec une taille prédéfinie dans un disque, où ne tient qu'un seul fichier (ou une partie d'un)).

Ainsi, tout dossier ou répertoire, sur un lecteur moderne (> 512 Mo), a au moins une surcharge de 4 Ko, afin de stocker la table (source) . Cependant, cela signifie que vous pouvez stocker 128 fichiers différents (4 * 1024 B / 32 B = 128) sur le même dossier et que la surcharge de stockage des enregistrements est toujours la même de 4 Ko comme auparavant.

En s'appuyant sur le premier exemple, cela signifierait que le milliard de dossiers aurait une surcharge de 32 Go, plutôt que les 7 Go approximativement estimés que j'ai calculés. Ces 32 Go stockent non seulement le nom abrégé (8 caractères ASCII), mais les attributs, les indicateurs, les dates d'accès, de création et de modification et d'autres attributs hérités.

En supposant que vous lisiez tout cela, vous pourriez avoir une question: "Eh bien, tout va bien, mais comment sont les noms longs, tels que Wabbajack ou même les noms de hachage tels que e4d909c290d0fb1ca068ffaddf22cbd0 , stockés?"

Microsoft dans Windows 95 a décidé d'ajouter cette fonctionnalité pour améliorer l'expérience utilisateur. Pour éviter de casser un système "presque standard", ils ont utilisé une solution de contournement soignée appelée VFAT (Virtual FAT). Essentiellement afin d'ajuster le nom de fichier long dans le fichier, des enregistrements supplémentaires ont été écrits avant l'enregistrement de fichier réel (avec certains attributs spéciaux qui ne sont pas visibles par les systèmes antérieurs). Le système de nom de fichier long autorise une longueur maximale de 255 caractères UTF-16 (Unicode) (source) (source) .

Si vous deviez changer le premier exemple de sorte que chaque dossier ait 9 caractères, la surcharge doublerait de 32 Go à 64 Go, car un enregistrement supplémentaire devrait être écrit pour stocker le nom long.


Selon l' article Wikipedia sur NTFS, toutes les autorisations sont stockées dans la table de fichiers maîtres. Son espace peut être vu apparemment à travers le défragmenteur de disque, comme indiqué ici .

La taille d'un enregistrement MFT à partir d'un dossier ou d'un fichier est décrite ici :

Les enregistrements de fichiers et de dossiers font chacun 1 Ko et sont stockés dans la MFT, dont les attributs sont écrits dans l'espace alloué dans la MFT. Outre les attributs de fichier, chaque enregistrement de fichier contient des informations sur la position de l'enregistrement de fichier dans le MFT.

Lorsque les attributs d'un fichier peuvent tenir dans l'enregistrement de fichier MFT pour ce fichier, ils sont appelés attributs résidents. Les attributs tels que le nom de fichier et l'horodatage sont toujours résidents. Lorsque la quantité d'informations pour un fichier ne tient pas dans son enregistrement de fichier MFT, certains attributs de fichier deviennent non résidents . Les attributs non résidents se voient allouer un ou plusieurs clusters d'espace disque . Une partie de l'attribut non résident reste dans la MFT et pointe vers les clusters externes. NTFS crée l'attribut Liste d'attributs pour décrire l'emplacement de tous les enregistrements d'attributs. Le tableau Types d'attributs de fichier NTFS répertorie les attributs de fichier actuellement définis par NTFS.

Ainsi, dans NTFS, les dossiers occupent au moins 1 Ko d'espace, à moins qu'ils aient des listes d'arguments et d'autorisations très longues; à ce stade, l'enregistrement MFT occupe un cluster supplémentaire dans la partition, dont la taille dépend de la façon dont il a été formaté, bien que pour plus de 2 Go, Microsoft dans ce post recommande des clusters de 4 Ko.

Doktoro Reichard
la source
1
J'ai trouvé des informations sur la longueur de 1024 octets que j'ai mentionnée plus tôt, c-ad.bnl.gov/kinyip/windows/MFT.html C'est une très bonne lecture et pourrait bénéficier de votre réponse si vous souhaitez développer.
Austin T French
Je voudrais développer (pour en faire une réponse plus complète, sans que cela soit trop technique ...) bien que je doive laisser cela pour demain. Merci pour cette source quand même.
Doktoro Reichard
Correction technique: il n'y a pas de limite de 255 trajets. Il y a plutôt la limite MAX_PATH de 260 caractères pour les chemins standard, puis le chemin de longueur étendue de 32 767 caractères (oui, plus de 32 000 caractères) pour les vrais chemins unicode (en utilisant l'indicateur `\\? ', Soit comme chemin de longueur étendue simple ou chemin UNC). Voir docs.microsoft.com/en-us/windows/win32/fileio/… pour plus de détails à ce sujet.
Mike 'Pomax' Kamermans
3

Pour un exemple du monde réel, je viens d'enregistrer mon espace libre, puis j'ai créé une grande structure de répertoires et soustrait le nouveau libre pour trouver combien d'espace a été utilisé. J'ai créé les répertoires 0-6 pour chaque jour de la semaine, puis dans les répertoires 0-23 pour les heures de la journée, puis 0-59 pour les minutes de l'heure. Au total, ses 10 080 répertoires. Mon utilisation du disque a changé de 6 926 336 octets. Cela équivaut à 687 octets par répertoire. Si vous vous en souciez, cela équivaut également à 0,0006% d'un lecteur de 1 To (si vous calculez 1 To en 1024 ^ 4).

Andy
la source
3
Pouvez-vous ajouter le système de fichiers à votre réponse? Les noms de répertoire étaient tous courts?
fixer1234
0

Sur Windows 10, j'ai créé 1 000 000 de dossiers vides et, selon la getsizefonction de python , il a pris 200540160 octets d'espace. Cela représente en moyenne 200,54016 octets par dossier.

Es Kay
la source