La défragmentation
pour optimaliser le placement des fichiers
Defrag
Ce texte a été écrit à la suite d'une question "Pourquoi n'y a-t-il pas de programme de défragmentation sous Linux (Ubuntu)
-

-

F A T

Le système FAT (File allocation table) est apparu au début des années 1980. C'était le temps des premiers ordinateurs personnels, un seul programme actif à un moment donné, un seul utilisateur. Les fichiers sont écrit les uns après les autres (un pointeur indique la première place vacante). Les fichiers qui sont effacés laissent des trous dans cette structure, qui ne seront remplis que quand le pointeur arrive en fin de disque.

  1. La fragementation apparait parce que des fichiers sont agrandis (et il n'y a pas de place pour permettre au fichier de grandir).
  2. La fragmentation apparait également quand les trous laissés par les fichiers effacés sont remplis.
Le système FAT ne prévoit aucune optimalisation du placement des fichiers (bien que ce soit possible: il n'est pas interdit de placer un fichier en milieu de disque pour être sûr qu'il puisse grandir). Les premiers ordinateurs n'avaient pas la puissance de calcul suffisante pour utiliser des algorithmes d'optimalisation.

Le système FAT est parfait tant qu'il n'y a pas des mutations constantes des fichiers. En fait, le système FAT fonctionnait très bien jusqu'à windows 98.

N T F S

Quand Windows est arrivé avec son système de serveurs, le format FAT ne pouvait plus suivre. Il manquait certaines fonctionalités de bases (droits d'accès aux fichiers) qui ne pouvaient pas être ajoutées à cause de la structure rigide des répertoires.

Le système NTFS (New Technology File System) est fortement basé sur le système FAT. C'est pour cela que la conversion d'un volume FAT en NTFS est si rapide. Le répertoire ne contient que les informations de base (comme avec le système de fichiers FAT), les informations étendues sont reprises dans une base de données (MFT: Master File Table).

L'avantage d'une base de données est qu'on peut modifier aisément la structure des enregistrements pour ajouter de nouvelles fonctionalités. Il ne s'agit pas d'un tableau dont les dimensions sont fixes.

En ce qui concerne la prévention de la fragmentation, le système NTFS dispose de deux avantages:

  • La possibilité d'indiquer à l'avance la grandeur que le fichier aura
  • Le système dispose d'une liste des blocs non attribués et peut donc réserver une région contigue.
Le système NTFS vient donc à bout du second problème de fragmentation des fichiers FAT. Il y a malgré tout une fragmentation quand le fichier est aggrandi, puisque NTFS place chaque fichier l'un après l'autre sans laisser de trous.

Le premier problème du système FAT (qui n'est pas résolu par le système NTFS) prend des proportions catastrophiques avec les systèmes d'exploitation vista et windows 7 qui écrivent de nombreux fichiers. Fichiers qui ne servent strictement à rien et qui peuvent être effacés en montant le disque dans un autre ordinateur et en effaçant manuellement les fichiers.

Un autre exemple qui contribue à la fragmentation du système sont les downloads de type "torrent" où le fichier définitif (par exemple un film) est téléchargé en petits morceaux de différentes sources. Le disque contient alors de nombreux fichiers fortement fragmentés (puisque le téléchargement est simultané de plusieurs sources). Quand le fichier définitif est créé, les petits morceaux sont assemblés dans un seul fichier, laissant de très nombreux trous dans la structure. Il faut non seulement défragmenter le système, mais aussi récupérer toute la place laissée par les nombreux morceaux de fichiers.

Exemple d'un volume fragmenté

La fragmentation est bien visible dans le premier exemple: le régistre se compose de plusieurs milliers de morceaux (alors que le régistre est une des structures de base du système d'exploitation windows). Pas étonnant que windows soit aussi lent qu'un limaçon! NTFS n'est vraiment pas optimalisé pour les fichiers qui grandissent continuellement (et le régistre s'aggrandit de jour en jour, que tu le veuilles ou non).

Le second volume n'est utilisé que pour la sauvegarde. Il s'agit donc de fichiers qui ne sont écrits qu'une fois. Il s'agit de photos qui ne sont plus jamais modifiées par après. Après un shooting-photo, je place les photos sur le disque de sauvegarde et je n'y touche plus. Et pourtant il y a fragmentation! Pas des photos, puisqu'elles sont écrites en une fois, mais bien des répertoires. Le répertoire doit s'aggrandir au fil et à mesure que les photos sont ajoutées. Or il n'y a pas de place pour permettre au répertoire de grandir (tandis que le système savait à l'avance le nombre de photos à transvaser (elles se trouvent sur une carte de mémoire)). C'est un des problèmes inhérent au système de fichiers NTFS.

La base de données des fichiers est le MFT (Master File Table). Le système réserve à l'avance 12.5% de l'espace disponible du disque pour son stockage. Cela ne semble pas empècher le MFT de se fragmenter (troisième exemple). Le MFT ne peut pas être défragmenté, puisqu'il s'agit d'un fichier qui est toujours ouvert.

Il n'y a en pratique que très peu de différence entre FAT et NTFS, et j'ai vu passer des milliers d'ordinateurs! La fragmentation est endémique, même sur un volume qui dispose de 72% d'espace de libre! (quatrième exemple).

Le système de fichiers NTFS (tout comme son prédécesseur FAT) ont besoin d'une application de défragmentation.

Mais savez-vous qu'il est possible d'éviter la fragmentation dès le départ? Non, vous ne le savez pas, puisque vous travaillez sous windows!

E X T

Le format EXT a été conçu dès l'origine pour les applications multi-utilisateurs. Un système Linux est un serveur qui sert de nombreux clients. Le multi-tasking est une nécessité.

Un volume EXT se compose de stripes (ou bandes) qu'on pourrait comparer à de petites partitions dans le volume. Chaque fois qu'on écrit un fichier, on le place dans le stripe correspondant à l'application (ce qui permet d'avoir tous les fichiers "à portée de main"), mais on le place loin des autres fichiers. A première vue c'est une manière de faire assez débile, les fichiers étant disséminés un peu partout sur le disque.

Mais il n'y a pas de problème quand un fichier grandit: il y a suffisamment de place à coté! Tout comme le format NTFS, le format EXT tient une liste de blocs disponibles à jour: il faut être en mesure de trouver rapidement et efficacement de la place quand le disque commence à bien se remplir. Le système va chaque fois réserver suffisamment de place pour que le fichier puisse grandir: le premier fichier est placé au début du stripe, le second à la moitié du stripe, le troisième au quart, le quatrième fichier au 3/4, etc.

Le système de gestion de fichiers EXT est standardisé, mais diffère selon l'algoritme utilisé pour placer les fichiers. Chaque implémentation pratique dispose d'une fonction qui peut être différente pour le placement des fichiers.

La fragmentation est limitée jusqu'à un niveau de remplissage de 80%. Les fichiers sont parfois coupés en deux fragments car l'emplacement orgininal était trop petit, mais cela n'est en aucun cas comparable au millier de fragments qu'on retrouve sous NTFS. Notez que le système EXT se déglingue complètement passé un taux de remplissage de 80%

Il est possible d'avoir des statistiques sur l'état d'un volume: utilisez la commande fsck.

Le système de fichiers utilise 11419 inodes (0.04% du nombre d'inodes disponibles). Le tableau d'inodes est créé lors du formatage du volume et ne peut pas être modifié. Ce tableau correspond un peu au FAT.

La fragmentation est de 2% (ce qui est peu pour un disque qui sert de stockage temporaire de fichiers des clients).

Le nombre d'inodes avec accès indirect (ind), double indirect (dind) et triple indirect (tind) est également fourni (voir le fonctionnement du format EXT pour plus d'explications).

Le fait que la fragmentation est si limitée fait qu'il n'est pas besoin de défragmenter le volume. Quand la fragmentation apparait, c'est un signe que le volume est devenu trop petit.

Le système EXT est défragmenté automatiquement quand on fait une copie du volume vers un nouveau volume. FSArchiver fonctionne au noveau des fichiers et va copier chaque fichier l'un après l'autre, assurant par là la défragmentation et la réservation d'espace pour permettre aux fichiers de grandir.

Latency

Le fait que les fichiers soient placés si loin les uns des autres ne joue pas un role primordial. Souvent ce n'est pas le temps d'accès qui est important (le temps pour déplacer les têtes vers la bonne piste), mais le temps de latence (le temps qu'il faut attendre pour que les données passent sous les têtes).

Un disque dur classique a un temps d'accès (seek time) moyen de 8ms (la tête se déplace du tiers du nombre de pistes) et un temps de latence de 5.5ms. Le temps de latence est le temps nécessaire pour que le disque fasse une demi-rotation. Le temps d'un saut de piste à piste est de 1ms.

    Exemple:
  • NTFS: un répertoire et deux fichiers fragmentés en 20 morceaux placés les uns près des autres: 20 × 1ms (access time) + 20 × 5.5ms (rotational latency), total 130ms.
  • EXT-3: à nouveau un répertoire et 2 fichiers, chacun en deux morceaux: 3 × 8ms (temps d'accès moyen) + 3 × 1ms (lire le second morceau) + 6 × 5.5ms (latency), total 60ms
Il vaut donc mieux avoir moins de fragments, quitte à placer les fichiers loin les uns des autres.

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's