10 votes

Quel algorithme d'allocation de blocs NTFS utilise-t-il ?

Sous Windows XP 64, j'ai téléchargé un fichier de 1,2 Go et il s'est retrouvé fragmenté, comme le montre l'image. Malheureusement, avant de prendre l'instantané de Piriform Defraggler, j'ai défragmenté les autres fichiers, donc vous ne pouvez pas voir l'état exact au moment où le fichier a été écrit. Cependant, le disque était tout le temps à peu près aussi vide que maintenant (25% utilisé) et à peine fragmenté.

screenshot 1

Quel algorithme d'allocation de blocs NTFS utilise-t-il ? On dirait qu'il est aléatoire ou qu'il est placé là où se trouve la tête du disque.

UPDATE :

C'est ce qui s'est passé aujourd'hui après avoir écrit 67 MiB d'un nouveau fichier. Il a été divisé en 731 fragments, d'une taille moyenne de seulement 95 KiB. Le fichier a été utilisé pour combler certains vides, mais pas tous, il n'utilise pas non plus l'énorme espace libre continu. C'est étrange, n'est-ce pas ?

screenshot 2

UPDATE 2 :

Contrairement à Gourou du PC Je ne pense vraiment pas qu'Opera soit le coupable. Je pense qu'il (contrairement à Google Chrome) ne dit pas à Windows la taille attendue, cependant, il y a beaucoup de cas où ce n'est pas possible et c'est la responsabilité du système d'exploitation de le gérer de manière saine. L'image suivante montre ce qui s'est passé après quelques jours où je n'ai pratiquement rien fait sur cette partition - le répertoire TEMP et toutes mes données (sauf celles gérées par Windows) sont tous deux situés ailleurs. Windows lui-même semble ne pas utiliser SetEndOfFile et fragmente ses propres fichiers d'une manière terrible (600 fragments pour un couple de petits fichiers d'environ 40 Mo). NTFS ne semble pas utiliser le premier secteur disponible, car il y a de nouveau des fichiers au milieu et aussi vers la fin du disque assez vide (utilisation 23%), donc l'algorithme exact est encore inconnu.

screenshot 3

12voto

Nicholas1024 Points 4117

IIRC, le système de fichiers NTFS tente d'allouer le fichier dans un stockage contigu. Cependant, il ne peut le faire que si le système de fichiers connaît la taille du fichier. Si vous ouvrez un fichier et commencez à y écrire, il écrira dans le "meilleur" endroit pour y placer le fichier (typiquement vers l'extérieur du plateau). Mais ce "meilleur" endroit peut ne pas être assez grand pour contenir le fichier.

Si l'application indique à NTFS la taille réelle du fichier (avec l'option SetEndOfFile ()), NTFS peut faire un meilleur travail pour trouver de l'espace contigu pour le fichier (l'API SetEndOfFile fait en sorte que NTFS alloue de l'espace pour le fichier entier).

2voto

M Khan Points 1

Votre problème doit venir d'Opera. Je viens de regarder un tas de fichiers sur un disque dur très plein et fragmenté. Les gros fichiers téléchargés avec Chrome étaient tous contigus.

Cela suggère que Chrome connaissait la taille du fichier au début du téléchargement, et a donc indiqué à NTFS la taille du fichier à attendre. Si vous faites cela, NTFS va essayer de placer le fichier dans un seul fragment, ou si aucun fragment n'est assez grand, dans les plus grands fragments disponibles. Il est intéressant de noter qu'il utilise toujours ces fragments dans l'ordre décroissant de leur taille, de sorte que les gros fichiers copiés par l'Explorateur sur un disque fragmenté, peuvent sauter partout sur le disque.

Lorsque le programme ne connaît pas la taille du fichier, ou ne prend pas la peine de le dire à NTFS, mais se contente d'ouvrir un fichier et de commencer à écrire des données séquentielles, il semble que NTFS agisse de manière très similaire à FAT32, qui commence simplement au premier cluster disponible (ou le premier disponible après le dernier alloué dans cette session) puis utilise tout ce qui est disponible à partir de là. Par exemple, à peu près au même moment, j'ai demandé à CCleaner d'analyser le registre, ce qui l'a amené à le sauvegarder dans un grand fichier txt ".Reg". Ce fichier commençait près du début du disque et était ensuite éparpillé sur 127 fragments différents. Contrairement aux fichiers copiés avec Explorer ou téléchargés avec Chrome, dans tous les fichiers que j'ai examinés, les fragments étaient répartis dans l'ordre croissant.

Pour cette recherche, j'ai utilisé Winhex (version d'essai gratuite disponible sur Winhex.com). Lorsque vous regardez une entrée de répertoire, faites un clic droit sur un nom de fichier et choisissez Position, List Clusters, pour voir la liste des clusters utilisés par ce fichier.

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