Il était une fois que nous avions GRUB hérité, le Grand chargeur de démarrage Linux unifié version 0.97. L’héritage GRUB avait de nombreuses vertus, mais il est devenu vieux et ses développeurs aspiraient à plus de fonctionnalités, et ainsi GRUB 2 est venu au monde.
GRUB 2 est une réécriture majeure avec plusieurs différences significatives. Il démarre un support amovible et peut être configuré avec une option pour entrer dans le BIOS de votre système. C’est plus compliqué à configurer avec toutes sortes de scripts à parcourir, et au lieu d’avoir un joli fichier /boot/grub/menu.lst
assez simple avec toutes les configurations au même endroit, la valeur par défaut est /boot/grub/grub.cfg
. Que vous n’éditez pas directement, oh non, car ce n’est pas à de simples humains de toucher, mais seulement à d’autres scripts. Nous, humbles humains, pouvons éditer /etc/default/grub
, qui contrôle principalement l’apparence du menu GRUB. Nous pouvons également éditer les scripts dans /etc/grub.d/
. Ce sont les scripts qui démarrent vos systèmes d’exploitation, contrôlent les applications externes telles que memtest
et os_prober
, et la thématique./boot/grub/grub.cfg
est construit à partir de /etc/default/grub
et /etc/grub.d/*
lorsque vous exécutez la commande update-grub
, que vous devez exécuter chaque fois que vous apportez des modifications.
La bonne nouvelle est que le script update-grub
est fiable pour trouver les noyaux, les fichiers de démarrage et ajouter tous les systèmes d’exploitation à votre menu de démarrage GRUB, vous n’avez donc pas à le faire manuellement.
Nous allons apprendre à corriger deux des échecs les plus courants. Lorsque vous démarrez votre système et qu’il s’arrête à l’invite grub>
, c’est le shell de commande GRUB 2 complet. Cela signifie que GRUB 2 a démarré normalement et a chargé le module normal.mod
(et d’autres modules situés dans /boot/grub//
), mais il n’a pas trouvé votre fichier grub.cfg
. Si vous voyez grub rescue>
cela signifie qu’il n’a pas pu trouver normal.mod
, il n’a donc probablement pas pu trouver l’un de vos fichiers de démarrage.
Comment cela se passe-t-il ? Le noyau a peut-être modifié les affectations de disques ou vous avez déplacé vos disques durs, modifié certaines partitions ou installé un nouveau système d’exploitation et déplacé des choses. Dans ces scénarios, vos fichiers de démarrage sont toujours là, mais GRUB ne les trouve pas. Vous pouvez donc rechercher vos fichiers de démarrage à l’invite GRUB, définir leur emplacement, puis démarrer votre système et corriger votre configuration GRUB.
Shell de commande GRUB 2
Le shell de commande GRUB 2 est tout aussi puissant que le shell de l’ancien GRUB. Vous pouvez l’utiliser pour découvrir des images de démarrage, des noyaux et des systèmes de fichiers racine. En fait, il vous donne un accès complet à tous les systèmes de fichiers sur la machine locale, quelles que soient les autorisations ou autres protections. Ce que certains pourraient considérer comme un trou de sécurité, mais vous connaissez le vieux dicton Unix: celui qui a un accès physique à la machine le possède.
Lorsque vous êtes à l’invite grub>
, vous disposez de nombreuses fonctionnalités similaires à n’importe quel shell de commande, telles que l’historique et la complétion des onglets. Le mode grub rescue>
est plus limité, sans historique et sans fin d’onglet.
Si vous pratiquez sur un système fonctionnel, appuyez sur C lorsque le menu de démarrage de GRUB apparaît pour ouvrir le shell de commande GRUB. Vous pouvez arrêter le compte à rebours de démarrage en faisant défiler les entrées de menu de haut en bas avec les touches fléchées. Il est prudent d’expérimenter sur la ligne de commande GRUB car rien de ce que vous faites n’est permanent. Si vous regardez déjà l’invite grub>
ou grub rescue>
, vous êtes prêt à basculer.
Les commandes suivantes fonctionnent à la fois avec grub>
et grub rescue>
. La première commande que vous devez exécuter appelle le pager, pour les sorties de commande longues de pagination:
grub> set pager=1
Il ne doit pas y avoir d’espaces de chaque côté du signe égal. Maintenant, explorons un peu. Tapez ls
pour lister toutes les partitions que GRUB voit :
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Qu’est-ce que tout cela msdos stuff
? Cela signifie que ce système a la table de partition MS-DOS à l’ancienne, plutôt que la nouvelle table de partition des identifiants uniques au monde (GPT). (Voir Utilisation de la Nouvelle Table de partition GUID sous Linux (Adieu l’ancien MBR). Si vous utilisez GPT, il dira (hd0,gpt1)
. Maintenant, fouinons. Utilisez la commande ls
pour voir quels fichiers se trouvent sur votre système:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Bonjour, nous avons trouvé le système de fichiers racine. Vous pouvez omettre les étiquettes msdos
et gpt
. Si vous laissez la barre oblique, elle affichera des informations sur la partition. Vous pouvez lire n’importe quel fichier sur le système avec la commande cat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
La lecture de /etc/issue
pourrait être utile sur un système multi-boot pour identifier vos différents Linuxes.
Démarrage à partir de grub >
Voici comment définir les fichiers de démarrage et démarrer le système à partir de l’invite grub>
. Nous savons en exécutant la commande ls
qu’il existe un système de fichiers racine Linux sur (hd0,1)
, et vous pouvez continuer à chercher jusqu’à ce que vous vérifiiez où se trouve /boot/grub
. Exécutez ensuite ces commandes en utilisant votre propre partition racine, votre noyau et votre image initrd :
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
La première ligne définit la partition sur laquelle se trouve le système de fichiers racine. La deuxième ligne indique à GRUB l’emplacement du noyau que vous souhaitez utiliser. Commencez à taper /boot/vmli
, puis utilisez tab-completion pour remplir le reste. Tapez root=/dev/sdX
pour définir l’emplacement du système de fichiers racine. Oui, cela semble redondant, mais si vous laissez cela de côté, vous aurez une panique du noyau. Comment connaissez-vous la bonne partition? hd0,1 = /dev/sda1. hd1,1 = /dev/sdb1. hd3,2 = /dev/sdd2. Je pense que vous pouvez extrapoler le reste.
La troisième ligne définit le fichier initrd
, qui doit avoir le même numéro de version que le noyau.
La quatrième ligne démarre votre système.
Sur certains systèmes Linux, les noyaux et les initrd actuels sont liés de manière symétrique au niveau supérieur du système de fichiers racine :
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
Vous pouvez donc démarrer à partir de grub>
comme ceci:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
Démarrage À partir de grub-rescue >
Si vous êtes dans le shell GRUB rescue, les commandes sont différentes, et vous devez charger le normal.mod
et linux.mod
modules:
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
Tab- l’achèvement devrait commencer à fonctionner après le chargement des deux modules.
Effectuer des réparations permanentes
Lorsque vous avez démarré votre système avec succès, exécutez ces commandes pour réparer GRUB de manière permanente:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
Lorsque vous exécutez grub-install
rappelez-vous que vous l’installez sur le secteur de démarrage de votre disque dur et non sur une partition, n’utilisez donc pas un numéro de partition comme /dev/sda1
.
Mais Cela ne Fonctionne toujours pas
Si votre système est tellement foiré que rien de tout cela ne fonctionne, essayez le disque de sauvetage en direct Super GRUB2. Le manuel officiel GNU GRUB 2.00 devrait également être utile.