307 votes

Pourquoi y a-t-il une si grande différence entre "Taille" et "Taille sur le disque" ?

Comme vous pouvez le voir ci-dessous, il y a tellement de différence entre les TailleTaille sur le disque champs dans mon dossier. Comment cela se fait-il ?

Screenshot showing 50,875 files in 1,504 folders, 105 MB being 1.43 GB on disk

Je sais que Taille sur le disque devrait être un peu plus que Taille à cause des unités d'allocation dans Windows, mais pourquoi une telle 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'application Cartes y stocke ses cartes en cache et l'application obtient ses cartes de Google Maps.

0 votes

J'ai trouvé quelque chose : Question . Cela pourrait-il être mon problème aussi ?

11 votes

Bonjour thelastblack, et bienvenue à SuperUser. J'ai édité votre question pour enlever la partie concernant la défragmentation, puisque les deux réponses existantes se concentrent sur la divergence taille/taille sur le disque et que le format Stack Exchange fonctionne mieux lorsque chaque question postée concerne une seule chose. Vous pouvez certainement poser à nouveau cette question en tant que question distincte, bien que je pense que les réponses que vous avez reçues jusqu'à présent sur cette question montrent que la défragmentation ne vous aidera pas. (Elle n'est généralement pas utile non plus sur les supports solides). editar votre question plus loin si vous pensez que j'ai changé votre intention d'une quelconque manière.

1 votes

@MichaelKjörling Heh, je viens d'ajouter une petite discussion sur la fragmentation (j'ai été distrait un peu plus tôt).

309voto

Bob Points 58080

Je suppose que vous utilisez le système de fichiers FAT/FAT32, 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 pas pris en charge par Windows de toute façon.

Si vous avez beaucoup de petits fichiers, c'est certainement possible. Considérez ceci :

  • 50 000 fichiers.

  • Taille de cluster de 32 kB (unités d'allocation), ce qui est le maximum pour FAT32.

Ok, maintenant le minimum L'espace occupé par chaque fichier est de 50 000 * 32 000 = 1,6 Go (en utilisant les préfixes SI, et non binaires, pour simplifier les calculs). L'espace occupé par chaque fichier sur le disque est toujours un multiple de la taille de l'unité d'allocation - et ici nous supposons que chaque fichier est suffisamment petit pour tenir dans une seule unité, avec un peu d'espace (gaspillé) restant.

Si chaque fichier avait une taille moyenne de 2 ko, vous obtiendriez un total d'environ 100 Mo, mais vous gaspillez également 15 fois ce chiffre (30 ko par fichier) en moyenne, en raison de la taille de l'unité d'allocation.


Explication en profondeur

Pourquoi cela se produit-il ? Le système de fichiers FAT32 doit savoir où chaque fichier est stocké. S'il devait conserver une liste de chaque octet, la table (comme un carnet d'adresses) croîtrait à la même vitesse que les données - et gaspillerait beaucoup d'espace. Le système utilise donc des "unités d'allocation", également connues sous le nom de "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'il peut adresser. C'est un peu comme si vous aviez un numéro de maison, mais que votre facteur ne se souciait pas du nombre de chambres que vous avez ni de qui y habite.

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 fait 0 kB, 2 kB ou même 15 kB, il lui donnera le moins d'espace possible - dans l'exemple ci-dessus, c'est 32 kB. Votre fichier n'utilise qu'une petite partie 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 ? Eh bien, il s'agit d'un compromis entre avoir une table plus grande (carnet d'adresses, par exemple en disant que John possède une maison au 123 Fake Street, 124 Fake Street, 666 Satan Lane, etc.), ou plus d'espace perdu dans chaque unité (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 de nouvelle unité (maison) tant que toutes les autres ne sont pas remplies. Si vous avez beaucoup de petits fichiers, vous allez de toute façon avoir une grande table (carnet d'adresses), alors autant leur donner de petites unités (maisons).

Les grandes unités d'allocation, en règle générale, gaspillent beaucoup d'espace si vous avez beaucoup de petits fichiers. Il n'y a généralement pas de bonne raison d'aller au-delà de 4 ko pour un usage général.


Fragmentation ?

