GRUB lacks write support for lvm : solved

Intro

On reprend les mêmes et on recommence. Le post précédent m’a permis d’obtenir un temps de boot raisonnable. Mais il se trouve que depuis le dernier update de mon système, l’interface GRUB a ressurgi de nulle part avec un timeout de 30s… ne nous énervons pas… Je n’ai rien contre GRUB mais comme je n’ai que Ubuntu 18.04 d’installé sur ma machine, je ne vois pas trop l’intérêt d’un timeout aussi long. J’ai cru que j’allais changer ça en 2 minutes, naïf que j’étais…

La solution qui ne marche pas

Après une rapide recherche sur le Web, car rappelons le je suis un admin du dimanche qui ne se souvient jamais de ce genre de trucs (contrairement à à peu près tous les slogans publicitaires des années 80), j’ai édité le fichier /etc/default/grub pour ramener la valeur de la variable GRUB_TIMEOUT à 0. Un petit update de tout cela comme suit

$ sudo update-grub

Un petit reboot et … horreur, GRUB est toujours là avec son timeout de 30s !!!

À la recherche du timeout perdu

Les moultes recherches effectuées sur le Web m’ont obligé à regarder de plus près certains fichiers et notamment celui qui est généré par la commande update-grub. Il s’agit du fichier /boot/grub/grub.cfg. En y recherchant la chaine de caractères timeout, je suis tombé sur les lignes suivantes:

if [ "${recordfail}" = 1 ] ; then
   set timeout=30
else

Hum, il faut donc remonter à ce recordfail… Plus haut dans le fichier, on trouve alors ceci:

function recordfail {
   set recordfail=1
   # GRUB lacks write support for lvm, so recordfail support is disabled.                         
}

Venant de me taper la résolution d’un problème lié à lvm, je tombe sur un autre truc en lien avec ça (je suis preneur d’une explication de ce message)… restons calme…

Comment modifier la valeur de cette variable recordfail ou comment modifier son timeout associé?

Après plusieurs tentatives infructueuses, j’ai finalement édité le fichier /etc/grub.d/00_header et repéré les lignes suivantes:

make_timeout ()
{
    cat << EOF                                                                                   
if &#91; "\${recordfail}" = 1 &#93; ; then                                                               
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}                                                     
else                                                                                             
EOF 

Le timeout retrouvé

Au final, j’ai donc identifié la variable GRUB_RECORDFAIL_TIMEOUT qui permet d’avoir un timeout raisonnable dans le cas où recordfail support is disabled. Il m’a suffi ensuite d’éditer le fichier /etc/default/grub d’y rajouter la ligne GRUB_RECORDFAIL_TIMEOUT=1, de regénérer le tout via sudo update-grub, de vérifier la nouvelle valeur du timeout dans le fichier /boot/grub/grub.cfg

if &#91; "${recordfail}" = 1 &#93; ; then
   set timeout=1
else

de redémarrer pour constater que ça marche !!!!

Et comme disait cette pub des années 80 :

Je f’rais pas ça tous les jours !

About Thibaud Kloczko

Graduated in CFD, Thibaud Kloczko is a software engineer at Inria. He is involved in the development of the meta platform dtk that aims at speeding up life cycle of business codes into research teams and at sharing software components between teams from different scientific fields (such as medical and biological imaging, numerical simulation, geometry, linear algebra, computational neurology).

Leave a Reply

Your email address will not be published.