#1 Le 06/06/2023, à 15:09
- mdxlp
[Résolu] Script de chaînage des grubs (grub2)
Bonjour,
Je suis actuellement en stage pour valider ma première année de BTS SIO et j'ai une mission particulière à effectuer pour un professeur de l'établissement.
L'objectif final du projet étant une interface multiboot présentant un grub et plusieurs partitions bootable en Legacy/UEFI. On peut capturer ou déployer des partitions sur un emplacement dédié grâce à un serveur FOG.
Je suis rendu à un point-clé du projet consistant à chaîner les grubs contenus sur les OS de mes partitions dans un autre grub indépendant qui permet de les gérer.
Mes faibles compétences sur ce qui touche à la distribution Linux ainsi que les informations aléatoires trouvées à ce sujet ne me permettent pas de réussir le chaînage.
Voici où j'en suis dans le chaînage :
Fichier /etc/grub.d/40_custom
menuentry 'Gpr1 Debian 11' {
insmod chain
insmod ext2
set root=(hd0,2)
chainloader (hd0,2)/boot/efi/EFI/debian/grubx64.efi
boot
}
menuentry 'Gpr2 Linux Mint 21.1'{
insmod chain
insmod ext2
set root=(hd0,3)
chainloader (hd0,3)/boot/efi/EFI/mint/grubx64.efi
boot
}
menuentry 'Gpr3 Ubuntu 22.04' {
insmod chain
insmod ext2
set root=(hd0,4)
chainloader (hd0,4)/boot/efi/EFI/ubuntu/grubx64.efi
boot
}
menuentry 'Gpr4 Kali Rolling' {
insmod chain
insmod ext2
set root=(hd0,5)
chainloader (hd0,5)/boot/efi/EFI/kali/grubx64.efi
boot
}
Les erreurs qui s'affichent dans le grub quand je veux exécuter ces lignes sont :
erreur : fichier "/boot/efi/EFI/xxxxx/grubx64.efi" non disponible.
erreur : le noyau doit d'abord être chargé.
Cette fois-ci je pensais vraiment avoir un script à peu près correct avec toutes les recherches effectuées mais ce n'est pas le cas et je me sens désemparé.
J'espère avoir été assez clair dans l'énonciation de mon propos. Si vous avez besoin d'autres informations pour m'aider à avancer, n'hésitez pas à me solliciter.
Dernière modification par mdxlp (Le 08/06/2023, à 08:28)
Hors ligne
#2 Le 06/06/2023, à 15:39
- Nasman
Re : [Résolu] Script de chaînage des grubs (grub2)
Une chose à vérifier : l'appellation des partitions des disques durs qui sont sur un disque avec une table des partitions gpt (en général associés à un système efi). Il me semble que ce n'est hdx,y mais un truc comme gptx,y (à vérifier)
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#3 Le 06/06/2023, à 16:20
- jplemoine
Re : [Résolu] Script de chaînage des grubs (grub2)
Je viens de regarder sur mon poste suite au poste de @Nasman
Il semblerait que la syntaxe à utiliser soit :
set root='hd0,gpt2'
(pour partition /dev/sda2)
Donc pour 'Gpr1 Debian 11'
set root=(hd0,2)
chainloader (hd0,2)/boot/efi/EFI/debian/grubx64.efi
je testerais
set root=(hd0,gpt2)
chainloader (hd0,gpt2)/boot/efi/EFI/debian/grubx64.efi
Sans aucune certitude.
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#4 Le 06/06/2023, à 16:22
- jplemoine
Re : [Résolu] Script de chaînage des grubs (grub2)
Si ça continue à mettre une erreur, il faudrait modifier les lignes pour avoir des ' et/ou des parenthèses.
Ca fait 4 possibilités.
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#5 Le 06/06/2023, à 16:58
- nany
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour,
erreur : fichier "/boot/efi/EFI/xxxxx/grubx64.efi" non disponible.
/boot/efi n’est qu’un point de montage, or il me semble que le montage (de la partition ESP) n’est pas encore effectif à ce moment.
Je pense qu’il vaudrait mieux taper dans la partition ESP directement :
chainloader ([PARTITION ESP])/EFI/xxxxx/grubx64.efi
Hors ligne
#6 Le 07/06/2023, à 08:11
- mdxlp
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour,
Tout d'abord, merci à tous pour vos réponses. J'ai essayé différentes combinaisons en modifiant mon script de chaînage et je fais maintenant face à une nouvelle erreur. Il est impossible pour moi de savoir si j'avance ou si je recule. Voici le contenu de mon fichier /etc/grub.d/40_custom :
menuentry 'Gpr1 Debian 11' {
insmod chain
insmod ext2
set root=(hd0,gpt2)
chainloader (/dev/nvme0n1p2)/EFI/debian/grubx64.efi
boot
}
menuentry 'Gpr2 Linux Mint 21.1 Vera'{
insmod chain
insmod ext2
set root=(hd0,gpt3)
chainloader (/dev/nvme0n1p3)/EFI/mint/grubx64.efi
boot
}
menuentry 'Gpr3 Ubuntu 22.04 LTS' {
insmod chain
insmod ext2
set root=(hd0,gpt4)
chainloader (/dev/nvme0n1p4)/EFI/ubuntu/grubx64.efi
boot
}
menuentry 'Gpr4 Kali Rolling' {
insmod chain
insmod ext2
set root=(hd0,gpt5)
chainloader (/dev/nvme0n1p5)/EFI/kali/grubx64.efi
boot
}
Et la nouvelle erreur associée à ce script :
erreur : aucun serveur n'est indiqué.
erreur : le noyau doit d'abord être chargé.
Pour ceux d'entre vous qui se poseraient la question, mes partitions sont bien nommées nvme0n1px et non sdx comme à l'accoutumée. Je pense que cela est lié à l'écrasage du disque avec Gparted ou au partitionnement automatique du logiciel Partclone qui se charge de restituer ou cloner les partitions lors de leur capture ou déploiement avec FOG.
root@partition6:~# sudo fdisk -l
Disque /dev/nvme0n1 : 953,87 GiB, 1024209543168 octets, 2000409264 secteurs
Modèle de disque : SAMSUNG MZVL21T0HCLR-00BL7
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : E7053F86-E909-4259-B0F5-85E54267CF86
Périphérique Début Fin Secteurs Taille Type
/dev/nvme0n1p1 2048 1050623 1048576 512M Système EFI
/dev/nvme0n1p2 1050624 400523263 399472640 190,5G Système de fichiers Linux
/dev/nvme0n1p3 799995904 1199468543 399472640 190,5G Système de fichiers Linux
/dev/nvme0n1p4 400523264 799995903 399472640 190,5G Système de fichiers Linux
/dev/nvme0n1p5 1199468544 1598941183 399472640 190,5G Système de fichiers Linux
/dev/nvme0n1p6 1598941184 1615325183 16384000 7,8G Système de fichiers Linux
Les entrées de la table de partitions ne sont pas dans l'ordre du disque.
Hors ligne
#7 Le 07/06/2023, à 08:46
- jplemoine
Re : [Résolu] Script de chaînage des grubs (grub2)
Pour l'erreur, il faut prendre en compte la remarque de nany.
Pour le nom des disques (/dev/mve..) au lieu de /dev/sdx, cela vient du type de disque et/ou de la connectique. Je ne sais pas si tu y peut quelque chose mais il suffit d'adapter.
/dev/sda --> /dev/nvme0n1
/dev/sda1 --> /dev/nvme0n1p1
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#8 Le 07/06/2023, à 11:02
- nany
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour,
Il semble établi que l’ESP soit (hd0,gpt1) donc, en rapport à mon message précédent, ce qui serait à tester est :
menuentry 'Gpr1 Debian 11' {
insmod chain
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/debian/grubx64.efi
boot
}
menuentry 'Gpr2 Linux Mint 21.1 Vera'{
insmod chain
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/mint/grubx64.efi
boot
}
menuentry 'Gpr3 Ubuntu 22.04 LTS' {
insmod chain
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/ubuntu/grubx64.efi
boot
}
menuentry 'Gpr4 Kali Rolling' {
insmod chain
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/kali/grubx64.efi
boot
}
Hors ligne
#9 Le 07/06/2023, à 14:38
- geole
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour.
Je pense que tu devras ajouter
insmod part_gpt
afin d'accéder aux partitions GPT
Je n'ai pas tout compris de ton projet.
Si l'ordinateur a déjà mis en route avec un grub EFI, tu peux directement te brancher sur le grub non efi directement dans les partititions. /Boot/grub
Si l'ordinateur a déja mis en route en LEGACY , ce que je soupçonne, il faut ajouter une option noefi afin que les O.S. installés en EFI ne s'en servent pas vu que le bios EFI n'est pas initialisé.
Dernière modification par geole (Le 07/06/2023, à 14:39)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#10 Le 08/06/2023, à 08:26
- mdxlp
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour,
Merci à tous pour votre aide et vos conseils. Le problème est résolu grâce à la solution de nany et je peux maintenant booter le grub de l'OS désiré avec ce script de chaînage qui fonctionne dans mon cas :
menuentry 'Gpr1 Debian 11' {
insmod chain
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/debian/grubx64.efi
boot
}
menuentry 'Gpr2 Linux Mint 21.1 Vera'{
insmod chain
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/mint/grubx64.efi
boot
}
menuentry 'Gpr3 Ubuntu 22.04 LTS' {
insmod chain
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/ubuntu/grubx64.efi
boot
}
menuentry 'Gpr4 Kali Rolling' {
insmod chain
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
chainloader (hd0,gpt1)/EFI/kali/grubx64.efi
boot
}
J'espère que la résolution de mon problème pourra en aider d'autres malgré le fait que j'étais sur un cas assez particulier.
Hors ligne
#11 Le 08/06/2023, à 08:43
- geole
Re : [Résolu] Script de chaînage des grubs (grub2)
Bonjour.
Merci de ton retour. Comme j'avais noté que c'était un exercice....
Mais dans la réalité, on ne se complique pas la vie.
Soit on installe refind
sudo apt install refind
Soit on demande à grub de générer
sudo update-grub
Soit on utilise le bios EFI pour faire le choix.
Dernière modification par geole (Le 08/06/2023, à 08:44)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#12 Le 08/06/2023, à 09:01
- jplemoine
Re : [Résolu] Script de chaînage des grubs (grub2)
Une solution est peut être de mettre un OS sur une machine physique (un peu costaude) et les autres OS en VM (1VM / OS).
En plus en kvm au lieu de virtualbox, tu peux faire des VM arm sur une machine physique en amd64...
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne