Mise à jour : Debian 10.6 Buster
Ce document décrit l'interface opérateur en ligne de commande de grub
Références :
Sommaire
Grub dispose de trois modes d'affichage
Le mode d'affichage obtenu au démarrage est conditionné par la disponibilité
Lorsque grub est lancé (amorçage du système)
grub rescue> insmod normal
grub rescue> normal
grub> set
grub> echo $root
hd0,msdos1
Création ou redéfinition d'une variable
forme longue
grub> set pager=1
forme courte équivalente
grub> pager=1
Dans les exemples ci-dessous, il faudra donc remplacer (hdx,msdosy) par (hdx,gpty) dans le cas d'un partitionnement gpt
Utiliser la commande ls et la touche Entrée pour lister les unités de stockage et leurs partitions :
grub> ls (Utiliser la touche Entrée pour faire afficher la lige suivante) (hd0) (hd0,msdos05) (hd0,msdos01)
Dans cet exemple, un disque hd0 avec deux partitions ont été trouvées.
Pour connaître les numéros de partition, étiquettes, système de fichiers, date de modifications, identifiant UUID, ...
grub> ls (hd (utiliser la touche TABULATION pour faire afficher la liste des unités de stockage et partitions)
.......
grub> ls (hd0) Périphérique hd0 : Aucun système de fichiers connu détecté - Taille de secteur 512 o - Taille totale 8388608 Kio.
grub> ls (hd0,msdos1) Partition hd0,msdos1 : Type de système de fichiers ext* - Dernière date de modification jeudi 29/10/2015 19:16:43, UUID 13b613fd-89f8-4b22-a530-2f352fdbd54b - La partition commence à 1024 Kio - Taille totale XXXXXXXX Kio
Les répertoires et fichiers sont désignés par leur chemin par rapport à l'unité de stockage et la partition.
La notation longue est :
(hdx,msdosy)/chemin/vers/le/fichier
Il est possible d'omettre l'unité de stockage et la partition, en utilisant la notation implicite basée sur la variable d'environnement root
grub> set root=hdx,msdosy
grub> ls /<chemin/vers/le/fichier
grub> ls ($root)/<chemin/vers/le/fichier
grub> ls (hdx,msdosy)/<chemin/vers/le/fichier
grub> ls
grub> ls / (utiliser Tab pour obtenir la ligne suivante) lost+found/ etc/ media/ vmlinuz var/ usr/ lib/ boot/ (......) initrd.img
Dans cet exemple vmlinuz et initrd.img ont été trouvés à la racine de la partition (hd0, msdos1). Ce sont des liens vers les fichiers vmlinuz et initrd.gz, ce qui est le cas par défaut dans les installations Debian
grub> cd boot
grub> cat /etc/issue
Debian GNU/Linux 8 \n \l
grub> search --label jessie
(hd0,msdos1)
Passer l'identifiant grub de la partition d'étiquette "jessie" au paramètre root (ou à tout autre paramètre)
grub> search --label --set=root jessie
grub> echo $root
hd0,msdos1
Passer l'identifiant grub de la partition dont on connaît l'uuid au paramètre root
grub> search --fs-uuid --set=root xxxxx-xxxx-xxxx-xxxx-xxxxxx
grub> echo $root
hd0,msdos1
grub> search --file /vmlinuz
(hd0,msdos1)
Rechercher la partition contenant le fichier /vmlinuz et passer sa valeur au paramètre root :
grub> search --file --set=root /vmlinuz
grub> echo $root
hd0,msdos1
Auto-completion ou suggestion : utiliser la touche TAB en cours de saisie. Cette fonction s'applique aux commandes et noms ou chemins de fichiers
Circulation dans l'historique des commandes : flèches Haut et Bas
Pour éviter que la page ne défile lorsque la sortie dépasse la taille de l'écran, positionner le paramètre pager à 1
grub> set pager=1
grub> help
grub> (Touche tabulation)
grub> help (Nom de la commande)
Quelques commandes sont systématiquement disponibles (set, pager, ...). Les autres sont fournies par des modules (un module fournit une ou plusieurs commandes) qui doivent être préalablement chargés : voir Modules
$ cat /boot/grub/x86_64-efi/command.lst |grep lsmod
lsmod: minicmd
grub> normal ($root)/grub.cfg
grub> normal_exit
Arrêt du système
grub> insmod halt
grub> halt
Redémarrage du système
grub> insmod reboot
grub> reboot
grub> fwsetup
grub> lsmod
Forme longue- Cas d'amorçage MBR/Bios
grub> insmod $prefix/i386-pc/hello.mod
Forme longue - Cas d'amorçage UEFI
grub> insmod $prefix/x86_64/hello.mod
grub> insmod hello
grub> rmmod date
Note : si un module est chargé plusieurs fois (ce qui est indiqué dans la colonne Nombre ci-dessus), il faudra le décharger plusieurs fois pour qu'il ne soit plus disponible
Attention : Aucun contrôle n'est effectué sur les noms de variable et leur valeur. Dans l'exemple ci-dessous, on veut donner à la valeur root, la valeur hd0,msdos1, mais ....
grub> set ro0t=hd0,msdos1 # ici, on crée une nouveau paramètre : ro0t
grub> set root=hdO,msdos1 # là, on donne une mauvaise valeur : hdO,msdos1
grub> set root=hd0,msdos1 # Ouf! La variabe root est créée avec la bonne valeur : hd0,msdos1
Rien ne distingue dans leurs noms, les variables, les commandes et des modules : keymap est une commande, lang est une variable, videoinfo est le nom du module qui fournir la commande homonyme. Il est donc assez facile de faire une erreur en prenant l'un pour l'autre.
keymap est une commande dont la syntaxe est du type commande chemin de fichier. Si, au lieu de
grub> keymap /boot/grub/layouts/fr.gkb
on tape :
grub> set keymap=/boot/grub/layouts/fr.gkb
le système ne détectera pas d'erreur et créera la variable keymap, ce qui n'était pas l'effet souhaité.
Par contre, l'utilisation d'un nom de variable comme commande est détecté par le système. Si, au lieu de
grub> set lang=FR
on tape :
grub> lang FR
erreur : impossible de trouver la commmande " lang ".
le système affiche un message d'erreur.
Noter que la variable root est défini sans parenthèses, alors que le paramètre prefix est défini avec des parenthèses
grub> echo $root
hd0,msdos1
grub> echo $prefix
(hd0,msdos1)/boot/grub/
Ainsi
ls $root génère une erreur et doit-être écrit ls ($root)
ls $prefix est correct