Portál AbcLinuxu, 6. května 2025 23:08
Řešení dotazu:
opustit - restartovat - Windows 7 (loader) (on /dev/sda2)
. tak opensuse zablokuje standardní grub nabídku a spustí zkrácenou grubovou nabídku přímo do cílového systému. grub na konci svého zkráceného běhu, před tím, než předá řízení bootovanému systému by tuto zkrácenou nabídku by měl zrušit a na příští boot restaurovat standardní volbu. Je možné, že hoši něco přehlédli a grub to neudělá.
To nesouvisí s grub.cfg
, řekl bych.
Vhodnější je odstranit /boot/grub/grubenv
, protože právě tam se zapisuje, co se má spustit při příštím bootu a další více či méně dočasné informace. Ten soubor musí mít fixní délku, ale je lidsky čitelný, takže se dá snadno zkontrolovat, co je tam napsáno.
Prostě, když restartujete Linux PC a zadáte hned, jaká akce se má provést při následujícím bootování /např. spusť hned bez ptaní Windows/ provede se to normálně 1x a při úplném vypnutí PC ta žádost zanikne takže se grub2 znovu ptá kam má bootovat. - To je normální stav.To je nesmysl, Grub nemá jak zjistit, zda jde o restart nebo znovu zapnutí PC – to se může lišit nanejvýš na úrovni BIOSu, který při restartu někdy vynechává některé kontroly. Pokud zvolíte volbu Grubu před restartem, funguje to tak, že se příslušná položka menu Grubu označí jako defaultní. Po té, co příslušný operační systém nastartuje, musí konfiguraci Grubu vrátit do původního stavu, jinak ta defaultní položka menu zůstane nastavená. To asi z Windows zařídíte těžko.
GRUB_DEFAULT=saved
, aby se použila dříve uložená položka, a v položce menu pro boot Windows přes savedefault
nastavit jinou položku menu (nevím, zda je možné přes savedefault
i hodnotu zrušit, aby se zobrazilo menu).
Nemění se tam ovšem konfigurace ve smyslu editování grub.cfg
. Dočasná (nebo trvalá) preference nějaké položky se zapíše do grubenv
.
Soubor grubenv
má fixní délku 1024 bytů. Původní idea byla nejspíš taková, že by si ten soubor mohl opravdu přepisovat sám GRUB — například po splnění „boot once“ by ho uvedl zpátky do normálu.
Nakonec to tak ale v reálu nefunguje. Na dnešních filesystémech s checksumy by taková změna totiž nikdy neprošla — GRUB by musel mít ve svém Btrfs modulu celou logiku pro počítání checksumů.
Na mých systémech s Btrfs tedy boot once == boot napořád, dokud se grubenv
nedá do pořádku utilitou grub-reboot
nebo nesmaže. Pak zase začne mít prioritu nastavení implicitní položky v grub.cfg
.
Ta po naklikání v KDE opustit - restartovat - Windows 7 (loader) (on /dev/sda2)
se mi opravu vytvořil soubor /boot/grub2 grubenv
s tímto obsahem:
# GRUB Environment Block
saved_entry=openSUSE
next_entry=Windows 7 (loader) (on /dev/sda2)
po jeho odstranění, grub2 opět zobrazí nabídku všech OS k výběru bootování.
Takže problém jde opravit bez přepisování grub2 v Yastu, stačí smazat grubenv
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.