Quant à la fragmentation, elle ne devrait pas gaspiller de l'espace de cette manière. Les gros fichiers peuvent être fragmentés, c'est-à-dire divisés, en plusieurs unités d'allocation, mais chaque unité doit être remplie avant que la suivante ne soit lancée. La défragmentation peut faire gagner un peu d'espace dans les tables d'allocation, mais ce n'est pas votre problème spécifique.


Solutions possibles

Comme gladiator2345 a suggéré Pour le moment, vos seules options réelles sont de vivre avec ou de reformater avec des unités d'allocation plus petites.

Votre carte est peut-être formatée en FAT16, qui a une limite plus petite sur la taille de la table et nécessite donc des unités d'allocation beaucoup plus grandes afin d'adresser un plus grand volume (avec une limite supérieure de 2 Go avec des unités d'allocation de 32 kB). Source : de la part de Braiam . Si c'est le cas, vous devriez être en mesure de formater en FAT32 en toute sécurité.

45voto

Braiam Points 4649

C'est l'une des situations où la compression/archivage dans un seul fichier peut être utile. Qu'est-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 (en utilisant zip, tar, ou toute autre méthode), le système de fichiers verra que vous avez un seul gros fichier, au lieu de plusieurs petits. Même sans compression, vous récupérerez presque 1,4 Go d'espace, car tous ces "petits fichiers" seront comptabilisés comme un seul gros fichier.

À l'intérieur, mon application de cartes stocke ses cartes en cache et l'application obtient ses cartes de Google Maps.

Vous devriez peut-être discuter avec le développeur pour utiliser une archive ou une base de données au lieu de fichiers multiples. Cela aidera probablement aussi à avoir un disque moins fragmenté et économisera sûrement de l'espace, surtout s'il s'agit d'un lecteur flash NAND. Si vous expliquez la situation ridicule où 100MB de données utiles deviennent 1.4GiB, il y a quelque chose qui ne va pas dans la façon dont les données sont stockées, et les développeurs devraient apporter une solution plus agréable.

26voto

mins Points 1099

Comme nous l'avons déjà expliqué, la raison la plus courante de cette différence de taille est l'espace utilisé par rapport à l'espace alloué. Mais ce n'est pas la seule raison possible, NTFS possède une fonction permettant d'ajouter des données cachées aux fichiers. C'est cette possibilité qui a été exploitée par le ransomware dans le secteur de la santé fin 2019.

Fourchette de fichiers et flux de données alternatif

" Fourchette de ressources "est utilisé par Apple depuis 1984 (Macintosh) pour stocker le contenu principal d'un programme (instructions) et les ressources associées (comme les icônes et les menus) dans le même fichier. L'incorporation de ressources dans des fichiers exécutables est une technique courante, mais le faire avec des fourches ne l'est pas.

Apple a toujours conçu les systèmes de fichiers du Macintosh de manière à supporter la bifurcation des fichiers, et lorsque Microsoft a conçu le NTFS pour remplacer le FAT, la bifurcation a également été introduite sous le nom de " flux de données alternatif " (ADS).

Dans NTFS, un fichier contient :

  • Le flux de données non nommé obligatoire (UDS)
  • Un ou plusieurs flux de données alternatifs (ADS) facultatifs.

Caché à la vue de tous

La bifurcation de fichiers n'est pas mauvaise, sauf que les ADS NTFS ne sont pas pris en charge par les outils courants, y compris l'Explorateur Windows. de facto une fonction cachée, un cadeau inattendu pour les pirates. Sur le site Wikipedia :

Les flux alternatifs ne sont pas répertoriés dans l'Explorateur Windows, et leur taille n'est pas incluse dans la taille du fichier.

Alors que la taille du fichier, qui ne rapporte que la taille de l'UDS, n'est pas modifiée par l'existence de l'ADS, la taille allouée (clusters alloués au fichier par le système de fichiers) rapporte la taille réelle du fichier, tous flux confondus.

L'explorateur Windows ne rapporte pas ADS, ni la commande CMD dir . Cependant, les ADS sont visibles avec :

Notez qu'il est toujours possible de cacher ADS à certains de ces outils en utilisant des mots-clés réservés au système de fichiers (voir le document de Pierce dont le lien figure ci-dessous).

  • Windows utilise ADS pour marquer un fichier comme téléchargé depuis Internet et pour stocker d'autres métadonnées.

  • Les pirates utilisent les SDA pour cacher des données et du code pour des activités malveillantes.

Description complète de l'ADS qui mérite d'être lue :

Utilisation de l'ADS par les logiciels malveillants

Les outils anti logiciels malveillants sérieux recherchent les ADS, mais les logiciels malveillants les utilisent toujours, à grande échelle, car.. :

  • Certaines suites de sécurité ne sont même pas conscientes des SDA ou ne peuvent pas identifier les utilisations malveillantes des SDA.
  • Il est facile de rediriger l'exécution d'un fichier légitime vers un ADS (par exemple, à l'aide d'un raccourci).

BitPaymer

Le site ransomware BitPaymer entre dans l'ordinateur comme un fichier normal et visible, mais lorsqu'il est exécuté se copie dans un fichier légitime comme un ADS puis supprimer le fichier initial. Comme cela ne modifie pas la taille du fichier légitime, et que les ADS ne sont pas répertoriés par les outils courants, le logiciel malveillant est maintenant pratiquement caché.

Opération Cobalt Kitty

Aussi se cache en utilisant ADS .

Ce que je veux dire, c'est que Dans le cas d'une grande différence de taille de fichier observée (plus d'une taille de la grappe : 4KB), ne négligez pas la possibilité d'ADS, et de malware caché.

Expérimentez vous-même le SDA

Pour expérimenter ADS en toute sécurité, essayez ceci au niveau DOS/CMD...

Créer puis afficher le contenu d'un fichier à la racine de C :

C:\> echo The main data stream> test.txt
C:\> type test.txt

Résultat :

C:\> The main data stream

Maintenant, ajoutez un ADS avec la même méthode, en spécifiant simplement le nom de l'ADS en plus du nom du fichier :

C:\> echo The secret message> test.txt:secret

Vous venez de cacher le message secret dans le fichier. Notez que la taille du fichier dans l'explorateur n'a pas changé malgré l'ajout d'octets dans l'ADS "secret".

Essayez d'afficher le contenu ADS :

C:\> type test.txt:secret

Résultat :

The filename, directory name, or volume label syntax is incorrect.

CMD type n'est pas en mesure d'afficher le contenu de l'ADS. Nous utiliserons Notepad à la place :

notepad test.txt:secret

Dans Notepad, nous pouvons voir le contenu de l'ADS :

The secret message

Vous pouvez également cacher un exécutable complet dans un ADS d'un innocent fichier texte, et l'exécuter à tout moment. La richesse ne nuit pas aux hackers :-)

21voto

arundevma Points 1512

Le problème peut être dû à la taille de la grappe.

Según Microsoft :

Si vous n'utilisez pas la compression NTFS pour des fichiers ou des dossiers ou dossiers contenus sur le volume, la différence entre SIZE et SIZE ON DISK est de l'espace gaspillé en raison d'une taille de cluster supérieure à celle nécessaire. Vous devez essayer d'utiliser une taille de cluster optimale afin que le SIZE ON DISK soit aussi proche que possible de la valeur SIZE. Un écart excessif excessif entre la valeur SIZE ON DISK et la valeur SIZE est une indique que la taille de cluster par défaut est trop grande pour la taille moyenne des taille moyenne des fichiers que vous stockez sur le volume, et qu'elle devrait être diminuer. Cela ne peut se faire qu'en sauvegardant le volume, puis en le reformatant à l'aide de la fonction de formatage. en reformatant le volume à l'aide de la commande format et du commutateur /a pour spécifier la taille d'allocation appropriée : IE : format D: /a:2048 (Cet exemple utilise une taille de cluster de 2 Ko).

Essayez de formater votre disque avec une taille de cluster plus petite.

9voto

goodeye Points 917

Je vois beaucoup de personnes recommander de reformater votre disque avec une taille de cluster plus petite. Puisqu'il s'agit d'une carte SD, notez que de nombreux fournisseurs préformatent la carte à la taille de cluster recommandée pour correspondre à la taille de cluster de la NAND (garder les deux en synchronisation est très important pour des performances optimales de lecture/écriture et pour réduire l'usure)

Vous ne pouvez pas modifier la taille du cluster NAND (il s'agit d'un attribut physique du matériel de votre carte SD).

Exécutez d'abord 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 suggère 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. La résolution de ce problème devrait également permettre à l'application de fonctionner plus rapidement sur de nombreux appareils en raison de la réduction des E/S et de l'activité du pilote du système de fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X