Comme vous pouvez le voir ci-dessous, il y a tellement de différence entre les champs Taille et Taille sur le disque de mon dossier. Pourquoi donc?
Je sais que la taille sur le disque devrait être un peu plus que la taille en raison des unités d'allocation dans Windows, mais pourquoi tant de différence? Serait-ce à cause du grand nombre de fichiers?
BTW, ce dossier est sur la carte SD de mon téléphone Android. À l'intérieur de cela, mon application Cartes stocke les cartes en cache et l'application tire sa carte de Google Maps.
filesystems
vfsoraki
la source
la source
Réponses:
Je vais supposer que vous utilisez le système de fichiers FAT / FAT32 ici, puisque vous mentionnez qu'il s'agit d'une carte SD. NTFS et exFAT se comportent de manière similaire en ce qui concerne les unités d’allocation. Les autres systèmes de fichiers peuvent être différents, mais ils ne sont quand même pas supportés par Windows.
Si vous avez beaucoup de petits fichiers, c'est certainement possible. Considère ceci:
50 000 fichiers.
Taille de cluster de 32 Ko (unités d'allocation), ce qui correspond au maximum pour FAT32
Ok, l’ espace minimum pris est de 50 000 * 32 000 = 1,6 Go (en utilisant des préfixes SI, et non binaires, pour simplifier les calculs). L'espace occupé par chaque fichier sur le disque correspond toujours à un multiple de la taille de l'unité d'allocation. Dans ce cas, nous supposons que chaque fichier est suffisamment petit pour tenir dans une seule unité, avec de l'espace (gaspillé) laissé.
Si la taille moyenne de chaque fichier est de 2 ko, vous obtiendrez un total d'environ 100 Mo - mais vous perdez également 15 fois (30 ko par fichier) en moyenne en raison de la taille de l'unité d'allocation.
Explication approfondie
Pourquoi cela arrive-t-il? Eh bien, le système de fichiers FAT32 doit garder une trace de l'emplacement de stockage de chaque fichier. S'il devait conserver une liste de chaque octet, la table (comme un carnet d'adresses) grandirait à la même vitesse que les données - et perdrait beaucoup d'espace. Ils utilisent donc des "unités d'allocation", également appelées "taille de cluster". Le volume est divisé en ces unités d’allocation et, en ce qui concerne le système de fichiers, elles ne peuvent pas être subdivisées - ce sont les plus petits blocs qu’elle peut traiter. Un peu comme si vous aviez un numéro de maison, mais votre facteur se fiche du nombre de chambres à coucher ou de personnes qui y vivent.
Alors que se passe-t-il si vous avez un très petit fichier? Eh bien, le système de fichiers ne se soucie pas de savoir si le fichier est de 0 ko, 2 ko ou même de 15 ko, cela lui donnera le moins d’espace possible - dans l’exemple ci-dessus, cela correspond à 32 ko. Votre fichier utilise seulement une petite quantité de cet espace, et le reste est essentiellement gaspillé, mais appartient toujours au fichier - un peu comme une chambre que vous laissez inoccupée.
Pourquoi existe-t-il différentes tailles d'unités d'allocation? Cela devient un compromis entre avoir une table plus grande (carnet d'adresses, par exemple, en disant que John est propriétaire d'une maison située au 123, rue Fake, 124, rue Fake, 666, voie Satan, etc.) ou davantage d'espace inutilisé dans chaque maison. Si vous avez des fichiers plus volumineux, il est plus logique d'utiliser des unités d'allocation plus grandes, car un fichier ne reçoit pas une nouvelle unité (maison) tant que tous les autres ne sont pas remplis. Si vous avez beaucoup de petits fichiers, eh bien, vous allez quand même avoir une grande table (carnet d'adresses), alors vous pouvez aussi leur donner de petites unités (maisons).
En règle générale, les grandes unités d'allocation gaspillent beaucoup d'espace si vous avez beaucoup de petits fichiers. Il n’ya généralement pas de bonne raison de dépasser 4 ko pour un usage général.
Fragmentation?
En ce qui concerne la fragmentation, la fragmentation ne devrait pas gaspiller de l’espace de cette manière. Les gros fichiers peuvent être fragmentés, c'est-à-dire fractionnés, en plusieurs unités d'allocation, mais chaque unité doit être renseignée avant le démarrage de la suivante. La défragmentation peut économiser un peu d'espace dans les tables d'allocation, mais ce n'est pas votre problème spécifique.
Solutions possibles
Comme suggéré par gladiator2345 , vos seules options réelles à ce stade sont de vivre avec ou de reformater avec des unités d'allocation plus petites.
Votre carte peut être formatée en FAT16, qui impose une limite inférieure à la taille de la table et nécessite donc des unités d’allocation beaucoup plus grandes afin de traiter un volume plus important (avec une limite supérieure de 2 Go avec 32 unités d’allocation). Source gracieuseté de Braiam . Si c'est le cas, vous devriez quand même pouvoir formater en toute sécurité le format FAT32.
la source
C’est l’une des situations dans lesquelles la compression / l’archivage dans un fichier unique peut aider. Ce que Bob a dit dans sa réponse est vrai, mais la solution peut être plus simple que de reformater le disque, comme le suggèrent d’autres réponses. Si vous compressez ou archivez le répertoire (à l'aide de zip, de tar ou de toute autre méthode), le système de fichiers verra que vous avez un seul gros fichier au lieu de plusieurs plus petits. Même sans compression, vous récupérerez près de 1,4 Gio d'espace, car tous ces "petits fichiers" seront comptés comme un seul gros fichier.
Vous devriez peut-être discuter avec le développeur de l'utilisation d'une archive ou d'une base de données au lieu de plusieurs fichiers. Cela aidera probablement aussi à avoir le disque moins fragmenté et permettra sûrement de gagner de la place, en particulier s'il s'agit d'un lecteur flash NAND. Si vous expliquez la situation ridicule où 100 Mo de données utiles / utiles deviennent 1,4 Go, il y a un problème avec la façon dont les données sont stockées et les développeurs doivent apporter une solution plus agréable.
la source
Au cas où quelqu'un serait confronté à ce problème, il pourrait être utile de savoir qu'une autre raison de constater une grande différence de taille de fichier / d'espace disque est l'utilisation de flux de données alternatifs (ADS).
Cela s'applique uniquement à NTFS à ma connaissance. Les ADS sont connus pour leurs utilisations légitimes et non légitimes:
ADS simplement: n'importe quel fichier NTFS peut contenir plusieurs flux de données (comprendre les "sous-fichiers"). L'un est le flux principal, utilisé par l'explorateur Windows et d'autres outils Windows, il contient le contenu habituel d'un fichier. Les flux de données alternatifs peuvent contenir d'autres informations, exactement comme le flux principal, mais ils ne peuvent pas être gérés directement par les outils Windows (en particulier, l'explorateur affiche la taille du fichier égale à la taille du flux principal, quelle que soit la taille de l'ADS), vous devez utiliser des outils spécialisés ou du code pour écrire, lire et localiser ADS.
Le point principal est que, en cas de différence de taille de fichier importante observée, ne négligez pas la possibilité d’ADS et de programmes malveillants cachés.
Un autre lien .
Pour expérimenter en toute sécurité avec ADS, essayez ceci au niveau DOS / CMD ...
Créez puis affichez le contenu d'un fichier à la racine de C:
Résultat:
Maintenant, ajoutez un ADS avec la même méthode, spécifiez simplement le nom ADS en plus du nom de fichier:
Vous venez de cacher le message secret dans le fichier. Notez que la taille du fichier dans l'Explorateur n'a pas changé malgré que nous ayons ajouté des octets dans le "secret" de ADS.
Essayez d’afficher le contenu ADS:
Résultat:
CMD
type
ne peut pas afficher le contenu de l’ADS. Nous allons utiliser le Bloc-notes à la place:Dans le Bloc-notes, nous pouvons voir le contenu de l’ADS:
Vous pouvez également masquer un exécutable complet dans un ADS d'un fichier texte innocent et l'exécuter à tout moment. La richesse ne nuit pas aux pirates informatiques :-)
la source
Le problème peut être dû à la taille du cluster.
Selon Microsoft :
Essayez de formater votre disque avec une taille de cluster plus petite.
la source
Je vois beaucoup de gens qui recommandent de reformater votre disque avec une taille de cluster plus petite. Étant donné qu'il s'agit d'une carte SD, notez que de nombreux fournisseurs la pré-formatent à la taille de cluster recommandée pour qu'elle corresponde à la taille du cluster de la NAND (il est très important de synchroniser les deux pour obtenir des performances de lecture / écriture optimales et réduire l'usure).
Vous ne pouvez pas changer la taille du cluster de la NAND (c'est un attribut physique du matériel de votre carte SD).
Commencez par exécuter scandisk / chkdsk sur votre carte SD pour vous assurer que le problème de rapport de taille ne réside pas dans un système de fichiers corrompu.
Deuxièmement, je vous conseillerais de signaler le bogue aux développeurs de Google Map, car ce sont eux qui sont à blâmer ici. Ils devraient utiliser une méthode de stockage supérieure. En le corrigeant, l'application devrait également s'exécuter plus rapidement sur de nombreux appareils en raison de l'activité moins importante des E / S et des pilotes du système de fichiers.
la source
C'est un problème général avec de nombreux systèmes de fichiers. Il y a deux facteurs en jeu ici, le nombre maximal de "blocs" qu'un système de fichiers peut gérer par volume logique et les restrictions physiques du support de stockage. Un seul fichier peut être attribué à un bloc donné (les fichiers prennent généralement autant de blocs qu’ils en ont besoin). Ainsi, un fichier texte de 64 octets peut souvent prendre de 4 k à 32 k, en fonction de la taille de bloc du système de fichiers sur lequel il réside.
Une façon de penser à cela est de penser chaque bloc du système de fichiers en tant que boîte et le système de fichiers en tant que pièce. Toutes vos boîtes ont la même taille et vous essayez d’en installer autant que vous le pouvez dans une pièce. Si vous les intégrez tous avec plus de place, vous devez obtenir des boîtes plus grandes afin que la pièce soit remplie complètement de boîtes.
Une des règles pour mettre des choses dans des boîtes est que vous ne pouvez pas mettre deux choses non liées dans une boîte. Ils doivent faire partie du même document. Donc, si je devais taper une page de texte, elle aurait sa propre boîte. Si mon texte dactylographié comportait tant de pages que je ne pouvais pas tout mettre dans une case, je trouverais simplement une autre case et continuerais d'y mettre des pages, en répétant jusqu'à ce que toutes mes pages soient classées. J'aurais aussi noté les cases que j'avais utilisées pour ce document et l'ordre des cases pour le lire en séquence.
En fonction de la manière dont j'organise les boîtes, il se peut que mon manifeste ne laisse suffisamment d'espace que pour un certain nombre de boîtes. Donc, si j’avais une grande salle à remplir, mais seulement un petit nombre de boîtes, je devrais utiliser de très grandes boîtes pour atteindre la capacité de la salle.
Donc, dans ce cas, mon document d'une page occuperait toujours une seule boîte, et rien d'autre ne le partagerait.
Les mêmes situations se présentent parmi différentes solutions de stockage. La FAT32 ne peut gérer que ce qui est considéré comme un faible nombre de "boîtes" sur les énormes disques durs actuels. Elle se termine donc avec de très grandes "boîtes" pour compenser cela.
la source
Outre la taille des clusters, vous pouvez également avoir une différence due aux conditions suivantes:
la source
Vous devriez jeter un coup d'œil à l'entrée de la sous-allocation de blocs dans Wikipedia. C'est exactement ce qui vous arrive. L'utilisation d'un système de fichiers prenant en charge Tail Packaging est une solution au niveau du système de fichiers pour résoudre ce problème, en plus de modifier la taille du cluster d'allocation.
Tous ont le désagrément de devoir reformater le disque.
Dans certains cas, le simple stockage de ces fichiers dans une archive résoudrait le problème (et les petits fichiers seraient également compressés en plus de l’arrêt pour perdre de l’espace à la fin des fichiers). Cela a l'inconvénient de passer du temps à la décompression.
Une autre option si vous avez autant de petits fichiers en raison d'un problème spécifique lié à une application est de stocker vos données logicielles à l'aide d'une autre méthode (éventuellement dans une base de données). Mais bien sûr, c'est une solution pour les programmeurs, pas pour les utilisateurs finaux.
http://en.wikipedia.org/wiki/Tail_packing
la source
J'ai noté d'énormes différences dans la taille de fichier dans Windows 10 sur un fichier individuel, mais si je regarde les propriétés du fichier SAME à partir du même emplacement (un lecteur réseau), avec Windows XP, la grande différence n'existe pas; juste une petite différence, qui est ce que vous attendez. Je pense qu’il ya un bogue dans Windows 10. Un fichier de 449 Mo ne prend probablement pas 3,99 Go, ce que Windows 10 me dit.
la source