Qu'entendons-nous par formats spéciaux ? Un formatage non normalisé des disquettes. Pourquoi formater une disquette de façon inhabituelle ? Tout simplement parce que cela permet de mettre sur une disquette haute-densité (par exemple) de 3"1/2 plus de 1.44Mo (1.68Mo sans problème, voire 1.74Mo avec la plupart des modèles de lecteur de disquette).
Voici quelques explications sur le formatage bas niveau qui vous
permettront de comprendre comment générer ce type de disquette. Pour
de plus amples explications reportez-vous au manuel info des outils du
progiciel fdutils.
Les disques, dont les disquettes, se présentent sous forme de plateaux circulaires uniformes recouverts d'un substrat magnétique. Jusqu'ici, nous ne devons pas vous apprendre grand-chose. Et pourtant, il y a une conséquence importante qui peut être déduite de la description : puisqu'ils sont circulaires et uniformes, ils ne possèdent, à l'origine, aucun moyen de repérer différentes parties d'une couronne. Comment identifier le "début" d'une couronne ? Formater un tel support à un bas niveau consiste donc à inscrire des données sous forme électro-magnétique de telle manière que le contrôleur puisse identifier différentes sections. La surface n'est donc plus uniforme, mais comporte des en-têtes, des données, permettant d'identifier des zones appelées secteurs. Par exemple, un secteur de 512 octets sur une disquette est introduit par un en-tête de 62 octets, et la distance entre deux secteurs doit être au minimum de 45 octets pour que le contrôleur ne joue pas Charlot dans les Temps Modernes, c'est-à-dire soit soumis à des cadences qu'il n'arrive pas à suivre.
Dans le cas des disquettes, le format de 1.44 Mo des disquettes haute-densité de 3"1/2 a été défini en prenant de larges marges : il y a beaucoup plus de 45 octets entre deux secteurs, d'une part, et d'autre part il y a sur la surface du disque manière de distinguer jusqu'à 83 pistes, alors qu'on n'en utilise que 80. D'où la possibilité de jouer un peu sur les paramètres, en mettant soit plus de secteurs par piste, soit plus de pistes, soit les deux. Qui plus est, si l'on veut jouer sur la distance séparant deux secteurs, on peut aussi faire des secteurs "plus grands" pour diminuer l'espace total requis pour séparer les secteurs. Etc.
Le problème par contre est que, si le contrôleur est capable de répondre aux demandes de secteurs, le BIOS possède une table de formats connus qui ne comprend pas ces formats spéciaux, et si le programme qui tente d'accéder à ces secteurs ne prend pas les choses en main, soit il n'obtiendra pas le secteur demandé, soit il provoquera une erreur.
Le GRUB [aujourd'hui il faut récupérer les patches de l'auteur en consultant les archives de la liste du GRUB pour le mois d'octobre 2001] est capable de manipuler ces formats, enfin certains formats qui ne jouent, à taille de secteur constant [512 octets], que sur le nombre de secteurs par piste et/ou le nombre de pistes.
Par exemple, en utilisant le programme superformat disponible dans le progiciel fdutils, vous pouvez formater une disquette en 1.68Mo, ce qui correspond en CHS à 80 * 2 * 21 (21 secteurs à la place de 18) ainsi :
superformat /dev/fd0 sect=21 cyl=80
Vous obtenez alors une disquette formatée bas niveau en 1.68Mo (même principe pour du 1.74, c'est-à-dire avec 1.74Mo).
Pour y accéder depuis Linux par exemple il faut indiquer au système d'exploitation qu'il ne s'agit pas d'un format usuel. Il suffit de passer par les fichiers de périphérique correspondants, à savoir en l'occurrence /dev/fd0u1680 pour du 1.68, /dev/fd0u1743 pour du 1.74, etc.
À noter que certains formats permettent même d'atteindre 2Mo, mais ils jouent sur des tailles de secteur différentes sur différentes pistes, voire sur une même piste. Ces formats ne sont pas supportés par le GRUB, qui ne tolère que l'homogénéité !
Puisque les fonctions habituelles de l'interruption 13h du BIOS concernant le format du medium ne peuvent être utilisées en l'occurrence, il faut que le GRUB sache qu'il doit prendre la main. On le lui indique en utilisant la fonction geometry, qui permet d'inscrire la géométrie dans le Bios Parameter Block --- qui, comme son nom ne l'indique pas, n'est pas utilisé par le BIOS mais par DOS --- et de mettre en place un drapeau lui indiquant que la géométrie --est correcte et qu'il doit l'utiliser.
Mais, plutôt que de vous noyer sous les explications, autant vous
donner la référence de
mkbimage, MaKe a Bootable IMAGE, script servant à créer des
disques virtuels amorçables par le GRUB, disques qui peuvent faire
1.20, 1.44, 1.68, 1.74, 2.88 ou autre, et qu'il suffit alors de
recopier par `dd' sur le support dans le cas d'une disquette pour
avoir tout ce qu'il faut là où il faut.
mkbimage -h
vous permet de consulter l'aide. La procédure est simple. Vous créez un fichier tar comportant tous les fichiers que vous voulez utiliser, y compris ceux du GRUB, par exemple les fichiers du GRUB, un noyau, un ou plusieurs initrd etc., et le script crée un fichier vide, le partitionne dans le cas d'une émulation disque, mets en place un système de fichiers, recopie les fichiers, et met en place le GRUB avec les bons paramètres.
Gâtés, va !