Winchester Defrag Sounds

English · Français

Billet — 30 septembre 2026

Simuler un disque dur au niveau bloc pour l’entendre défragmenter

Qui a lancé DEFRAG dans les années quatre-vingt-dix se souvient du son avant de se souvenir de l’écran : un crépitement sec qui durait vingt minutes, puis un long ronronnement, puis le silence. Winchester est une application pour iPhone et iPad qui refait ce son, et elle n’en a aucun enregistrement. Elle fabrique un volume qui a vécu, lance dessus un défragmenteur, simule le disque qui reçoit les requêtes de blocs, et écoute le bras.

La chaîne

Rien d’enregistré, du système de fichiers au haut-parleur.

Voici Windows 98 qui démarre sur un disque de 4 Go à 5 400 tr/min, tel que le modèle l’entend : la mise sous tension, le moteur qui prend sa vitesse, les têtes qui quittent la zone d’atterrissage, le noyau lu d’un seul tenant, puis les pilotes, éparpillés sur tout le plateau.

Démarrage de Windows 98 · 1999 · 20 s

Vers six secondes, le noyau est lu séquentiellement et sonne comme une note ; à partir de neuf, les pilotes sont un crépitement, un seek par fichier.

Cinq étages fabriquent ce son, et aucun ne joue d’échantillon :

  1. Un volume, issu d’une histoire Des années d’usage rejouées à travers l’allocateur du système de fichiers du disque : quels fichiers existent, et quels clusters exactement chacun occupe.
  2. Un planificateur Un démarrage, une installation, une journée d’usage ou une défragmentation décide quels fichiers lire ou écrire, dans quel ordre, et combien de temps l’ordinateur calcule entre deux requêtes.
  3. Des requêtes de blocs, une à une Une date, une adresse de bloc logique, un nombre de secteurs, lecture ou écriture — ce qu’un système d’exploitation envoie réellement à un disque.
  4. La mécanique du disque Le tampon et le bus, l’adresse de bloc traduite en cylindre, tête et secteur sur un plateau à zones, le seek, la latence de rotation, le transfert.
  5. Le son, la carte et les vibrations La chronologie des seeks, changements de tête, pas de piste et transferts pilote le synthétiseur, la carte des clusters et le Taptic Engine, sur une seule horloge.

L’application livre vingt-quatre disques de ce genre — quatre utilisateurs pour chacune de six époques, de 1993 à 2012 : un développeur, une famille, un joueur et une secrétaire, un utilisateur averti tenant la place de la famille en 1993 — et permet d’en fabriquer d’autres. La suite de cette page descend la chaîne depuis le haut.

La fragmentation

La fragmentation n’est pas un réglage. C’est un résidu.

La façon évidente de fabriquer un disque fragmenté, c’est de le demander : tant de fichiers, tant de morceaux chacun. Cela sonne faux, parce qu’une vraie fragmentation a une texture — les fichiers système d’un seul tenant au début, les objets du compilateur hachés dans les trous laissés par la compilation précédente, un fichier d’échange que personne ne déplace. Cette texture vient de ce qui est arrivé au disque, et dans quel ordre.

On ne demande donc jamais une fragmentation. Un disque s’écrit comme une histoire — une installation, des compilations, des téléchargements, des documents enregistrés encore et encore, des mises à jour — et l’histoire est rejouée, écriture par écriture et suppression par suppression, à travers l’allocateur du système de fichiers où elle vit. Elle est écrite avant toute allocation et ne connaît rien du format, ce qui permet une expérience propre : la même histoire de développeur, rejouée sur trois allocateurs, sur les mêmes 512 Mo.

Une histoire, trois allocateurs, 512 Mo
FAT16, 32 KoFAT32, 4 KoNTFS, 4 Ko
Fichiers fragmentés14,5 %3,1 %1,4 %
Pire fichier7 morceaux98 morceaux4 morceaux
Trous dans l’espace libre350278

Aucun de ces nombres n’est un paramètre. La FAT de MS-DOS sert le premier cluster libre à partir du début du volume, à chaque écriture : les trous se rebouchent aussitôt, le début du disque devient un gruyère dense et les fichiers récents sont hachés. FAT32 reprend au dernier cluster alloué : l’écriture est propre tant que le curseur avance, puis il revient au début et retrouve les trous laissés des mois plus tôt — la fragmentation arrive par vagues, et un fichier finit en 98 morceaux. NTFS cherche un trou qui convient.

