Grub permet d’avoir au démarrage le choix du système d’exploitation que l’on souhaite lancer. Il est automatiquement installé lorsque l’on installe linux en tout cas pour Linux Mint (basé sur Ubuntu).
Il peut être intéressant d’avoir grub sur une partition en dehors de linux pour par exemple modifier le fichier de démarrage grub.cfg depuis Windows ou pour pouvoir formater linux et avoir un Grub qui fonctionne toujours. Un exemple d’utilisation sera montré à la fin avec un script qui permet de redémarrer depuis Linux vers Windows et Inversement.
Nous supposons ici que votre ordinateur est équipé de EFI (norme datant de 2006). Pour éviter tout problème veuillez sauvegarder les fichiers que vous ne souhaitez pas perdre. Il se peut que vous n’arriviez plus à booter suite à ces opérations, il est vivement conseillé d’avoir accès à une live-usb linux-mint bootable qui permettra d’installer et lancer boot-repair qui marche plutôt bien pour réparrer GRUB. Une clef usb super grub2 disk peut aussi être pratique pour démarrer sur votre Linux même si le grub est cassé. Vous pouvez mettre les deux sur la même clef grace à Yumi (si la clef ne boot pas il faut peut être copier le dossier EFI d’une clef linux qui boot sur votre clef). Dans tous les cas si vous suivez ces instructions, c’est à vos risques et périls et je ne pourrait être tenu responsable.
Si vous avez déjà un Grub fonctionnel nous allons voir comment le déplacer sur une partition externe sinon une procédure complète d’installation sera aussi fournit.
Tout d’abord créer une partition en Fat32 avec Gparted sous linux.
Ajouter un label et nommer votre partition « GRUB » et mettre de coté son UUID ce disque est chez moi /dev/sdb3
Repérer quelle est votre partion EFI pour moi c’est /dev/sdb1
maintenant on va déplacer notre le grub installé de base dans /boot/grub dans /dev/sdb3
efi=/dev/sdb1
efiMount=/media/efi
partition=/dev/sdb3
partitionMount=/media/GRUB
#on crée nos dossier pour monter nos disques
sudo mkdir -p « $partitionMount » « $efiMount »
#on monte le disque
sudo mount « $partition » « $partitionMount »
#on déplace tout sur la nouvelle partition.
sudo mv /boot/grub/* « $partitionMount »
#on monte l’efi
sudo mount « $efi » « $efiMount »
Maintenant qu’on a déplacer nos fichiers grub il faut dire à l’EFI où ils sont.
Il faut maintenant repérer dans /media/efi où est grub.cfg (c’est pas le même que celui dans le dossier GRUB) ou était le dossier de votre Linux, pour moi c’est /media/efi/EFI/ubuntu/grub.cfg
Si vous n’avez pas sublime Text remplacer subl par nano.
sudo subl /media/efi/EFI/ubuntu/grub.cfg
Et là il faut remplacer le UUID par le UUID de votre partition ou vous avec déplacé Grub que je vous avez dit de mettre de coté si vous ne l’avez pas fait, on peut le retrouver avec blkid. Attention il faut prendre UUID et non le PART-UUID.
Il faut aussi changer la ligne de prefix comme ceci car on a mis tous les fichier à la base de la partition
set prefix=($root)’/’
enregistrer et redémarrer ça devrait être bon.
Si la procédure ci-dessus ne fonctionne pas ou si vous n’avez pas grub installé. voici la réinstallation complète. (si votre Grub n’est pas à jour ou votre EFI endommagé un grub -repair est nécessaire).
Bien sûr remplacer les variables, partiton,efi, disk. Disk étant comme partition mais sans le chiffre à la fin.
partition=/dev/sdb3
efi=/dev/sdb1
disk=/dev/sdb
efiMount=/media/efi
partitionMount=/media/GRUB
sudo fatlabel "$partition" GRUB
sudo umount "$partition"
sudo mkdosfs -F 32 "$partition"
sudo umount "$efi"
sudo rm -Rf "$partitionMount"
sudo mkdir -p "$partitionMount" "$efiMount"
sudo mount "$partition" "$partitionMount"
sudo mkdir -p "$partitionMount"/boot/grub
sudo mount "$efi" "$efiMount"
sudo grub-install --no-floppy --boot-directory="$partitionMount"/boot --efi-directory="$efiMount" "$disk"
sudo grub-mkconfig -o "$partitionMount"/boot/grub/grub.cfg
update-grub
A partir de ce moment vous avez un grub fonctionnel mais l’arborescence des fichier ne me plait pas et je prefère avoir les fichier de grub à la racine.
sudo mv « $partitionMount »/boot/grub/* « $partitionMount »/
Là encore il faut changer le prefix de notre grub dans le grub.cfg de EFI
sudo subl /media/efi/EFI/ubuntu/grub.cfg #remplacer subl par nano si vous n’avez pas sublime text
et changer la ligne 2 sur le prefix pour avoir
set prefix=($root)’/’
Maintenant nous allons faire un petit script pour redémarrer d’un OS vers un autre.
Créer un dossier dans la partition ou vous avez mis grub nommé Script.
dedans créer un script « shutdownTo.sh »
avec ce contenu:
OS="$1" # "Windows" Or "Linux" OR "CLOVER" ..."
shutOrReboot="$2" #"shutdown" Or "reboot"
grubFold=$(dirname "$0")/..
grubLoca="${grubFold}/grub.cfg"
#on fait un backup de grub.cfg à la fin de grubBackup, just in case
echo "#### new backup ####" | cat - "$grubLoca" >> "${grubFold}/grubBackup.cfg"
#checher le numéro du menu contenant le nom de $OS
newEntry=$(grep -i "menuentry ['\"]" "$grubLoca" | egrep -n "${OS}"|cut -f1 -d:| head -n1)
#la ligne 1 correspond à l'indice 0 de notre menu donc on enlève 1
#remplacer dans grub.cfg l'entrée par défaut par $newEntry -1
sed -i -E "s/default=\"[0-9]+?\"/default=\"$(($newEntry - 1))\"/" "$grubLoca"
#umount /dev/sdb3
if [ "$shutOrReboot" = "shutdown" ]
then
shutdown -f -p #windows
shutdown -f 0 #linux
fi
if [ "$shutOrReboot" = "reboot" ]
then
reboot -f -p -r
reboot -f -r 0
fi
voici comment il s’utilise
sudo sh /media/GRUB/Script/shutdownTo.sh Windows reboot # pour rebooter vers windows
sudo sh /media/GRUB/Script/shutdownTo.sh Linux reboot # pour rebooter vers linux
sudo sh /media/GRUB/Script/shutdownTo.sh Linux shutdown # pour éteindre et au prochain démarrage avoir linux
sudo sh /media/GRUB/Script/shutdownTo.sh Windows shutdown # pour éteindre et au prochain démarrage avoir Windows
sudo sh /media/GRUB/Script/shutdownTo.sh Windows # au prochain démarrage avoir Windows mais ne pas éteindre
On est obligé d’utiliser sh car sur un fat32 les fichier ne peut pas avoir des droits d’exécution comme sur un ext2/3/4
Bien sur vous n’aller pas taper ça à chaque fois sur le bureau créez-vous un lanceur « clic droit sur le bureau et créer un nouveau lanceur et mettre dans commande la ligne souhaitez. Il suffira alors de double cliquer sur le lanceur pour avoir l’opération choisi.
Pour Windows j’utilise personnellement gitBash qui s’installe avec GIT, mais d’autre solutions existes.
vous pouvez créer un fichier bat qui conteint ceci.
« \Program Files\Git\bin\bash.exe » –login « E:\boot\grub\Scripts\shutdownTo.sh » Linux
Si vous mettez ce fichier dans /media/…/Users/…/Application Data/Microsoft/Windows/Start Menu/Programs/Startup
Dès que vous démarrerez Windows vous setterez (oui je conjuque de l’anglais en français) le prochain OS à démarré à windows.
Vous pouvez aussi avoir des raccouris pour redémarrer sous linux depuis windows comme ceci
"\Program Files\Git\bin\bash.exe" --login "E:\boot\grub\Scripts\shutdownTo.sh" Linux reboot