Pourquoi ext2 et les successeurs n'ont-ils pas besoin de défragmentation?

Réponses:

9

Une façon dont le système de fichiers ext4 garde la fragmentation en échec est le processus d' allocation retardée (mode d'allocation par défaut d'ext4).

L'allocation différée fonctionne en différant le mappage des blocs de données de fichier nouvellement écrits aux blocs de disque dans le système de fichiers jusqu'au moment de la réécriture.

Cela fonctionne en allouant la plupart des blocs pour un fichier en même temps, lorsque le nombre total de blocs (ou au moins un stade approximatif) dans chaque fichier est connu. Cela permet à l'allocateur de blocs ( mballocmentionné dans la réponse de MMK) de faire un meilleur travail pour trouver une zone d'espace libre de taille appropriée pour placer le fichier.

Aaron
la source
Gardez à l'esprit que ce n'est en effet qu'une fonctionnalité du pilote ext4 . Maintenant, je ne sais pas si très techniquement parlant qui ne pouvait pas monter les anciens fs avec cette option (au moins partiellement ). Pour l'instant, DELALLOC est marqué comme ext4 uniquement .
mirh
8

Dans le système de fichiers ext3, il existe un allocateur de blocs pour le disque pour chaque bloc, et il est donc tout à fait possible qu'une fragmentation se produise.

Cependant, dans le système de fichiers ext4, il existe un allocateur multi-blocs qui peut retarder l'écriture des blocs sur le disque, afin qu'il puisse allouer plusieurs blocs à la fois dans un seul morceau de disque pour permettre une écriture contiguë - et ainsi, il est moins probable qu'une fragmentation puisse se produire (c'est toujours possible, juste moins probable)

mmk
la source
6

Au moins pour Ext2 (et Ext3 je pense, bien que je sois moins sûr), il n'y a rien dans le format / la structure sur le disque qui empêcherait la défragmentation.

Le manque de besoin de défragmentation va résider au niveau de l'implémentation, qui variera d'un OS à l'autre. Autrement dit, selon l'implémentation, un fichier dans Ext2 peut être fragmenté ou non.

Si la fragmentation est évitée, cela sera probablement dû à l'allocation retardée des blocs physiques. Autrement dit, à un certain niveau de l'implémentation, le système de fichiers mettra en cache les données (et y accèdera via le numéro de bloc logique) jusqu'à ce qu'elles soient écrites / validées sur le disque. Lorsque les données sont finalement écrites sur le disque, des blocs physiques doivent être alloués. L'algorithme d'allocation peut (ou non) allouer un certain nombre de blocs physiques contigus disponibles pour les données.

J'espère que cela t'aides.


la source
Il existe en fait un utilitaire e2defrag, et il peut être nécessaire (sur des disques plutôt pleins avec de nombreux fichiers écrits de manière aléatoire). L'allocateur retardé d'ext4 rend cela encore moins probable. Mais même ext2 avait une sorte d'allocation / écriture retardée, ce qui rendait moins nécessaire l'exécution d'un utilitaire de défragmentation que l'allocateur primitif de MS-DOS®.
mirabilos