Un détail compte plus que la distribution des tailles : les suppressions sont entrelacées avec les écritures. Une compilation qui créerait tous ses objets puis les supprimerait tous d’un coup rouvrirait un grand espace contigu et ne fragmenterait rien. En réalité le compilateur écrit pendant que l’éditeur de liens lit, l’en-tête précompilé est refait au milieu, et ce qui s’écrit à ce moment-là tombe dans les trous encore ouverts.

Les répertoires existent et grandissent comme des fichiers, loin de leur premier cluster. Les fichiers dont la taille n’est pas connue d’avance — la sortie d’un compilateur, le cache d’un navigateur, un document qu’on enregistre — grandissent à l’écriture au lieu d’obtenir leur place d’un coup. Sur NTFS, cette seule distinction fait la longue traîne des fichiers en deux à seize morceaux.

Les défragmenteurs

Ce qu’on entend, c’est l’algorithme.

Un défragmenteur est un planificateur comme un autre : il lit la carte du volume, décide quoi déplacer où, et émet des lectures et des écritures. Le disque ne demande pas pourquoi. Deux outils sur le même volume sonnent donc différemment pour la même raison qu’ils ne durent pas le même temps : ils ne demandent pas la même chose au disque.

Le volume ci-dessous est celui du développeur de 1993 : un disque FAT16 de 210 Mo à 3 600 tr/min, plein à 72 % après deux ans de compilations Borland C++, avec 342 de ses 4 027 fichiers en morceaux. À gauche, le défragmenteur de l’époque, MS-DOS 6 DEFRAG, auquel le modèle donne le même moteur qu’à celui de Windows 95 : ils faisaient la même chose, dans le même ordre. À droite, une stratégie écrite pour ce projet.

MS-DOS 6 DEFRAG, 24 min 42 s ramenées à une minute. Le son n’est pas accéléré : c’est une suite d’extraits de quatre secondes, pris là où en est l’image. Les libellés du film sont en anglais.
Tassage à la frontière, 5 min 31 s ramenées à une minute. Même volume, même résultat : plus aucun fichier en morceaux à la fin.

DEFRAG tasse tous les fichiers contre le début du volume, dans l’ordre de l’arborescence. Ce qui occupe la place du fichier suivant est évacué au fond du volume, pour être ramené quand le balayage y arrive. Sur ce disque, il déplace 3 997 fichiers, fait 3 090 évacuations et déplace 229 Mo — plus que le volume n’en contient — en 41 703 seeks. Vingt de ses vingt-cinq minutes passent dans les fichiers temporaires et les caches : des milliers de fragments d’un cluster. C’est le martèlement.

MS-DOS 6 DEFRAG · à 10 min de passe · 15 s

Un cluster, un seek : le son dont la plupart se souviennent.

Le tassage à la frontière part d’une règle : l’ordre du disque est l’ordre à garder. Une frontière balaie le volume depuis son début, et tout ce qui est sous elle est rangé. Un fichier d’un seul tenant qui commence à la frontière reste où il est. Un petit trou est comblé par un fichier qui devait bouger de toute façon ; sinon, le fichier qui suit le trou glisse, par tronçons de la taille du trou, chacun écrit dans la place que le précédent vient de quitter. Deux clusters libres suffisent à tasser un volume entier, et le trou grossit en montant. Les tables ne s’écrivent qu’une fois par lot, et aucune écriture d’un lot ne tombe sur un cluster que le lot vient de libérer : aucune écriture ne tombe donc sur une donnée encore utilisée, et une coupure de courant en pleine passe laisse un volume cohérent.

Tassage à la frontière · à 3 min 20 de passe · 15 s

7 288 seeks sur toute la passe, de 623 cylindres en moyenne contre 824 pour DEFRAG : le bras travaille près de la frontière au lieu de faire la navette jusqu’au fond du disque.

Il déplace 1 484 fichiers et 120 Mo, en 5 min 31 s. Sur les douze volumes FAT de la galerie, l’écart de durée est faible et fragile — 4 h 32 en tout contre 4 h 51, et la moindre correction du modèle peut les inverser —, mais il déplace 1,4 fois moins de données et, sur les volumes de 1999, ne laisse que deux trous au plus dans l’espace libre, là où Windows 95 en laisse jusqu’à 59. C’est aussi le seul des trois outils FAT à ranger un volume plein à 99 %, où DEFRAG ne trouve plus où évacuer et rend le volume tel quel.

Sur les gros volumes NTFS, l’écart n’est plus de degré. La stratégie de Windows 95 sur le disque familial de 320 Go de 2007 tasserait des centaines de gigaoctets par un tampon de 256 Ko : 4,8 millions de requêtes et 5 h 47 de passe simulée. Le défragmenteur de Windows XP, sur le même volume, en émet 1,2 million et prend 29 min 21 s.

