Ma migration de Grub 1 vers Grub 2
-------------------------------------------------
[15/05/2025] - ~8mins - #linux #boot
-------------------------------------------------
Mon ordi c'est une sorte d'entité ancestrale qui a vu ses morceaux remplacés petits à petits pour évoluer.
Il n'a plus rien d'origine certe mais il est toujours là.
Bon vous avez la ref bien entendu mais c'est pas le but de cet article.
Le truc c'est que c'est vrai pour le hardware mais aussi pour le software.
J'ai testé quelques distros il y a fort longtemps avant de poser mes valises chez Gentoo.
C'est ma crèmerie favorite même si parfois ça permet d'exercer la patience et que ça donne un peu envie d'aller voir ailleurs.
Mais bon, un peu par flemme j'y suis j'y reste.
Le truc c'est que mon installation actuelle date de … 2007 maintenant.
Et contrairement à d'autre distros où c'est un peu galère (et sans parler des autres OS), ici le chemin de mise à jour est naturel et se fait au rythme que je choisis.
- Mais voilà, en gros mon install a bientôt 20 ans.*
- Et certains choix logiciels faits il y a fort longtemps mériteraient un peu de rafraîchissement.*
Justement, alors que je fous à jour mon kernel je me rends compte d'un ptit truc.
- Je ne peux plus monter ma partition /boot !*
Le support des systèmes de fichiers reiserfs a été dégagé.
Et franchement je ne sais pas pourquoi j'avais choisi ça mais bon me voilà fort dépourvu.
Il me fallait donc me refaire une partoche /boot .
Mais j'ai repoussé pour pouvoir faire ça plus sereinement.
Au fil des ans, j'ai viré les disques durs, je suis passé aux SSD en sata puis du raid, puis du ssd nvme.
Et ces derniers jours j'ai ajouté un second nvme pour avoir plus de place.
Et c'est là qu'en ouvrant le boitier j'ai vu ce pauvre ssd sata qui était encore là !
C'est le disque de boot !
J'ai un ssd qui ne me sert que pour booter.
C'est un peu riche.
Mais comme il faut que je le refasse bha il va dégager.
- Mon install antique de grub était un poil particulière.*
Je l'avais installé sur une distribution linux.
Il n'avait pas été installé sur gentoo et du coup je n'avais rien pour le mettre à jour ou autre.
- Et pour mettre un nouveau kernel ou initramfs je le faisais à la main en éditant le fichier de conf.*
Rien de bien méchant.
Mon install étant antique, j'étais toujours en bios en non en uefi (enfin en csm mais bref c'est un détail).
- Et je dois avouer que je ne m'étais jamais penché sur tous ces aspects depuis fort longtemps.*
J'ai donc dégainé le wiki gentoo et arch et le handbook de gentoo pour voir un peu comment tout ce merdier marche.
C'était un poil confu au début.
Boot en BIOS
Bon quand on est à l'ancienne on a notre bios à qui on demande de booter sur tel ou tel device.
Là, il va chercher dans les tous premiers secteurs ce qui pourrait être un bootloader et ensuite passe la main à ce logiciel.
Du coup quand on crée des partoches, elles sont pas exactement au début du disque parcequ'il faut y laisser un peu de place pour le bootloader.
Le truc c'est que l'emplacement prévu est un poil petit.
Dans le cas de grub, ce petit morceau ne permet que de charger le reste de grub qui est un peu plus gros avec des modules et tout.
Et dans cette partition on ajoute notamment le kernel l'initrd et la conf du bootloader.
Voilà.
J'avais une partition de 100Mo pour ça.
Boot en UEFI
Là c'est un poil différent mais pas tant que ça.
L'UEFI c'est donc un firmware de carte mère mais étant donné que c'est bien plus moderne ils ont été un poil malin et ont ajouté un peu plus d'intelligence dedans.
Le truc est notamment capable de lire des partitions en fat32 (ou vfat pour les intimes).
UEFI s'appuie sur un nouveau format de partition nommé GPT pour pouvoir trouver sa fameuse partoche (qui se nomme ESP).
Cette partition peut donc avoir un peu n'importe quelle taille et contenir donc pas mal de trucs et notamment des logiciels au "format efi" comme par exemple un bootloader, un gestionnaire de partition, doom, un kernel linux, memtest…
- Dans mon cas j'ai voulu installer grub2 même si c'est très probablement overkill dans mon cas.*
Installation de GRUB 2
- J'ai joué très safe et tenté au maximum de pas me planter.*
J'avais pas envie de me retrouver avec un ordi qui boot pas et encore moins envie de perdre des données.
- C'est d'ailleurs pour ça que j'ai attendu de mettre en service mon nouveau ssd pour m'y mettre histoire d'avoir toujours l'ancien grub1 de fonctionnel.*
- Quitte à changer le format du système de fichier, autant en profiter pour profiter de la modernité et donc de dire aurevoir au bios et bonjour à l'uefi.*
Bon bha c'est parti : emerge grub et voilà c'est fini.
Fin de l'article.
Ha merde cette blague ne marche toujours pas à l'écrit.
Bref, ça ne suffit bien évidemment pas.
Cette commande ne fait que d'installer les logiciels qui permettent vraiment d'installer grub.
J'ai surtout créé une partoche fat32 de 2Go (soyons fou !) et une partoche btrfs du reste sur le nouveau ssd.
Je donne des ptits labels pour les retrouver plus facilement.
Je monte la partoche dans /boot et me voilà fin prêt : grub-install --efi-directory=/boot --target=x86_64-efi mais impossible de le faire marcher.
Lors de cette commande il se plaind de ne pas avoir à accès aux variables EFI.
Et c'est vrai que mon kernel n'avait pas la bonne option.
Je rajoute donc File_systems/Pseudo_filesystems/EFI_Variable_filesystems, je recompile, le boot sur ce nouveau kernel.
Je relance la commande et non toujours pas.
- Il s'avère que si l'on boot en mode bios, le kernel n'a tout de même pas pour autant accès à ce qu'il veut.*
Il faut donc forcément booter en mode uefi ce qui ne simplifie pas vraiment mon affaire.
J'ai tenté de foutre la mobo en uefi et de tout de même booter sur mon bon vieux grub1 mais rien à faire (sans surprise).
Me voilà donc à la recherche d'une clé usb (de plus en plus dur).
Je boot sur le **sysresccd** en uefi.
Je redécouvre XFCE que je n'avais pas croisé depuis près de vingt ans aussi.
Ça n'a pas trop changé.
Et wow c'est bizarre d'avoir un "bureau" traditionnel sur mon ordi !
Ne perdons pas de temps en palabres : je mount ma gentoo, je chroot dessus, et je relance l'install de grub.
Plus d'erreur, je suis tout content, je dégage la clé usb je reboot.
- Et boum, mon uefi me propose de booter sur mon ssd \o/*
Bon, c'est très cool, je tombe sur grub.
Bon par contre je me suis un peu emballé.
J'ai juste un grub, pas de conf.
- Vous savez ce que ça fait un grub sans conf ?*
Rien.
Se démerder de la console de grub
Mais grub est gentil et propose une ptite interface en cli !
- Premier truc à savoir ls permet de lister les fichiers.
- Deuxième truc à savoir linux c'est la commande pour lui dire où trouver le kernel.
- Troisième truc à savoir initrd c'est pour lui dire où trouver l'initramfs.
- Ultime truc à savoir boot qui est plutôt explicite.
Juste avec ça j'ai réussi à trouver ce que je voulais pour booter et enfin arriver sur ma gentoo.
Ou presque.
Rafraîchir l'initramfs
Mon initramfs a quelques années maintenant et donc à l'époque il se chargeait de monter la partition / puis de boot.
Sauf qu'*avec l'ajout du ssd, la numérotation des deux nvme a tendance à passer de l'un à l'autre*.
Ha et je suis passé en ergol depuis donc c'est un poil chiant l'initram en bépo.
J'ai donc ressorti mon vieux blogpost sur la création d'initramfs [1] pour adapter un peu.
- D'ailleurs pour les noms de partoches on peut utiliser findfs dispo dans busybox (merci Lanodan !).*
La conf de Grub 2
- Quand il est arrivé, les distros sont toutes partis dans un délire de complexification à outrance.*
On utilise des outils pour générer des fichiers de conf qui font des centaines de lignes.
C'est bien gentil mais c'est pas du tout dans ma philosohie.
- J'aime les trucs simples que je peux comprendre en moins d'une demi-heure, qui ne font rien dans mon dos et que je peux manipuler facilement.*
Mais bon, ce n'est pas parceque les distros font ça que c'est indispensable.
Moi qui compile mon kernel manuellement de temps à autre, j'ai pas besoin d'automatiser la découverte d'os, le changement automatique du menu de boot et tout le merdier.
Mais pour me marrer j'ai fait un ptit coup de grub-mkconfig qui m'a pondu une conf de près de 200 lignes (et qui ne boot pas).
Bon j'ai regardé un peu comment ça marche.
- En gros il fouille la partoche /boot pour y trouver un kernel et un initram mais faut qu'ils aient des noms assez spécifiques.*
Je renomme mes deux fichiers et je relance le truc et ho magie c'est bon il est content il me crée de quoi booter.
Et le truc est même un peu plus malin que ça puisqu'il remplit aussi les options du kernel pour lui donner la bonne partoche via l'uuid (bravo) et aussi le bon subvolume btrfs !
Mais du coup, heuuu.
Je m'en contente ?
Heuu.
Je pourrai mais franchement je me connais : *je ne penserais pas à relancer la commande pour recréer une conf, alors que bon, j'ai l'habitude d'éditer le fichier de conf.*
Mais… bha je vais repartir de cette base :-)
<summary>/boot/grub/grub.cfg
<pre>
menuentry 'La gentoo :-)'{
search --no-floppy --fs-uuid --set=root YYYY-YYYY
linux /vmlinuz-614.efi root=PARTUUID=XXXXXXXXXXXXXXXXXXXXXx ro rootflags=subvol=gentoo
initrd /initrd11.img
}
menuentry "Extinction" { halt }
menuentry "Dans le doute Reboot" { reboot }
menuentry 'Zouu dans le BIOS !' { fwsetup }
</details>
Le coup du search est pas mal pour trouver le bon block device sans se faire chier.
Ça fonctionne comme findfs.
Theme
Hey j'ai même fait le kikoo.
J'ai installé ça [2].
Liens
------------------------------------
------------------------------------
[15/05/2025] - #linux #boot
------------------------------------