L’application a sept outils en tout : les deux de l’époque (DEFRAG et le défragmenteur de XP, renommé pour Vista et 7), JkDefrag 3.36 et UltraDefrag 7.1.1 d’après leur code source, et trois écrits ici. Le README en donne une table par outil et par volume.

Windows XP

Entre les fichiers et le disque, un système d’exploitation.

Un démarrage n’est pas une liste de fichiers lus tour à tour. Pour tout ce qui est daté de Windows XP, le modèle reproduit ce que le système faisait entre le système de fichiers et le disque, jusqu’à ses constantes :

  • Le préchargeur relit le démarrage dans l’ordre de son premier usage, par gros lots émis d’un coup — les enregistrements de la MFT d’abord, puis les données, puis les exécutables.
  • Le pilote IDE sert ce qui attend par adresse de bloc croissante depuis sa position, si bien qu’un lot s’entend comme un seul balayage du bras.
  • Le lazy writer du cache se réveille chaque seconde, trois secondes après la première page salie, et écrit un huitième des pages sales, flux par flux, le journal d’abord.
  • L’allocateur NTFS prend le plus petit run libre qui suffit, dans un cache de runs libres rebâti au montage ; les clusters libérés restent masqués jusqu’au point de contrôle suivant.
  • Le défragmenteur range d’abord les fichiers du démarrage, recolle la MFT, répare les fichiers cassés dans le plus petit trou qui les tient, vide une région quand aucun ne convient, puis tasse, par blocs de 64 Ko, chacun une transaction.

Démarrage de Windows XP · 2003 · 7 200 tr/min, palier fluide · 15 s

Le chargement des pilotes. Chaque lot du préchargeur est trié par adresse de bloc et balayé sur le plateau dans un seul sens.

Windows 95 et 98, Vista et 7 n’ont pas ce traitement. Ils gardent un modèle bâti sur leur comportement documenté, et le README dit, point par point, où c’est une hypothèse.

Le disque

Déduit de fiches techniques réelles, et de l’année.

Une capacité ne suffit pas à décrire un disque : le même gigaoctet est un disque entier en 1996 et un coin de plateau, lu cinq fois plus vite, en 2003. Le modèle interpole donc dans le temps entre huit disques réellement vendus — d’un Conner CFA170A de 1993 à tampon de 64 Ko à un Seagate Barracuda 7200.14 de 2012 à 64 Mo —, en prenant dans leurs manuels le nombre de pistes par face, qui fixe la course du bras et donc l’acoustique d’un seek, et la capacité d’une face, qui fixe le nombre de plateaux.

  • Le seek suit la loi à deux régimes de Ruemmler et Wilkes (IEEE Computer, 1994) — une racine carrée de la distance pour les seeks courts, une droite au-delà —, découpée en accélération, croisière, freinage et stabilisation. Un seek avant une écriture se stabilise plus longtemps, comme les fiches techniques le publient.
  • La rotation et le transfert sont simulés secteur par secteur sur un plateau à zones, avec pas de piste et changements de tête en fin de cylindre.
  • Le tampon lit d’avance après une lecture ; le cache d’écriture acquitte une écriture tout de suite et la pose plus tard, dans l’ordre de l’ascenseur — le disque travaille pendant que l’ordinateur calcule.
  • La mise sous tension a trois temps : le moteur prend sa vitesse, les têtes se décollent du plateau, le disque cherche sa piste 0. Les disques de 2012 se garent sur une rampe, et ne se décollent ni n’atterrissent.
  • Les disques d’avant 1997 se recalibrent deux minutes après être prêts, puis toutes les quatre minutes : une seconde de crépitement, la signature de cette génération — et la raison pour laquelle on vendait, pour le montage vidéo, des modèles « AV » sans recalibration.

Le son

Des résonateurs qui ne changent pas de hauteur, excités par un bras qui bouge.

La première idée est d’associer à la distance du seek un échantillon qu’on transpose. Cela sonne comme un jouet. Un actionneur est une structure mécanique qui a ses propres modes ; un seek plus long ne les transpose pas, il les excite autrement. La tête est donc un banc de résonateurs à fréquences fixes — des modes vers 4,5 kHz (le balancement du bras) et 5,5 kHz, et cinq autres —, excités par un profil de courant tiré des quatre phases de chaque seek. Un seek court n’a pas de phase de croisière : la forme du son change avec la distance, pas seulement son niveau. Ce niveau suit le manuel : la puissance acoustique du seek publiée par le constructeur, moins celle du repos.

Puis la règle qui l’a fait sonner comme un disque plutôt que comme une machine à écrire. Deux seeks rapprochés ne déclenchent jamais deux sons séparés : ils sont fusionnés en une excitation continue, passée une seule fois dans les résonateurs. L’idée vient de l’émulation des lecteurs de disquettes de MAME, où redéclencher l’échantillon du pas sonnait « beaucoup trop fort ». Les changements de tête et les pas de piste à moins de 30 ms d’écart sont traités de même — c’est pourquoi une longue lecture séquentielle s’entend comme une note plutôt que comme une suite de clics, comme la lecture du noyau dans le premier son de cette page.

Le même démarrage · la tête seule

Le bras seul, sur les mêmes vingt secondes : la note du noyau, puis les pilotes.

Le même démarrage · la rotation seule

Les plateaux seuls : la montée en vitesse, puis la voix stable de 5 400 tr/min.

La rotation est un bruit filtré, façonné par trois chiffres de la fiche technique : la vitesse, le nombre de plateaux et le palier. Les roulements à billes, en usage jusque vers 2000, sifflent et battent une fois par tour ; les paliers fluides ne laissent que le souffle de l’air autour des plateaux.

Rotation · 1996 · 5 400 tr/min, roulement à billes

Rotation · 2003 · 7 200 tr/min, palier fluide

Plus aigu, et plus lisse : aucun battement au tour.

Le Taptic Engine reçoit les mêmes repères. Un seek isolé se joue en ses quatre phases ; un train dense devient un seul événement continu, parce qu’à 150 seeks par seconde une rafale de transitoires n’est plus que de la bouillie sous la main.

Le déterminisme

En direct sur le téléphone, au bit près sur le bureau.

Dans l’application, rien n’est calculé d’avance. Le planificateur tourne sur son propre fil et émet ses requêtes une à une ; chacune traverse aussitôt la simulation du disque jusqu’à un tampon, et le fil s’endort dès qu’il a environ huit secondes d’avance sur ce qu’on entend. Une passe n’a pas de durée connue avant de finir, il n’y a pas de retour en arrière, et un bloc de la carte change de couleur exactement quand son écriture s’entend.

Le même code se construit en outil de rendu en ligne de commande. Sa sortie est elle aussi en flux — une passe de plusieurs heures se rend sans garder plus de quelques secondes en mémoire — et elle garde l’ordre des additions du mixage en direct : le WAV est identique au bit près. Tout le projet repose sur cette propriété :

  • Une refonte qui ne doit rien changer se vérifie en hachant 58 rendus avant et après.
  • Un changement de planificateur se mesure sur quelques centaines de bilans de passe — requêtes, seeks, fichiers déplacés, morceaux et trous restants — en quelques minutes, sans rendre une note.
  • Chaque chiffre que le README tire d’un bilan est régénéré par un script, qui dit lequel ne tient plus.
  • Les vidéos de l’App Store sont filmées sur un simulateur, qui n’enregistre aucun son ; le son est rendu hors ligne pour les mêmes secondes de la même passe, et tombe à moins d’une image près.

Chaque son et chaque film de cette page sortent de cet outil. Aucun n’a été enregistré sur un appareil.

Les estimations

Ce qui est mesuré, et ce qui est réglé à l’oreille.

La géométrie, les temps de seek, les tampons, les vitesses de rotation et les paliers viennent des manuels des constructeurs. Le timbre, non : aucun manuel ne publie le spectre de son disque, si bien que les fréquences des bandes de la rotation, la profondeur du battement du palier et le dosage des modes de la tête selon la distance sont réglés à l’écoute. Le ronflement est le maillon le plus faible — calculé depuis la vitesse de rotation, faute d’enregistrement.

Certains comportements sont eux aussi des choix, et le code les signale comme tels : l’endroit où DEFRAG évacue — le fond du volume, un choix calé sur les durées de passe de l’époque ; l’ordre dans lequel un disque qui se recalibre visite ses pistes de référence ; et, pour NT 4, Vista et 7, quatre constantes qui bornent la recherche de trous de l’allocateur NTFS. Sur le disque familial de 2007, l’une d’elles fait à elle seule passer la part des fichiers fragmentés de 22 % à 35 %.

Si vous connaissez un disque ou un défragmenteur de cette époque mieux que son manuel, les tickets sont ouverts.

L’application
Winchester : défragmentation, gratuite, iPhone et iPad
Code source
github.com/glandais/winchester
Le mécanisme, étage par étage (en anglais)
How it works
Questions et corrections
github.com/glandais/winchester/issues